Streaming from jellyfin to upnp enabled kodi


when I try to stream to a UPNP enabled Kodi in the local network, Yatse asks me to select the video-/audio-/subtitle-stream I want to send to Kodi (please check attached screenshot and logs). Jellyfin then transcodes what I have selected.
Streaming the same file from one Kodi to another Kodi works, so I know transcoding is not necessary. Streaming the same file to the local device also works without transcoding.

Not sure what the issue is. Maybe something in Jellyfin needs to be configured.

Why does Yatse ask me to select streams? Any help is appreciated.

No logs and no screenshots here.

And you should not cast to Kodi via UPnP but by selecting Kodi as a media renderer directly.

Sorry, I forgot to upload it.

Selecting Kodi as a media renderer works indeed, thank you for that hint.

I have tried to stream from Jellyfin to Oppo BluRay Player via UPNP, Jellyfin still wants to transcode; which is unnecessary (please check attached log).

UPnP device usually do not support DVDSub subs, you might want to remove the subs else Jellyfin probably merge them in the video.

I have created a DLNA profile in jellyfin. Any Codec/Container is configured for “Direct Playback”. DLNA streaming from Jellyfin webinterface to Oppo works without transcoding anything.

There are DLNA entries in Jellyfin’s log. I can see that the profile I have configured is used and nothing gets transcoded:

[2023-03-05 16:19:34.928 +01:00] [DBG] [21] Emby.Dlna.Main.DlnaEntryPoint: "OPPO UDP-203" - Received PlayRequest: PlayNow
[2023-03-05 16:19:34.930 +01:00] [DBG] [21] Emby.Dlna.DlnaManager: Found matching device profile: "Generic Device"
[2023-03-05 16:19:34.948 +01:00] [DBG] [21] Emby.Dlna.Main.DlnaEntryPoint: Profile: "Generic Device", Path: "/xx/xxx/xxxx/videoGerman.DL.AC3.1080p.BluRay.x264.mkv", isEligibleForDirectPlay: True, isEligibleForDirectStream: True
[2023-03-05 16:19:35.016 +01:00] [DBG] [21] Emby.Dlna.Main.DlnaEntryPoint: DirectPlay Result for Profile: "Generic Device", Path: "/xx/xxx/xxxx/videoGerman.DL.AC3.1080p.BluRay.x264.mkv", PlayMethod: DirectPlay, AudioStreamIndex: 1, SubtitleStreamIndex: 4, Reasons: 0
[2023-03-05 16:19:35.052 +01:00] [INF] [21] Emby.Dlna.Main.DlnaEntryPoint: StreamBuilder.BuildVideoItem( Profile="Generic Device", Path="/xx/xxx/xxxx/videoGerman.DL.AC3.1080p.BluRay.x264.mkv", AudioStreamIndex=1, SubtitleStreamIndex=4 ) => ( PlayMethod=DirectPlay, TranscodeReason=0 ) "media:/videos/093edda9-b2f1-1af2-0b90-4aa932a37c20/stream.mkv?MediaSourceId=093edda9b2f11af20b904aa932a37c20&Static=true&VideoCodec=h264&AudioCodec=eac3&AudioStreamIndex=1&SubtitleStreamIndex=4&api_key=<token>&SubtitleMethod=Embed&Tag=6135961e260734fc7e3a93d03d55964f"
[2023-03-05 16:19:35.123 +01:00] [DBG] [21] Emby.Dlna.Main.DlnaEntryPoint: "OPPO UDP-203" - Playlist created
[2023-03-05 16:19:35.126 +01:00] [DBG] [21] Emby.Dlna.Main.DlnaEntryPoint: "OPPO UDP-203" - Playing 1 items
[2023-03-05 16:19:35.134 +01:00] [DBG] [21] Emby.Dlna.Main.DlnaEntryPoint: "OPPO UDP-203" - SetAvTransport Uri: ";DeviceId=6e46f7c6-1dd2-11b2-ba20-98242bad94bb&amp;MediaSourceId=093edda9b2f11af20b904aa932a37c20&amp;Static=true&amp;VideoCodec=h264&amp;AudioCodec=eac3&amp;AudioStreamIndex=1&amp;SubtitleStreamIndex=4&amp;StartTimeTicks=9780000000&amp;SubtitleMethod=Embed&amp;Tag=6135961e260734fc7e3a93d03d55964f&amp;dlnaheaders=true" DlnaHeaders: "DLNA.ORG_PN=MATROSKA;DLNA.ORG_OP=01;DLNA.ORG_CI=0;DLNA.ORG_FLAGS=21D00000000000000000000000000000"
[2023-03-05 16:19:35.328 +01:00] [DBG] [21] Emby.Dlna.Main.DlnaEntryPoint: Dlna Device.GetRenderingProtocolAsync

But using Yatse, Yatse directly asks me to select the audio/subtitle stream. There are no DLNA entries in Jellyfin’s log:

[2023-03-05 16:22:27.682 +01:00] [INF] [32] Jellyfin.Api.Helpers.TranscodingJobHelper: "/usr/bin/ffmpeg" "-analyzeduration 200M -fflags +genpts -f matroska,webm  -canvas_size 1920x808 -i file:\"/xx/xxx/xxxx/videoGerman.DL.AC3.1080p.BluRay.x264.mkv\" -map 0:0 -map 0:1 -codec:v:0 copy -map_metadata -1 -map_chapters -1 -threads 0 -codec:a:0 copy -y \"/data/transcodes/76bf87f240e18e4ab623c9a7a77b0ad3.mkv\""
[2023-03-05 16:22:28.935 +01:00] [WRN] [15] Jellyfin.Server.Middleware.ResponseTimeMiddleware: Slow HTTP Response from "" to "" in 0:00:01.3366666 with Status Code 200

It looks like Yatse directly tells Jellyfin to transcode the file and then Jellyfin sends the transcoded file to Oppo, but not via DLNA (no DLNA entries in Jellyfin’s log).

Yatse send it’s own profile and do not use Jellyfin DLNA server yes. This allows to cast to upnp device outside of your home, something that is not natively possible.

With that said if you look at the logs:

The url sent to your device is :;dlnaheaders=true&amp;MediaSourceId=093edda9b2f11af20b904aa932a37c20&amp;AudioStreamIndex=1&amp;SubtitleStreamIndex=4&amp;api_key=REDACTED

Yatse does not ask to transcode just select the values you enter, Jellyfin should just update the container while serving the file so not real transcoding, and taking nearly 0 CPU.

UPnP does not support subtitles track selection, so if you select a subtitle this step is necessary to ensure the player can play it.

I understand.

That’s bad for Jellyfin. I stick with Yatse and Kodi as the server. That allows me to stream the file directly (without on-the-fly remux or transcode) from Kodi to Oppo/JRiver/Kodi (UPnP Renderer) while the audio/subtitle stream can be still selected on the UPnP Renderer itself (simple button press on the remote control). This is hopefully someday also possible with Jellyfin server (not a feature request).

Yatse is awesome. Thanks for your support.

1 Like

Well it’s not necessarily a Jellyfin being bad thing here, it’s a little more nuanced, as I try to handle the most cases, they probably do the same and so burn the non standard subs.

I will add a skip button in that dialog for next release to avoid doing a selection if you know the renderer can handle everything correctly.

1 Like

Thanks to the new skip button I can now send the complete file to the renderer without selecting an audio/subtitle stream. Awesome. Thank you very much.