iOS does not transcode

Hi everyone!

Problem
I’m struggling the past couple of days after the update to 10.6.0 with my Jellyfin. My iOS devices do not transcode anymore! (I did not test Android, but different web browsers on different PCs, Macs work fine and transcode.

My server runs on a Windows 10 machine and I stalked the forums and Reddit over the past week to hope to find someone with the same issue, but without success.

Here is the thing. After the update, I noticed that my JellyfinApp (iPhone6, 12.4.5) did not work with all my videos anymore. I tested my iPad and had the same issue. I cant transcode anything anymore via the Jellyfin App or via the website.

The log talks about an unknown profile that requests to watch something and I guess this is the issue. (A log is at the end of this post)

I found on GitHub someone with the same problem (I guess, at least the bug report matches 100%) but they did not found any solution yet. https://github.com/jellyfin/jellyfin/issues/2546

What did I try?
First I checked for FFmpeg, relinked it in the app, installed the latest version, and linked that but nothing worked.

Then I did a fresh install of Jellyfin for windows but kept the program data. - did not work

Then I did a fresh install of Jellyfin for windows and deleted every reference of it from the machine. - no success.

Help
Does anyone have an idea of how to overcome this problem? A dirty solution for now? I tried to install infuse, but it seems to need a subscription to work :confused:

Log

    [2020-07-26 21:13:57.159 +02:00] [INF] [33] Emby.Server.Implementations.HttpServer.HttpListenerHost: WS "::ffff:91.5.184.97" request
[2020-07-26 21:13:57.646 +02:00] [WRN] [22] Emby.Server.Implementations.HttpServer.HttpListenerHost: HTTP Response 200 to "127.0.0.1". Time (slow): 0:00:00.5185534. "thisisnotalink.localhost:8090/System/ActivityLog/Entries?startIndex=0&limit=7&minDate=2020-07-25T19%3A13%3A57.122Z&hasUserId=true"
[2020-07-26 21:13:57.779 +02:00] [WRN] [19] Emby.Server.Implementations.HttpServer.HttpListenerHost: HTTP Response 200 to "127.0.0.1". Time (slow): 0:00:00.6500363. "thisisnotalink.localhost:8090/System/ActivityLog/Entries?startIndex=0&limit=7&minDate=2020-07-25T19%3A13%3A57.123Z&hasUserId=true"
[2020-07-26 21:14:00.397 +02:00] [ERR] [22] Emby.Server.Implementations.HttpServer.HttpListenerHost: Error processing request: "The process cannot access the file 'C:\ProgramData\Jellyfin\Server\cache\images\resized-images\9\975b7361-8bb9-eee9-7a7d-aac2024883be.jpg' because it is being used by another process". URL: "thisisnotalink/Items/22bc1c6c2bf01dc2362cd47443398d7b/Images/Backdrop/0?tag=6666b80fa2b60abe244eaacaf767dd78&maxWidth=2560&quality=80"
[2020-07-26 21:14:08.405 +02:00] [INF] [10] MediaBrowser.Api.Playback.MediaInfoService: GetPostedPlaybackInfo profile: DeviceProfile { Name: null, Id: null, Identification: null, FriendlyName: null, Manufacturer: null, ManufacturerUrl: null, ModelName: null, ModelDescription: null, ModelNumber: null, ModelUrl: null, SerialNumber: null, EnableAlbumArtInDidl: False, EnableSingleAlbumArtLimit: False, EnableSingleSubtitleLimit: False, SupportedMediaTypes: "Audio,Photo,Video", UserId: null, AlbumArtPn: null, MaxAlbumArtWidth: 0, MaxAlbumArtHeight: 0, MaxIconWidth: null, MaxIconHeight: null, MaxStreamingBitrate: 120000000, MaxStaticBitrate: 100000000, MusicStreamingTranscodingBitrate: 192000, MaxStaticMusicBitrate: null, SonyAggregationFlags: null, ProtocolInfo: null, TimelineOffsetSeconds: 0, RequiresPlainVideoItems: False, RequiresPlainFolders: False, EnableMSMediaReceiverRegistrar: False, IgnoreTranscodeByteRangeRequests: False, XmlRootAttributes: [], DirectPlayProfiles: [DirectPlayProfile { Container: "mp4,m4v", AudioCodec: "ac3,eac3,mp3,aac,dca,dts,flac", VideoCodec: "h264,vc1", Type: Video }, DirectPlayProfile { Container: "mp3", AudioCodec: "mp3", VideoCodec: null, Type: Audio }, DirectPlayProfile { Container: "aac", AudioCodec: null, VideoCodec: null, Type: Audio }, DirectPlayProfile { Container: "m4a,m4b", AudioCodec: "aac", VideoCodec: null, Type: Audio }, DirectPlayProfile { Container: "flac", AudioCodec: null, VideoCodec: null, Type: Audio }, DirectPlayProfile { Container: "alac", AudioCodec: null, VideoCodec: null, Type: Audio }, DirectPlayProfile { Container: "m4a,m4b", AudioCodec: "alac", VideoCodec: null, Type: Audio }, DirectPlayProfile { Container: "wav", AudioCodec: null, VideoCodec: null, Type: Audio }], TranscodingProfiles: [TranscodingProfile { Container: "aac", Type: Audio, VideoCodec: null, AudioCodec: "aac", Protocol: "hls", EstimateContentLength: False, EnableMpegtsM2TsMode: False, TranscodeSeekInfo: Auto, CopyTimestamps: False, Context: Streaming, EnableSubtitlesInManifest: False, MaxAudioChannels: "2", MinSegments: 2, SegmentLength: 0, BreakOnNonKeyFrames: True }, TranscodingProfile { Container: "aac", Type: Audio, VideoCodec: null, AudioCodec: "aac", Protocol: "http", EstimateContentLength: False, EnableMpegtsM2TsMode: False, TranscodeSeekInfo: Auto, CopyTimestamps: False, Context: Streaming, EnableSubtitlesInManifest: False, MaxAudioChannels: "2", MinSegments: 0, SegmentLength: 0, BreakOnNonKeyFrames: False }, TranscodingProfile { Container: "mp3", Type: Audio, VideoCodec: null, AudioCodec: "mp3", Protocol: "http", EstimateContentLength: False, EnableMpegtsM2TsMode: False, TranscodeSeekInfo: Auto, CopyTimestamps: False, Context: Streaming, EnableSubtitlesInManifest: False, MaxAudioChannels: "2", MinSegments: 0, SegmentLength: 0, BreakOnNonKeyFrames: False }, TranscodingProfile { Container: "wav", Type: Audio, VideoCodec: null, AudioCodec: "wav", Protocol: "http", EstimateContentLength: False, EnableMpegtsM2TsMode: False, TranscodeSeekInfo: Auto, CopyTimestamps: False, Context: Streaming, EnableSubtitlesInManifest: False, MaxAudioChannels: "2", MinSegments: 0, SegmentLength: 0, BreakOnNonKeyFrames: False }, TranscodingProfile { Container: "mp3", Type: Audio, VideoCodec: null, AudioCodec: "mp3", Protocol: "http", EstimateContentLength: False, EnableMpegtsM2TsMode: False, TranscodeSeekInfo: Auto, CopyTimestamps: False, Context: Static, EnableSubtitlesInManifest: False, MaxAudioChannels: "2", MinSegments: 0, SegmentLength: 0, BreakOnNonKeyFrames: False }, TranscodingProfile { Container: "aac", Type: Audio, VideoCodec: null, AudioCodec: "aac", Protocol: "http", EstimateContentLength: False, EnableMpegtsM2TsMode: False, TranscodeSeekInfo: Auto, CopyTimestamps: False, Context: Static, EnableSubtitlesInManifest: False, MaxAudioChannels: "2", MinSegments: 0, SegmentLength: 0, BreakOnNonKeyFrames: False }, TranscodingProfile { Container: "wav", Type: Audio, VideoCodec: null, AudioCodec: "wav", Protocol: "http", EstimateContentLength: False, EnableMpegtsM2TsMode: False, TranscodeSeekInfo: Auto, CopyTimestamps: False, Context: Static, EnableSubtitlesInManifest: False, MaxAudioChannels: "2", MinSegments: 0, SegmentLength: 0, BreakOnNonKeyFrames: False }, TranscodingProfile { Container: "ts", Type: Video, VideoCodec: "h264", AudioCodec: "ac3,eac3,mp3,aac", Protocol: "hls", EstimateContentLength: False, EnableMpegtsM2TsMode: False, TranscodeSeekInfo: Auto, CopyTimestamps: False, Context: Streaming, EnableSubtitlesInManifest: False, MaxAudioChannels: "2", MinSegments: 2, SegmentLength: 0, BreakOnNonKeyFrames: True }, TranscodingProfile { Container: "mp4", Type: Video, VideoCodec: "h264", AudioCodec: "ac3,eac3,mp3,aac,dca,dts,flac", Protocol: "http", EstimateContentLength: False, EnableMpegtsM2TsMode: False, TranscodeSeekInfo: Auto, CopyTimestamps: False, Context: Static, EnableSubtitlesInManifest: False, MaxAudioChannels: null, MinSegments: 0, SegmentLength: 0, BreakOnNonKeyFrames: False }], ContainerProfiles: [], CodecProfiles: [CodecProfile { Type: Video, Conditions: [ProfileCondition { Condition: NotEquals, Property: IsAnamorphic, Value: "true", IsRequired: False }, ProfileCondition { Condition: EqualsAny, Property: VideoProfile, Value: "high|main|baseline|constrained baseline", IsRequired: False }, ProfileCondition { Condition: LessThanEqual, Property: VideoLevel, Value: "51", IsRequired: False }, ProfileCondition { Condition: NotEquals, Property: IsInterlaced, Value: "true", IsRequired: False }], ApplyConditions: [], Codec: "h264", Container: null }], ResponseProfiles: [ResponseProfile { Container: "m4v", AudioCodec: null, VideoCodec: null, Type: Video, OrgPn: null, MimeType: "video/mp4", Conditions: [] }], SubtitleProfiles: [SubtitleProfile { Format: "vtt", Method: External, DidlMode: null, Language: null, Container: null }] }
[2020-07-26 21:14:08.516 +02:00] [INF] [10] MediaBrowser.Api.Playback.MediaInfoService: User policy for "Bloham". EnablePlaybackRemuxing: True EnableVideoPlaybackTranscoding: True EnableAudioPlaybackTranscoding: True
[2020-07-26 21:14:08.518 +02:00] [INF] [10] MediaBrowser.Api.Playback.MediaInfoService: Not eligible for DirectPlay due to unsupported subtitles
[2020-07-26 21:14:08.519 +02:00] [INF] [10] MediaBrowser.Api.Playback.MediaInfoService: Not eligible for DirectStream due to unsupported subtitles
[2020-07-26 21:14:08.520 +02:00] [INF] [10] MediaBrowser.Api.Playback.MediaInfoService: Profile: "Unknown Profile", Path: "F:\Series\Family\Season 1\Family.S01E01.x265.AC3.MultiSUB-Family1.mp4", isEligibleForDirectPlay: False, isEligibleForDirectStream: False
[2020-07-26 21:14:08.522 +02:00] [INF] [10] MediaBrowser.Api.Playback.MediaInfoService: Not eligible for DirectPlay due to unsupported subtitles
[2020-07-26 21:14:08.523 +02:00] [INF] [10] MediaBrowser.Api.Playback.MediaInfoService: Not eligible for DirectStream due to unsupported subtitles
[2020-07-26 21:14:08.524 +02:00] [INF] [10] MediaBrowser.Api.Playback.MediaInfoService: Profile: "Unknown Profile", Path: "F:\Series\Family\Season 1\Family.S01E01.x265.AC3.MultiSUB-Family1.mp4", isEligibleForDirectPlay: False, isEligibleForDirectStream: False
[2020-07-26 21:14:08.525 +02:00] [INF] [10] MediaBrowser.Api.Playback.MediaInfoService: Not eligible for DirectPlay due to unsupported subtitles
[2020-07-26 21:14:08.526 +02:00] [INF] [10] MediaBrowser.Api.Playback.MediaInfoService: Not eligible for DirectStream due to unsupported subtitles
[2020-07-26 21:14:08.527 +02:00] [INF] [10] MediaBrowser.Api.Playback.MediaInfoService: Profile: "Unknown Profile", Path: "F:\Series\Family\Season 1\Family.S01E01.x265.AC3.MultiSUB-Family1.mp4", isEligibleForDirectPlay: False, isEligibleForDirectStream: False

Hi @Bloham! Unfortunately it sounds like you are encountering this known issue. We don’t have a fix for it yet. Hopefully someone will track it down soon!

Was this issue fixed?

I’m running:

Version: 10.6.4
Operating System: Windows (running as service)
Architecture: X64

iOS iPhone SE 13.5.1
JF client 1.3.0

MP4 play fine. Local/network browser client transcoding works fine. Streaming all sorts of files to Infuse on iOS iPhone and Apple TV 4k works fine.

But iPhone just crashes trying to ask JF for transcoding.

I assume my issue is related to this bug, which seems to be JF on iOS is failing to get JF server to send transcodes.

As a fudge is it possible to force JF to always offer transcodes to specific clients using a white/blacklist approach?

Currently using JF into Infuse on iOS clients, but then it’s melting my iPhone doing mkv h264s or TS h264 streams! Definitely need the JF server to be doing the leg work for iPhone clients!

Just FYI.

I’ve installed JF 10.7.0 on a test machine.

.ts with h264/ac3 stream, transcodes on iPhone SE (2015) ok
.mp4 with h264/aac stream, ok (was before as it was direct play)
.mkv with h264/ac3 stream, no transcode, fails with swirly icon and locks up JF client

So it’s at least working with .ts now.

Uh, was just checking logs. None for the .mkv file, just the .ts.
Invoked the mkv video to see why no log appearing, and now it is working.

Bit confused however that h264 in ts and mkv is invoking transcoding (while ac3 remains direct streamed)

The logs seem to suggest that the video is being transcoded.

I assume maybe the h264 in the .ts stream is not compatible with the iPhone (high /4 main?), but I think I re-encoded the h264 in the mkv to iPhone compatible h264.

More testing needed… but it’s looking positive that transcoding is being invoked most of the time now!

Cheers