Jellyfin Forum
IPTV, HEVC Settings - Printable Version

+- Jellyfin Forum (https://forum.jellyfin.org)
+-- Forum: Support (https://forum.jellyfin.org/f-support)
+--- Forum: General Questions (https://forum.jellyfin.org/f-general-questions)
+--- Thread: IPTV, HEVC Settings (/t-iptv-hevc-settings)



IPTV, HEVC Settings - pixel24 - 2024-12-26

Hi,

First of all, Merry Christmas to everyone! 😊
I recently set up my IPTV system. I installed Streammaster and integrated both the stream and EPG data. The URLs provided by Streammaster were added to Jellyfin. Most of the streams are in HEVC format. In Jellyfin, I’ve configured hardware transcoding using an NVIDIA GPU with its driver.

I need some help understanding transcoding. The stream from Streammaster comes in HEVC format. I’ve enabled hardware transcoding for this codec, meaning that the encoding is handled by the NVIDIA GPU (with its driver) in hardware, which is faster than software encoding via the CPU. Is that correct so far?
How or in what format (codec) does Jellyfin send the stream to the client? On my client (Linux Mint 21.3), I’m using Jellyfin Media Player (1.11.1). In its settings, there are several parameters related to the video format, etc. What are the best configurations here?

If I understand correctly, it’s generally a good idea to set the parameters so that the server does most of the "work," preparing the data to minimize bandwidth usage and reduce resource consumption on the client side.

Or am I misunderstanding this?

with best


RE: IPTV, HEVC Settings - TheDreadPirate - 2024-12-26

Keep in mind that transcoding only happens when the client needs it. If the client can play the media as is, the server will just send the media unmodified. If the source is IPTV, and the client can play it directly, the client will directly connect to the IPTV source instead of going through the server. Unless you force all clients to go through the server for IPTV.

If you have a desktop PC with decent specs running Jellyfin Media Player, it should direct play most files and IPTV streams. You shouldn't need to fiddle with any of the JMP settings, except in certain edge cases.


RE: IPTV, HEVC Settings - pixel24 - 2024-12-27

Okay, I wasn’t aware of that. My laptop, running Linux Mint 21.3, has a hybrid graphics setup. Look here:

Code:
lspci|grep VGA
00:02.0 VGA compatible controller: Intel Corporation CoffeeLake-H GT2 [UHD Graphics 630]
01:00.0 VGA compatible controller: NVIDIA Corporation GP107GLM [Quadro P1000 Mobile] (rev a1)

I’ve installed the NVIDIA driver version 550.120 and enabled the "Performance Mode." This means the client doesn’t need transcoding for HEVC streams.
You mentioned that in this case, the client connects directly to the IPTV source and doesn’t pass through the server. In this context, the IPTV source would be Streammaster, correct?


RE: IPTV, HEVC Settings - TheDreadPirate - 2024-12-27

The client only directly connects to the IPTV source is the client doesn't require transcoding or remuxing of the IPTV stream.  When you play it, the dashboard should indicate the playback method.  And the client can also display the playback method.

Here is an example when I use my browser to watch this live TV stream.  It requires remuxing, which means that the client (browser) connects to the server while the server connects to the IPTV source.

   

When I watch the same stream via Jellyfin Media Player it is direct playing.  Netstat confirms it is going directly to the IPTV provider.

   


RE: IPTV, HEVC Settings - pixel24 - 2024-12-28

Thank you for the clarification; I had to look up what "remuxing" means, but now I understand.
However, something seems to be wrong with my settings. In Jellyfin, I have enabled transcoding according to the NVIDIA support matrix (see screenshots).
When I play a channel that delivers HEVC content in the Jellyfin client on my laptop (with an NVIDIA card), it runs perfectly. But when I try to play the same channel on my Android device using the stock app, only a spinning circle appears, and nothing happens.
I tried to locate the error by examining the log files:
  • /var/log/jellyfin/jellyfin20241228.log
  • /var/log/jellyfin/FFmpeg.Transcode-2024-12-28_10-21-01__7cb00f30.log
  • /var/log/jellyfin/FFmpeg.Remux-2024-12-28_10-00-44_54fb42b3ab3d0cf73dd65be3df25adad_e7473f04.log

But I cannot pinpoint the issue.

Code:
root@media02:/var/log/jellyfin# tail -f jellyfin20241228.log FFmpeg.Transcode-2024-12-28_10-21-01__7cb00f30.log FFmpeg.Remux-2024-12-28_10-00-44_54fb42b3ab3d0cf73dd65be3df25adad_e7473f04.log

==> jellyfin20241228.log <==
[2024-12-28 10:17:59.401 +01:00] [INF] FFmpeg exited with code 0
[2024-12-28 10:18:12.214 +01:00] [INF] "/usr/lib/jellyfin-ffmpeg/ffmpeg" "-analyzeduration 200M -probesize 1G  -i file:\"/data01/Audio/Musik/Zucchero/Spirito DiVino∶ Stray Cat In A Mad Dog City/Zucchero - Così Celeste.ogg\" -map_metadata -1 -map_chapters -1 -threads 0  -vn -acodec libfdk_aac -ab 256000 -ac 2 -ar 44100 -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 \"9422c2f73e1dc047215141cbffeb21cf-1.mp4\" -start_number 0 -hls_segment_filename \"/var/lib/jellyfin/transcodes/9422c2f73e1dc047215141cbffeb21cf%d.mp4\" -hls_playlist_type vod -hls_list_size 0 -y \"/var/lib/jellyfin/transcodes/9422c2f73e1dc047215141cbffeb21cf.m3u8\""
[2024-12-28 10:18:17.346 +01:00] [INF] FFmpeg exited with code 0
[2024-12-28 10:18:29.893 +01:00] [WRN] Unable to find linked item at path "/data01/Audio/Musik/Blondie/Blondie's Hits/Blondie - Heart Of Glass.ogg"
[2024-12-28 10:19:01.193 +01:00] [INF] "Webhook Item Added Notifier" Completed after 0 minute(s) and 0 seconds
[2024-12-28 10:20:32.196 +01:00] [INF] "Webhook Item Added Notifier" Completed after 0 minute(s) and 0 seconds
[2024-12-28 10:21:01.748 +01:00] [INF] "/usr/lib/jellyfin-ffmpeg/ffmpeg" "-analyzeduration 200M -probesize 1G  -i file:\"/data01/Audio/Musik/Sisters Of Mercy/First And Last And Always/The Sisters Of Mercy - Marian (Version).ogg\" -map_metadata -1 -map_chapters -1 -threads 0  -vn -acodec libfdk_aac -ab 256000 -ac 2 -ar 44100 -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 \"c3bcaa93342ce2c75fc589cb7231facd-1.mp4\" -start_number 0 -hls_segment_filename \"/var/lib/jellyfin/transcodes/c3bcaa93342ce2c75fc589cb7231facd%d.mp4\" -hls_playlist_type vod -hls_list_size 0 -y \"/var/lib/jellyfin/transcodes/c3bcaa93342ce2c75fc589cb7231facd.m3u8\""
[2024-12-28 10:21:07.372 +01:00] [INF] FFmpeg exited with code 0
[2024-12-28 10:22:03.194 +01:00] [INF] "Webhook Item Added Notifier" Completed after 0 minute(s) and 0 seconds
[2024-12-28 10:22:08.790 +01:00] [INF] Playback stopped reported by app "Finamp" "0.9.12" playing "Summertime Sadness". Stopped at "263986" ms

==> FFmpeg.Transcode-2024-12-28_10-21-01__7cb00f30.log <==
[hls @ 0x55a027a245c0] Opening '/var/lib/jellyfin/transcodes/c3bcaa93342ce2c75fc589cb7231facd108.mp4' for writing
[hls @ 0x55a027a245c0] Opening '/var/lib/jellyfin/transcodes/c3bcaa93342ce2c75fc589cb7231facd109.mp4' for writing
[hls @ 0x55a027a245c0] Opening '/var/lib/jellyfin/transcodes/c3bcaa93342ce2c75fc589cb7231facd110.mp4' for writing
[hls @ 0x55a027a245c0] Opening '/var/lib/jellyfin/transcodes/c3bcaa93342ce2c75fc589cb7231facd111.mp4' for writing
size=N/A time=00:05:08.18 bitrate=N/A speed=  56x   
[hls @ 0x55a027a245c0] Opening '/var/lib/jellyfin/transcodes/c3bcaa93342ce2c75fc589cb7231facd112.mp4' for writing
[hls @ 0x55a027a245c0] Opening '/var/lib/jellyfin/transcodes/c3bcaa93342ce2c75fc589cb7231facd113.mp4' for writing
[hls @ 0x55a027a245c0] Opening '/var/lib/jellyfin/transcodes/c3bcaa93342ce2c75fc589cb7231facd114.mp4' for writing
[out#0/hls @ 0x55a027a27140] video:0KiB audio:10779KiB subtitle:0KiB other streams:0KiB global headers:0KiB muxing overhead: unknown
size=N/A time=00:05:15.48 bitrate=N/A speed=56.6x   
==> FFmpeg.Remux-2024-12-28_10-00-44_54fb42b3ab3d0cf73dd65be3df25adad_e7473f04.log <==
[vost#0:0/copy @ 0x55a7aa1befc0] Non-monotonic DTS; previous: 5631480, current: 5629680; changing to 5631481. This may result in incorrect timestamps in the output file.
[vost#0:0/copy @ 0x55a7aa1befc0] Non-monotonic DTS; previous: 5638680, current: 5636880; changing to 5638681. This may result in incorrect timestamps in the output file.
size=N/A time=00:00:52.55 bitrate=N/A speed=1.44x   

[q] command received. Exiting.

[hls @ 0x55a7aa1bbd00] Opening '/var/lib/jellyfin/transcodes/8018aaeeae0a21e3e588e511260c2b7811.ts' for writing
[hls @ 0x55a7aa1bbd00] Opening '/var/lib/jellyfin/transcodes/8018aaeeae0a21e3e588e511260c2b78.m3u8.tmp' for writing
[out#0/hls @ 0x55a7aa1be500] video:24559KiB audio:1002KiB subtitle:0KiB other streams:0KiB global headers:0KiB muxing overhead: unknown
size=N/A time=00:00:52.55 bitrate=N/A speed=1.41x   
==> jellyfin20241228.log <==
[2024-12-28 10:23:23.635 +01:00] [INF] WS "2a02:8071:7102:a1dc:ba3f:ddbb:6cc8:a4c2" request
[2024-12-28 10:23:29.752 +01:00] [INF] User policy for "s.gehr". EnablePlaybackRemuxing: True EnableVideoPlaybackTranscoding: True EnableAudioPlaybackTranscoding: True
[2024-12-28 10:23:29.752 +01:00] [INF] Opening channel stream from "Emby", external channel Id: "m3u_705277e417a2ed915f3d6dc5648a7cec54fb42b3ab3d0cf73dd65be3df25adad"
[2024-12-28 10:23:29.752 +01:00] [INF] Streaming Channel "m3u_705277e417a2ed915f3d6dc5648a7cec54fb42b3ab3d0cf73dd65be3df25adad"
[2024-12-28 10:23:29.753 +01:00] [INF] Live stream "54fb42b3ab3d0cf73dd65be3df25adad" consumer count is now 2
[2024-12-28 10:23:29.753 +01:00] [INF] Live tv media info probe took "0.0003659" seconds
[2024-12-28 10:23:29.754 +01:00] [INF] Live stream opened: MediaSourceInfo { Protocol: Http, Id: "54fb42b3ab3d0cf73dd65be3df25adad", Path: "http://192.168.83.13:7095/v/2/131", EncoderPath: null, EncoderProtocol: null, Type: Default, Container: "ts", Size: null, Name: null, IsRemote: False, ETag: null, RunTimeTicks: null, ReadAtNativeFramerate: False, IgnoreDts: True, IgnoreIndex: False, GenPtsInput: False, SupportsTranscoding: True, SupportsDirectStream: True, SupportsDirectPlay: False, IsInfiniteStream: True, UseMostCompatibleTranscodingProfile: False, RequiresOpening: True, OpenToken: null, RequiresClosing: True, LiveStreamId: "e2329f4997b378e64ccf8fa396deb76e_af999c25a00715699361240d4c6c7a53_54fb42b3ab3d0cf73dd65be3df25adad", BufferMs: null, RequiresLooping: False, SupportsProbing: True, VideoType: null, IsoType: null, Video3DFormat: null, MediaStreams: [MediaStream { Codec: "h264", CodecTag: null, Language: null, ColorRange: null, ColorSpace: null, ColorTransfer: null, ColorPrimaries: null, DvVersionMajor: null, DvVersionMinor: null, DvProfile: null, DvLevel: null, RpuPresentFlag: null, ElPresentFlag: null, BlPresentFlag: null, DvBlSignalCompatibilityId: null, Rotation: null, Comment: null, TimeBase: "1/90000", CodecTimeBase: null, Title: null, VideoRange: SDR, VideoRangeType: SDR, VideoDoViTitle: null, AudioSpatialFormat: None, LocalizedUndefined: null, LocalizedDefault: null, LocalizedForced: null, LocalizedExternal: null, LocalizedHearingImpaired: null, DisplayTitle: "144p H264 SDR", NalLengthSize: "0", IsInterlaced: False, IsAVC: null, ChannelLayout: null, BitRate: null, BitDepth: null, RefFrames: 1, PacketLength: null, Channels: null, SampleRate: null, IsDefault: False, IsForced: False, IsHearingImpaired: False, Height: 0, Width: 0, AverageFrameRate: 50, RealFrameRate: 50, ReferenceFrameRate: 50, Profile: null, Type: Video, AspectRatio: null, Index: -1, Score: null, IsExternal: False, DeliveryMethod: null, DeliveryUrl: null, IsExternalUrl: null, IsTextSubtitleStream: False, IsPgsSubtitleStream: False, IsExtractableSubtitleStream: False, SupportsExternalStream: False, Path: null, PixelFormat: null, Level: -99, IsAnamorphic: False }, MediaStream { Codec: "aac", CodecTag: null, Language: null, ColorRange: null, ColorSpace: null, ColorTransfer: null, ColorPrimaries: null, DvVersionMajor: null, DvVersionMinor: null, DvProfile: null, DvLevel: null, RpuPresentFlag: null, ElPresentFlag: null, BlPresentFlag: null, DvBlSignalCompatibilityId: null, Rotation: null, Comment: null, TimeBase: "1/90000", CodecTimeBase: null, Title: null, VideoRange: Unknown, VideoRangeType: Unknown, VideoDoViTitle: null, AudioSpatialFormat: None, LocalizedUndefined: null, LocalizedDefault: "Standard", LocalizedForced: null, LocalizedExternal: "Extern", LocalizedHearingImpaired: null, DisplayTitle: "AAC - Stereo", NalLengthSize: null, IsInterlaced: False, IsAVC: False, ChannelLayout: "stereo", BitRate: 133689, BitDepth: null, RefFrames: null, PacketLength: null, Channels: 2, SampleRate: 96000, IsDefault: False, IsForced: False, IsHearingImpaired: False, Height: null, Width: null, AverageFrameRate: null, RealFrameRate: null, ReferenceFrameRate: null, Profile: "LC", Type: Audio, AspectRatio: null, Index: -1, Score: null, IsExternal: False, DeliveryMethod: null, DeliveryUrl: null, IsExternalUrl: null, IsTextSubtitleStream: False, IsPgsSubtitleStream: False, IsExtractableSubtitleStream: False, SupportsExternalStream: False, Path: null, PixelFormat: null, Level: 0, IsAnamorphic: null }], MediaAttachments: [], Formats: [], Bitrate: 133689, FallbackMaxStreamingBitrate: 30000000, Timestamp: null, RequiredHttpHeaders: [("User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36")], TranscodingUrl: null, TranscodingSubProtocol: http, TranscodingContainer: null, AnalyzeDurationMs: 3000, TranscodeReasons: 0, DefaultAudioStreamIndex: null, DefaultSubtitleStreamIndex: null, HasSegments: False, VideoStream: MediaStream { Codec: "h264", CodecTag: null, Language: null, ColorRange: null, ColorSpace: null, ColorTransfer: null, ColorPrimaries: null, DvVersionMajor: null, DvVersionMinor: null, DvProfile: null, DvLevel: null, RpuPresentFlag: null, ElPresentFlag: null, BlPresentFlag: null, DvBlSignalCompatibilityId: null, Rotation: null, Comment: null, TimeBase: "1/90000", CodecTimeBase: null, Title: null, VideoRange: SDR, VideoRangeType: SDR, VideoDoViTitle: null, AudioSpatialFormat: None, LocalizedUndefined: null, LocalizedDefault: null, LocalizedForced: null, LocalizedExternal: null, LocalizedHearingImpaired: null, DisplayTitle: "144p H264 SDR", NalLengthSize: "0", IsInterlaced: False, IsAVC: null, ChannelLayout: null, BitRate: null, BitDepth: null, RefFrames: 1, PacketLength: null, Channels: null, SampleRate: null, IsDefault: False, IsForced: False, IsHearingImpaired: False, Height: 0, Width: 0, AverageFrameRate: 50, RealFrameRate: 50, ReferenceFrameRate: 50, Profile: null, Type: Video, AspectRatio: null, Index: -1, Score: null, IsExternal: False, DeliveryMethod: null, DeliveryUrl: null, IsExternalUrl: null, IsTextSubtitleStream: False, IsPgsSubtitleStream: False, IsExtractableSubtitleStream: False, SupportsExternalStream: False, Path: null, PixelFormat: null, Level: -99, IsAnamorphic: False } }
[2024-12-28 10:23:29.754 +01:00] [INF] User policy for "s.gehr". EnablePlaybackRemuxing: True EnableVideoPlaybackTranscoding: True EnableAudioPlaybackTranscoding: True
[2024-12-28 10:23:34.200 +01:00] [INF] "Webhook Item Added Notifier" Completed after 0 minute(s) and 0 seconds
[2024-12-28 10:24:04.803 +01:00] [WRN] WS "2a02:8071:7102:a1dc:ba3f:ddbb:6cc8:a4c2" error receiving data: "The remote party closed the WebSocket connection without completing the close handshake."
[2024-12-28 10:24:04.810 +01:00] [INF] WS "2a02:8071:7102:a1dc:ba3f:ddbb:6cc8:a4c2" closed
[2024-12-28 10:25:05.202 +01:00] [INF] "Webhook Item Added Notifier" Completed after 0 minute(s) and 0 seconds