2024-08-27, 12:20 AM
(This post was last modified: 2024-08-27, 05:09 PM by iif2fo. Edited 5 times in total.
Edit Reason: Added full lshw output
)
Hello, I'm trying to get hardware acceleration to work with my media server. But, I'm getting "Playback failed due to a fatal player error." when I try playing any videos. (Playback works if I disable hardware acceleration.)
Here's my server hardware.
(I have this Supermicro motherboard https://www.supermicro.com/en/products/m.../X11SCL-IF)
I'm on plain Debian, no Docker.
I followed the steps here: https://jellyfin.org/docs/general/admini...nux-setups
To install intel-opencl-icd, I went here https://github.com/intel/compute-runtime/releases and followed the instructions to download the debs with wget and install the debs manually.
At least one renderD device exists.
Then I tried doing step 7: "Check the supported QSV / VA-API codecs"
I see iHD, so I'm guessing "iHD driver indicates support for the QSV and VA-API interfaces." applies to me? Not sure...
But, then I feel like this is where things really go off the rails. It says "Failed to get number of OpenCL platforms".
And then when I try clinfo, I get this.
I also found this thread to try to fix the opencl no platforms error: https://forum.jellyfin.org/t-solved-arch...ranscoding
I added this:
via sudo systemctl edit jellyfin.service, but it didn't seem to do anything.
Nevertheless, I decided to try enabling hardware acceleration in Jellyfin.
I went to dashboard/playback/transcoding and enabled:
Hardware acceleration: Video Acceleration API (VAAPI)
VA-API Device: /dev/dri/renderD128
Enable hardware decoding for: H264, VC1, HEVC 10bit, VP910bit
Hardware encoding options: Enable hardware encoding
Encoding format options: Allow encoding in HEVC format, Allow encoding in AV1 format, Enable VPP Tone mapping, Enable Tone mapping
And then when I try to play anything, I get "Playback failed due to a fatal player error.".
I also attached some logs. The logs start from when I press play and go until I get the fatal player error message.
Maybe the most interesting part of the logs is this.
Here's my server hardware.
Code:
$ sudo lshw -c display
*-display
description: VGA compatible controller
product: DG2 [Arc A380]
vendor: Intel Corporation
physical id: 0
bus info: pci@0000:03:00.0
version: 05
width: 64 bits
clock: 33MHz
capabilities: pciexpress msi pm vga_controller bus_master cap_list rom
configuration: driver=i915 latency=0
resources: irq:148 memory:91000000-91ffffff memory:80000000-8fffffff memory:92000000-921fffff
*-display
description: VGA compatible controller
product: ASPEED Graphics Family
vendor: ASPEED Technology, Inc.
physical id: 0
bus info: pci@0000:09:00.0
logical name: /dev/fb0
version: 41
width: 32 bits
clock: 33MHz
capabilities: pm msi vga_controller cap_list rom fb
configuration: depth=32 driver=ast latency=0 resolution=1024,768
resources: irq:17 memory:93000000-93ffffff memory:94000000-9401ffff ioport:3000(size=128) memory:c0000-dffff
$ sudo lshw -C processor
*-cpu
description: CPU
product: Intel(R) Core(TM) i3-9300 CPU @ 3.70GHz
vendor: Intel Corp.
physical id: 29
bus info: cpu@0
version: 6.158.11
serial: To Be Filled By O.E.M.
slot: CPU
size: 4276MHz
capacity: 4300MHz
width: 64 bits
clock: 100MHz
capabilities: lm fpu fpu_exception wp vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe
syscall nx pdpe1gb rdtscp x86-64 constant_tsc art arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc cpuid aperfmperf pni pclmulqdq dtes64 monitor ds_cp
l vmx est tm2 ssse3 sdbg fma cx16 xtpr pdcm pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand lahf_lm abm 3dnowprefetch cpuid_
fault epb pti ssbd ibrs ibpb stibp tpr_shadow flexpriority ept vpid ept_ad fsgsbase tsc_adjust bmi1 avx2 smep bmi2 erms invpcid mpx rdseed adx smap clflushopt i
ntel_pt xsaveopt xsavec xgetbv1 xsaves dtherm ida arat pln pts hwp hwp_notify hwp_act_window hwp_epp vnmi md_clear flush_l1d arch_capabilities cpufreq
configuration: cores=4 enabledcores=4 microcode=244 threads=4
(I have this Supermicro motherboard https://www.supermicro.com/en/products/m.../X11SCL-IF)
I'm on plain Debian, no Docker.
Code:
$ uname -a
Linux debian 6.9.7+bpo-amd64 #1 SMP PREEMPT_DYNAMIC Debian 6.9.7-1~bpo12+1 (2024-07-03) x86_64 GNU/Linux
$ lsb_release -a
No LSB modules are available.
Distributor ID: Debian
Description: Debian GNU/Linux 12 (bookworm)
Release: 12
Codename: bookworm
I followed the steps here: https://jellyfin.org/docs/general/admini...nux-setups
Code:
# Installed jellyfin-ffmpeg6
$ apt policy jellyfin-ffmpeg6
jellyfin-ffmpeg6:
Installed: 6.0.1-8-bookworm
Candidate: 6.0.1-8-bookworm
Version table:
*** 6.0.1-8-bookworm 500
500 https://nyc1.mirror.jellyfin.org/debian bookworm/main amd64 Packages
100 /var/lib/dpkg/status
# Installed intel-opencl-icd
$ apt policy intel-opencl-icd
intel-opencl-icd:
Installed: 24.26.30049.6
Candidate: 24.26.30049.6
Version table:
*** 24.26.30049.6 100
100 /var/lib/dpkg/status
22.43.24595.41-1 500
500 http://deb.debian.org/debian bookworm/main amd64 Packages
To install intel-opencl-icd, I went here https://github.com/intel/compute-runtime/releases and followed the instructions to download the debs with wget and install the debs manually.
At least one renderD device exists.
Code:
$ ls -l /dev/dri
total 0
drwxr-xr-x 2 root root 100 Aug 26 16:22 by-path
crw-rw---- 1 root video 226, 0 Aug 26 16:22 card0
crw-rw---- 1 root video 226, 1 Aug 26 16:22 card1
crw-rw---- 1 root render 226, 128 Aug 26 16:22 renderD128
Then I tried doing step 7: "Check the supported QSV / VA-API codecs"
Code:
$ sudo /usr/lib/jellyfin-ffmpeg/vainfo --display drm --device /dev/dri/renderD128
Trying display: drm
libva info: VA-API version 1.22.0
libva info: Trying to open /usr/lib/jellyfin-ffmpeg/lib/dri/iHD_drv_video.so
libva info: Found init function __vaDriverInit_1_22
libva info: va_openDriver() returns 0
vainfo: VA-API version: 1.22 (libva 2.22.0)
vainfo: Driver version: Intel iHD driver for Intel(R) Gen Graphics - 24.2.5 (12561f6)
vainfo: Supported profile and entrypoints
VAProfileNone : VAEntrypointVideoProc
VAProfileNone : VAEntrypointStats
I see iHD, so I'm guessing "iHD driver indicates support for the QSV and VA-API interfaces." applies to me? Not sure...
But, then I feel like this is where things really go off the rails. It says "Failed to get number of OpenCL platforms".
Code:
$ sudo /usr/lib/jellyfin-ffmpeg/ffmpeg -v verbose -init_hw_device vaapi=va:/dev/dri/renderD128 -init_hw_device opencl@va
ffmpeg version 6.0.1-Jellyfin Copyright (c) 2000-2023 the FFmpeg developers
built with gcc 12 (Debian 12.2.0-14)
configuration: --prefix=/usr/lib/jellyfin-ffmpeg --target-os=linux --extra-version=Jellyfin --disable-doc --disable-ffplay --disable-ptx-compression --disable
-static --disable-libxcb --disable-sdl2 --disable-xlib --enable-lto --enable-gpl --enable-version3 --enable-shared --enable-gmp --enable-gnutls --enable-chromap
rint --enable-opencl --enable-libdrm --enable-libxml2 --enable-libass --enable-libfreetype --enable-libfribidi --enable-libfontconfig --enable-libbluray --enabl
e-libmp3lame --enable-libopus --enable-libtheora --enable-libvorbis --enable-libopenmpt --enable-libdav1d --enable-libsvtav1 --enable-libwebp --enable-libvpx --
enable-libx264 --enable-libx265 --enable-libzvbi --enable-libzimg --enable-libfdk-aac --arch=amd64 --enable-libshaderc --enable-libplacebo --enable-vulkan --ena
ble-vaapi --enable-amf --enable-libvpl --enable-ffnvcodec --enable-cuda --enable-cuda-llvm --enable-cuvid --enable-nvdec --enable-nvenc
libavutil 58. 2.100 / 58. 2.100
libavcodec 60. 3.100 / 60. 3.100
libavformat 60. 3.100 / 60. 3.100
libavdevice 60. 1.100 / 60. 1.100
libavfilter 9. 3.100 / 9. 3.100
libswscale 7. 1.100 / 7. 1.100
libswresample 4. 10.100 / 4. 10.100
libpostproc 57. 1.100 / 57. 1.100
[AVHWDeviceContext @ 0x555ef97db480] libva: VA-API version 1.22.0
[AVHWDeviceContext @ 0x555ef97db480] libva: Trying to open /usr/lib/jellyfin-ffmpeg/lib/dri/iHD_drv_video.so
[AVHWDeviceContext @ 0x555ef97db480] libva: Found init function __vaDriverInit_1_22
[AVHWDeviceContext @ 0x555ef97db480] libva: va_openDriver() returns 0
[AVHWDeviceContext @ 0x555ef97db480] Initialised VAAPI connection: version 1.22
[AVHWDeviceContext @ 0x555ef97db480] VAAPI driver: Intel iHD driver for Intel(R) Gen Graphics - 24.2.5 (12561f6).
[AVHWDeviceContext @ 0x555ef97db480] Driver not found in known nonstandard list, using standard behaviour.
[AVHWDeviceContext @ 0x555ef980a080] Failed to get number of OpenCL platforms: -1001.
Device creation failed: -19.
Failed to set value 'opencl@va' for option 'init_hw_device': No such device
Error parsing global options: No such device
And then when I try clinfo, I get this.
Code:
$ sudo clinfo
Number of platforms 0
ICD loader properties
ICD loader Name OpenCL ICD Loader
ICD loader Vendor OCL Icd free software
ICD loader Version 2.3.1
ICD loader Profile OpenCL 3.0
I also found this thread to try to fix the opencl no platforms error: https://forum.jellyfin.org/t-solved-arch...ranscoding
I added this:
Code:
(Service)
Environment="NEOReadDebugKeys=1"
Environment="OverrideGpuAddressSpace=48"
Nevertheless, I decided to try enabling hardware acceleration in Jellyfin.
I went to dashboard/playback/transcoding and enabled:
Hardware acceleration: Video Acceleration API (VAAPI)
VA-API Device: /dev/dri/renderD128
Enable hardware decoding for: H264, VC1, HEVC 10bit, VP910bit
Hardware encoding options: Enable hardware encoding
Encoding format options: Allow encoding in HEVC format, Allow encoding in AV1 format, Enable VPP Tone mapping, Enable Tone mapping
And then when I try to play anything, I get "Playback failed due to a fatal player error.".
I also attached some logs. The logs start from when I press play and go until I get the fatal player error message.
Maybe the most interesting part of the logs is this.
Code:
Aug 26 17:08:14 jellyfin[970]: [17:08:14] [INF] /usr/lib/jellyfin-ffmpeg/ffmpeg -analyzeduration 200M -probesize 1G -noautorotate -i file:"/data/jellyfin/global/shows/silicon-valley_2014/season-01/silicon-valley_s01e01.mkv" -map_metadata -1 -map_chapters -1 -threads 0 -map 0:0 -map 0:1 -map -0:s -codec:v:0 av1_vaapi -rc_mode VBR -b:v 5446614 -maxrate 5446614 -bufsize 10893228 -force_key_frames:0 "expr:gte(t,n_forced*3)" -vf "setparams=color_primaries=bt709:color_trc=bt709:colorspace=bt709,scale=trunc(min(max(iw\,ih*a)\,min(1920\,1080*a))/2)*2:trunc(min(max(iw/a\,ih)\,min(1920/a\,1080))/2)*2,format=nv12,hwupload_vaapi" -codec:a:0 libfdk_aac -ac 2 -vbr:a 5 -af "volume=2" -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 "9ace91e7131ce94ddcfcffc9ec0969c2-1.mp4" -start_number 0 -hls_segment_filename "/var/cache/jellyfin/transcodes/9ace91e7131ce94ddcfcffc9ec0969c2%d.mp4" -hls_playlist_type vod -hls_list_size 0 -y "/var/cache/jellyfin/transcodes/9ace91e7131ce94ddcfcffc9ec0969c2.m3u8"
Aug 26 17:08:14 jellyfin[970]: [17:08:14] [ERR] FFmpeg exited with code 1
Aug 26 17:08:14 jellyfin[970]: [17:08:14] [ERR] Error processing request. URL GET /videos/216f7c3b-e3e1-8902-4e55-9896e7b234e8/hls1/main/-1.mp4.
Aug 26 17:08:14 jellyfin[970]: MediaBrowser.Common.FfmpegException: FFmpeg exited with code 1