Truenas Scale Hardware Transcoding - stormblessed - 2025-02-10
I have Jellyfin running on Truenas Scale 24.10.2 with a Intel Arc a310, hardware transcoding is enabled and so far everything works perfectly.
My question is if I can enable the Low-Power H.264 hardware encoder and Low-Power HEVC hardware encoder?
I have tried to find out if the firmware is configured correctly on Truenas but haven't been able to find the information.
Any help would be great!
RE: Truenas Scale Hardware Transcoding - TheDreadPirate - 2025-02-10
You should enable both. It is required for Intel Arc when encoding to those codecs.
On the TrueNAS command line run this command and share the output.
Code: sudo dmesg | grep i915
Depending on the uptime of your server, it may have aged off the messages we are looking for. But you can also go to /var/log and run a grep command to search the archived dmesg log files.
Code: grep i915 /var/log/dmesg.1
zgrep i915 /var/log/dmesg.*.gz
RE: Truenas Scale Hardware Transcoding - stormblessed - 2025-02-11
This is the output:
Code: [ 9.657297] i915 0000:03:00.0: [drm] VT-d active for gfx access
[ 9.657400] i915 0000:03:00.0: vgaarb: deactivate vga console
[ 9.657426] i915 0000:03:00.0: [drm] Local memory IO size: 0x00000000fd000000
[ 9.657428] i915 0000:03:00.0: [drm] Local memory available: 0x00000000fd000000
[ 9.673887] i915 0000:03:00.0: vgaarb: VGA decodes changed: olddecodes=io+mem,decodes=io+mem:owns=none
[ 9.681089] i915 0000:03:00.0: [drm] Finished loading DMC firmware i915/dg2_dmc_ver2_08.bin (v2.8)
[ 9.686444] i915 0000:03:00.0: [drm] GT0: GuC firmware i915/dg2_guc_70.bin version 70.20.0
[ 9.686448] i915 0000:03:00.0: [drm] GT0: HuC firmware i915/dg2_huc_gsc.bin version 7.10.15
[ 9.695472] i915 0000:03:00.0: [drm] GT0: GUC: submission enabled
[ 9.695475] i915 0000:03:00.0: [drm] GT0: GUC: SLPC enabled
[ 9.695736] i915 0000:03:00.0: [drm] GT0: GUC: RC enabled
[ 9.735937] [drm] Initialized i915 1.6.0 20201103 for 0000:03:00.0 on minor 0
[ 9.737003] snd_hda_intel 0000:04:00.0: bound 0000:03:00.0 (ops i915_audio_component_bind_ops [i915])
[ 9.737423] i915 0000:03:00.0: [drm] Cannot find any crtc or sizes
[ 9.769103] i915 0000:03:00.0: [drm] Cannot find any crtc or sizes
[ 9.794456] mei_gsc i915.mei-gscfi.768: FW not ready: resetting: dev_state = 2 pxp = 0
[ 9.794515] mei_gsc i915.mei-gscfi.768: unexpected reset: dev_state = ENABLED fw status = 00000345 84670008 00000000 00000000 E0020002 00000000
[ 9.795252] mei_gsc i915.mei-gsc.768: FW not ready: resetting: dev_state = 2 pxp = 2
[ 9.795312] mei_gsc i915.mei-gsc.768: unexpected reset: dev_state = ENABLED fw status = 00000345 84670008 00000000 00000000 E0020002 00000000
[ 10.201830] i915 0000:03:00.0: [drm] GT0: HuC: authenticated for all workloads
[ 10.201840] mei_pxp i915.mei-gsc.768-fbf6fcf1-96cf-4e2e-a6a6-1bab8cbe36b1: bound 0000:03:00.0 (ops i915_pxp_tee_component_ops [i915])
What should I do then?
RE: Truenas Scale Hardware Transcoding - TheDreadPirate - 2025-02-11
That looks ok. You should be able to check both low power encoding boxes.
RE: Truenas Scale Hardware Transcoding - serendipitist - 2025-11-16
I'm running TrueNAS Scale 25.10 and just installed an ARC A310 as the latest version of Scale dropped support for my aging NVIDIA Quadro P620. I've got Jellyfin installed as a TrueNAS App and have selected to pass through the GPU to the App, however, I can't get hardware transcoding to work. I'm checking when streaming from a remote client over mobile where I've capped the remote bitrate to something quite low, but the A310 doesn't seem to come into play. Some deets:
Code: sudo dmsg - i | grep i915
Code: [ 9.641667] i915 0000:0a:00.0: enabling device (0000 -> 0002)
[ 9.641695] i915 0000:0a:00.0: [drm] Found DG2/G11 (device ID 56a6) display version 13.00 stepping C0
[ 9.642589] i915 0000:0a:00.0: [drm] VT-d active for gfx access
[ 9.642637] i915 0000:0a:00.0: [drm] Can't resize LMEM BAR - platform support is missing
[ 9.642650] i915 0000:0a:00.0: [drm] Using a reduced BAR size of 256MiB. Consider enabling 'Resizable BAR' or similar, if available in the BIOS.
[ 9.657741] i915 0000:0a:00.0: vgaarb: VGA decodes changed: olddecodes=io+mem,decodes=none:owns=none
[ 9.662369] i915 0000:0a:00.0: [drm] Finished loading DMC firmware i915/dg2_dmc_ver2_08.bin (v2.8)
[ 9.672217] i915 0000:0a:00.0: [drm] GT0: GuC firmware i915/dg2_guc_70.bin version 70.36.0
[ 9.672223] i915 0000:0a:00.0: [drm] GT0: HuC firmware i915/dg2_huc_gsc.bin version 7.10.16
[ 9.681806] i915 0000:0a:00.0: [drm] GT0: GUC: submission enabled
[ 9.681810] i915 0000:0a:00.0: [drm] GT0: GUC: SLPC enabled
[ 9.682067] i915 0000:0a:00.0: [drm] GT0: GUC: RC enabled
[ 9.745664] [drm] Initialized i915 1.6.0 for 0000:0a:00.0 on minor 1
[ 9.825129] i915 0000:0a:00.0: [drm] Cannot find any crtc or sizes
[ 9.825139] snd_hda_intel 0000:0b:00.0: bound 0000:0a:00.0 (ops i915_audio_component_bind_ops [i915])
[ 9.865131] i915 0000:0a:00.0: [drm] Cannot find any crtc or sizes
[ 10.591044] i915 0000:0a:00.0: [drm] GT0: HuC: authenticated for all workloads
[ 10.591051] mei_pxp i915.mei-gsc.2560-fbf6fcf1-96cf-4e2e-a6a6-1bab8cbe36b1: bound 0000:0a:00.0 (ops i915_pxp_tee_component_ops [i915])
On startup the logs show:
Code: MediaBrowser.MediaEncoding.Encoder.MediaEncoder: Available hwaccel types: ["cuda", "vaapi", "qsv", "drm", "opencl", "vulkan"]
And the Transcoding setup has QSV selected and I've manually entered as the device, and all three options are selected under "Hardware encoding options"
I checked and the container was not running with group permissions that had write access to so I changed the group for the App to "render"
Here's what log output looks like when I start streaming from a mobile device connected over LTE:
Code: 2025-11-16 00:22:11.397689+00:00[14:22:11] [INF] [52] Jellyfin.Api.Helpers.MediaInfoHelper: User policy for darren. EnablePlaybackRemuxing: True EnableVideoPlaybackTranscoding: True EnableAudioPlaybackTranscoding: True
2025-11-16 00:22:11.398166+00:00[14:22:11] [INF] [52] Jellyfin.Api.Helpers.MediaInfoHelper: RemoteClientBitrateLimit: 4000000, RemoteIP: 10.0.1.101, IsInLocalNetwork: True
2025-11-16 00:22:12.336517+00:00[14:22:12] [INF] [47] Jellyfin.Api.Controllers.DynamicHlsController: Current HLS implementation doesn't support non-keyframe breaks but one is requested, ignoring that request
2025-11-16 00:22:12.361523+00:00[14:22:12] [INF] [47] MediaBrowser.MediaEncoding.Transcoding.TranscodeManager: /usr/lib/jellyfin-ffmpeg/ffmpeg -analyzeduration 200M -probesize 1G -fflags +genpts -f matroska -i file:"<REDACTED>" -map_metadata -1 -map_chapters -1 -threads 0 -map 0:0 -map 0:1 -map -0:s -codec:v:0 copy -tag:v:0 dvh1 -strict -2 -bsf:v hevc_mp4toannexb -start_at_zero -codec:a:0 copy -copyts -avoid_negative_ts disabled -max_muxing_queue_size 2048 -f hls -max_delay 5000000 -hls_time 6 -hls_segment_type fmp4 -hls_fmp4_init_filename "1ecdade647ff0fbd2a36e2a23971e66a-1.mp4" -start_number 0 -hls_segment_filename "/cache/transcodes/1ecdade647ff0fbd2a36e2a23971e66a%d.mp4" -hls_playlist_type vod -hls_list_size 0 -hls_segment_options movflags=+frag_discont -y "/cache/transcodes/1ecdade647ff0fbd2a36e2a23971e66a.m3u8"
2025-11-16 00:22:13.865123+00:00[14:22:13] [INF] [46] MediaBrowser.Controller.MediaEncoding.TranscodingJob: Stopping ffmpeg process with q command for /cache/transcodes/1ecdade647ff0fbd2a36e2a23971e66a.m3u8
2025-11-16 00:22:14.023952+00:00[14:22:14] [INF] [46] MediaBrowser.MediaEncoding.Transcoding.TranscodeManager: FFmpeg exited with code 0
2025-11-16 00:22:14.029840+00:00[14:22:14] [INF] [46] Jellyfin.Api.Controllers.DynamicHlsController: Current HLS implementation doesn't support non-keyframe breaks but one is requested, ignoring that request
2025-11-16 00:22:14.030878+00:00[14:22:14] [INF] [46] MediaBrowser.MediaEncoding.Transcoding.TranscodeManager: /usr/lib/jellyfin-ffmpeg/ffmpeg -analyzeduration 200M -probesize 1G -ss 00:30:14.300 -noaccurate_seek -fflags +genpts -f matroska -i file:" <REDACTED> " -map_metadata -1 -map_chapters -1 -threads 0 -map 0:0 -map 0:1 -map -0:s -codec:v:0 copy -tag:v:0 dvh1 -strict -2 -bsf:v hevc_mp4toannexb -start_at_zero -codec:a:0 copy -copyts -avoid_negative_ts disabled -max_muxing_queue_size 2048 -f hls -max_delay 5000000 -hls_time 6 -hls_segment_type fmp4 -hls_fmp4_init_filename "1ecdade647ff0fbd2a36e2a23971e66a-1.mp4" -start_number 302 -hls_segment_filename "/cache/transcodes/1ecdade647ff0fbd2a36e2a23971e66a%d.mp4" -hls_playlist_type vod -hls_list_size 0 -hls_segment_options movflags=+frag_discont -y "/cache/transcodes/1ecdade647ff0fbd2a36e2a23971e66a.m3u8"
2025-11-16 00:22:27.870983+00:00[14:22:27] [INF] [52] MediaBrowser.MediaEncoding.Transcoding.TranscodeManager: FFmpeg exited with code 0
I'll note I'm running on some fairly old hardware, circa-2018 Xeon E5-2640 machine, so I don't know if that's part of the problem or not.
What might I be missing here?
RE: Truenas Scale Hardware Transcoding - nyanmisaka - 2025-11-16
Check the ffmpeg logs.
RE: Truenas Scale Hardware Transcoding - serendipitist - 2025-11-16
(2025-11-16, 08:37 AM)nyanmisaka Wrote: Check the ffmpeg logs.
No need - I missed point 7 in the Intel GPU section which states that the VA-API should be used for pre-Broadwell platforms where QSV is not available. I can see ffmpeg utilizing the card now!
|