Jellyfin Forum
SOLVED: Why transcoding HVEC on iOS app? - Printable Version

+- Jellyfin Forum (https://forum.jellyfin.org)
+-- Forum: Support (https://forum.jellyfin.org/f-support)
+--- Forum: Troubleshooting (https://forum.jellyfin.org/f-troubleshooting)
+--- Thread: SOLVED: Why transcoding HVEC on iOS app? (/t-solved-why-transcoding-hvec-on-ios-app)



Why transcoding HVEC on iOS app? - Neat-Initiative-6965 - 2025-03-22

Hi, I'm new to Jellyfin and media hosting in general. 

One of the first videos I downloaded is a 20GB 4K HVEC file.  I experience very slow buffering playing it through the Jellyfin iOS app (iPhone 11). From the dashboard, I gather the video is being transcoded for the following reason:

Quote:"The media is being converted into a format that is compatible with the device that is playing the media.
Framerate: 14fps
5.3 Mbps MP4 H264 EAC3
Reason for transcoding
The video's bitrate exceeds the limit"

1) Is there a way to avoid transcoding here? I was under the impression that iOS could play HVEC files directly. Is the file simply too large?
2) Is it normal that this transcoding process takes very long, making the video unplayable? I'm using an Intel i3 8100 (on a Fujitsu/Kontron D3644-b motherboard) which should be equipped with QuickSync. 

For completeness' sake I attach a link to Jellyfin and ffmpeg logs.

Logs Jellyfin
Code:
[2025-03-22 20:31:41.514 +01:00] [INF] [26] Jellyfin.Api.Helpers.MediaInfoHelper: User policy for "Timothy". EnablePlaybackRemuxing: True EnableVideoPlaybackTranscoding: True EnableAudioPlaybackTranscoding: True
[2025-03-22 20:31:41.696 +01:00] [INF] [21] Emby.Server.Implementations.Session.SessionManager: Playback stopped reported by app "Swiftfin iOS" "1.2" playing "A Complete Unknown". Stopped at "0" ms
[2025-03-22 20:31:45.817 +01:00] [INF] [28] Jellyfin.Api.Controllers.DynamicHlsController: Current HLS implementation doesn't support non-keyframe breaks but one is requested, ignoring that request
[2025-03-22 20:31:45.822 +01:00] [INF] [28] MediaBrowser.MediaEncoding.Transcoding.TranscodeManager: "/usr/lib/jellyfin-ffmpeg/ffmpeg" "-analyzeduration 200M -probesize 1G  -i file:\"/media/library/movies/A Complete Unknown (2024)/A.Complete.Unknown.2024.REPACK.2160p.AMZN.WEB-DL.DDP5.1.HDR.H.265-APEX.mkv\" -map_metadata -1 -map_chapters -1 -threads 0 -map 0:0 -map 0:1 -map -0:s -codec:v:0 libx264 -preset veryfast -crf 23 -maxrate 4550730 -bufsize 9101460 -x264opts:0 subme=0:me_range=16:rc_lookahead=10:me=hex:open_gop=0 -force_key_frames:0 \"expr:gte(t,n_forced*3)\" -sc_threshold:v:0 0 -vf \"setparams=color_primaries=bt2020:color_trc=smpte2084:colorspace=bt2020nc,scale=trunc(min(max(iw\,ih*a)\,1280)/2)*2:trunc(ow/a/2)*2,tonemapx=tonemap=bt2390:desat=0:peak=100:t=bt709:m=bt709:p=bt709:format=yuv420p\" -codec:a:0 copy -copyts -avoid_negative_ts disabled -max_muxing_queue_size 2048 -f hls -max_delay 5000000 -hls_time 3 -hls_segment_type fmp4 -hls_fmp4_init_filename \"7cc0cb58dfa3ed98c4c5c6f1bd1b315f-1.mp4\" -start_number 0 -hls_segment_filename \"/cache/transcodes/7cc0cb58dfa3ed98c4c5c6f1bd1b315f%d.mp4\" -hls_playlist_type vod -hls_list_size 0 -y \"/cache/transcodes/7cc0cb58dfa3ed98c4c5c6f1bd1b315f.m3u8\""
[2025-03-22 20:32:20.302 +01:00] [INF] [26] MediaBrowser.Controller.MediaEncoding.TranscodingJob: Stopping ffmpeg process with q command for "/cache/transcodes/7cc0cb58dfa3ed98c4c5c6f1bd1b315f.m3u8"
[2025-03-22 20:32:22.148 +01:00] [INF] [26] MediaBrowser.MediaEncoding.Transcoding.TranscodeManager: FFmpeg exited with code 0
[2025-03-22 20:32:22.151 +01:00] [INF] [26] Jellyfin.Api.Controllers.DynamicHlsController: Current HLS implementation doesn't support non-keyframe breaks but one is requested, ignoring that request
[2025-03-22 20:32:22.152 +01:00] [INF] [26] MediaBrowser.MediaEncoding.Transcoding.TranscodeManager: "/usr/lib/jellyfin-ffmpeg/ffmpeg" "-analyzeduration 200M -probesize 1G -ss 00:41:00.000 -noaccurate_seek  -i file:\"/media/library/movies/A Complete Unknown (2024)/A.Complete.Unknown.2024.REPACK.2160p.AMZN.WEB-DL.DDP5.1.HDR.H.265-APEX.mkv\" -map_metadata -1 -map_chapters -1 -threads 0 -map 0:0 -map 0:1 -map -0:s -codec:v:0 libx264 -preset veryfast -crf 23 -maxrate 4550730 -bufsize 9101460 -x264opts:0 subme=0:me_range=16:rc_lookahead=10:me=hex:open_gop=0 -force_key_frames:0 \"expr:gte(t,n_forced*3)\" -sc_threshold:v:0 0 -vf \"setparams=color_primaries=bt2020:color_trc=smpte2084:colorspace=bt2020nc,scale=trunc(min(max(iw\,ih*a)\,1280)/2)*2:trunc(ow/a/2)*2,tonemapx=tonemap=bt2390:desat=0:peak=100:t=bt709:m=bt709:p=bt709:format=yuv420p\" -codec:a:0 copy -copyts -avoid_negative_ts disabled -max_muxing_queue_size 2048 -f hls -max_delay 5000000 -hls_time 3 -hls_segment_type fmp4 -hls_fmp4_init_filename \"7cc0cb58dfa3ed98c4c5c6f1bd1b315f-1.mp4\" -start_number 820 -hls_segment_filename \"/cache/transcodes/7cc0cb58dfa3ed98c4c5c6f1bd1b315f%d.mp4\" -hls_playlist_type vod -hls_list_size 0 -y \"/cache/transcodes/7cc0cb58dfa3ed98c4c5c6f1bd1b315f.m3u8\""
[2025-03-22 20:34:10.418 +01:00] [INF] [55] Emby.Server.Implementations.Session.SessionWebSocketListener: Sending ForceKeepAlive message to 1 inactive WebSockets.
[2025-03-22 20:37:58.420 +01:00] [INF] [10] Emby.Server.Implementations.Session.SessionWebSocketListener: Sending ForceKeepAlive message to 1 inactive WebSockets.

Logs ffmpeg


RE: Why transcoding HVEC on iOS app? - Neat-Initiative-6965 - 2025-03-22

Upon inspection, the same occurs when I open this video in Jellyfin web in macOS Safari.


RE: Why transcoding HVEC on iOS app? - TheDreadPirate - 2025-03-23

You set a bit rate limit either globally for remote streams or you set a bit rate limit on your client. The other possibility is that the auto connection speed detection determined that your connection was too slow.

Code:
The video's bitrate exceeds the limit"



RE: Why transcoding HVEC on iOS app? - Neat-Initiative-6965 - 2025-03-23

(2025-03-23, 12:30 AM)TheDreadPirate Wrote: You set a bit rate limit either globally for remote streams or you set a bit rate limit on your client.  The other possibility is that the auto connection speed detection determined that your connection was too slow.

Code:
The video's bitrate exceeds the limit"

Thanks! 

As to my first question (for fellow noobs), transcoding can be disabled by allowing a high enough bitrate on the client device (and making sure no limit has been set for all client devices)
  • Client side: in the Dashboard > Settings > Playback > Internet Quality > 120 Mbps
  • Globally: in the Dashboard > Streaming > leave empty

As to my second question, transcoding was very slow because I had to enable Intel Quicksync (Hardware Acceleration) in the Dashboard > Playback > Transcoding > Intel QuickSync