Jellyfin accélaration matérielle

alchimiste

Nouveau membre
13 Avril 2022
10
2
3
Bonjour,
Matériel : miniPC avec un proc N5105
Logiciel : OMV6 + Jellyfin sous docker

J'ai suivi la super doc d'installation de Jellyfin sous Docker (merci au passage). Ca fonctionne bien sauf l'accélération matérielle.
Voici la commande exécutée par Jellyfin :
/usr/lib/jellyfin-ffmpeg/ffmpeg -analyzeduration 200M -init_hw_device vaapi=va:,driver=iHD -filter_hw_device va -autorotate 0 -i file:"/data/movies/Adaline (2015).avi" -map_metadata -1 -map_chapters -1 -threads 0 -map 0:0 -map 0:1 -map -0:s -codec:v:0 h264_vaapi -rc_mode VBR -b:v 4543475 -maxrate 4543475 -bufsize 9086950 -profile:v:0 high -force_key_frames:0 "expr:gte(t,0+n_forced*3)" -vf "setparams=color_primaries=bt709:color_trc=bt709:colorspace=bt709,scale=trunc(min(max(iw\,ih*a)\,min(720\,408*a))/2)*2:trunc(min(max(iw/a\,ih)\,min(720/a\,408))/2)*2,format=nv12,hwupload=derive_device=vaapi" -codec:a:0 libmp3lame -ac 2 -ab 128000 -ar 48000 -copyts -avoid_negative_ts disabled -max_muxing_queue_size 2048 -f hls -max_delay 5000000 -hls_time 3 -hls_segment_type mpegts -start_number 0 -hls_segment_filename "/config/transcodes/0321cbba425589ac8fbf4a468f5ece45%d.ts" -hls_playlist_type vod -hls_list_size 0 -y "/config/transcodes/0321cbba425589ac8fbf4a468f5ece45.m3u8"

Voici le message obtenu :
Stream mapping:
Stream #0:0 -> #0:0 (mpeg4 (native) -> h264 (h264_vaapi))
Stream #0:1 -> #0:1 (mp3 (mp3float) -> mp3 (libmp3lame))
Press [q] to stop, [?] for help
[mpeg4 @ 0x561d15fea0c0] Video uses a non-standard and wasteful way to store B-frames ('packed B-frames'). Consider using the mpeg4_unpack_bframes bitstream filter without encoding but stream copy to fix it.
[h264_vaapi @ 0x561d15fe22c0] Driver does not support VBR RC mode (supported modes: CQP).
Error initializing output stream 0:0 -- Error while opening encoder for output stream #0:0 - maybe incorrect parameters such as bit_rate, rate, width or height
[libmp3lame @ 0x561d15fe5440] 4 frames left in the queue on closing
Conversion failed!
Visiblement, c'est le driver qui pose problème. Si je lance à la main la commande en modifiant -rc_mode VBR par -rc_mode CQP, ça ne plante plus. Mais bon, c'est pas la solution vu que c'est Jellyfin qui lance la commande ^^

Avez-vous une idée de ce que je pourrai vérifier ? Peut-être changer le driver mais j'ai l'impression d'avoir une version récente :

/usr/lib/jellyfin-ffmpeg/lib/dri$ /usr/lib/jellyfin-ffmpeg/vainfo
Trying display: drm
libva info: VA-API version 1.16.0
libva info: Trying to open /usr/lib/jellyfin-ffmpeg/lib/dri/iHD_drv_video.so
libva info: Found init function __vaDriverInit_1_16
libva info: va_openDriver() returns 0
vainfo: VA-API version: 1.16 (libva 2.16.0)
vainfo: Driver version: Intel iHD driver for Intel(R) Gen Graphics - 22.6.4 (aca8ee0)
 
Salut,
Vu qu'on parle de Jellyfin, je pense que le plus simple serait de l'ancer un transcodage dans Jellyfin, une lecture ou tu reduit le debit par exemple, et voir si cela fonctionne ou non. Ensuite, va dans les journaux de Jellyfin, et partage nous les logs.

Tu utilise le conteneur linuxserver ou officiel ?
 
j'utilises le conteneur officiel. J'avais d'abord installé une version avec le conteneur linuxserver mais comme ça ne fonctionnait pas, je suis reparti de zéro.
Ce que j'ai mis dans mon précédent message est le résultat d'une lecture via jellyfin justement. C'est ce que j'ai récupéré dans la log de ce type : FFmpeg.Transcode-2023-02*

je mets la log complète :
Code:
/usr/lib/jellyfin-ffmpeg/ffmpeg -analyzeduration 200M -init_hw_device vaapi=va:,driver=iHD -filter_hw_device va -autorotate 0 -i file:"/data/movies/Adaline (2015).avi" -map_metadata -1 -map_chapters -1 -threads
0 -map 0:0 -map 0:1 -map -0:s -codec:v:0 h264_vaapi -rc_mode VBR -b:v 4543475 -maxrate 4543475 -bufsize 9086950 -profile:v:0 high -force_key_frames:0 "expr:gte(t,0+n_forced*3)" -vf "setparams=color_primaries=bt7
09:color_trc=bt709:colorspace=bt709,scale=trunc(min(max(iw\,ih*a)\,min(720\,408*a))/2)*2:trunc(min(max(iw/a\,ih)\,min(720/a\,408))/2)*2,format=nv12,hwupload=derive_device=vaapi" -codec:a:0 libmp3lame -ac 2 -ab 1
28000 -ar 48000 -copyts -avoid_negative_ts disabled -max_muxing_queue_size 2048 -f hls -max_delay 5000000 -hls_time 3 -hls_segment_type mpegts -start_number 0 -hls_segment_filename "/config/transcodes/0321cbba42
5589ac8fbf4a468f5ece45%d.ts" -hls_playlist_type vod -hls_list_size 0 -y "/config/transcodes/0321cbba425589ac8fbf4a468f5ece45.m3u8"


ffmpeg version 5.1.2-Jellyfin Copyright (c) 2000-2022 the FFmpeg developers
  built with gcc 10 (Debian 10.2.1-6)
  configuration: --prefix=/usr/lib/jellyfin-ffmpeg --target-os=linux --extra-libs=-lfftw3f --extra-version=Jellyfin --disable-doc --disable-ffplay --disable-ptx-compression --disable-shared --disable-libxcb --di
sable-sdl2 --disable-xlib --enable-lto --enable-gpl --enable-version3 --enable-static --enable-gmp --enable-gnutls --enable-chromaprint --enable-libdrm --enable-libass --enable-libfreetype --enable-libfribidi --
enable-libfontconfig --enable-libbluray --enable-libmp3lame --enable-libopus --enable-libtheora --enable-libvorbis --enable-libdav1d --enable-libwebp --enable-libvpx --enable-libx264 --enable-libx265 --enable-li
bzvbi --enable-libzimg --enable-libfdk-aac --arch=amd64 --enable-libsvtav1 --enable-libshaderc --enable-libplacebo --enable-vulkan --enable-opencl --enable-vaapi --enable-amf --enable-libmfx --enable-ffnvcodec -
-enable-cuda --enable-cuda-llvm --enable-cuvid --enable-nvdec --enable-nvenc
  libavutil      57. 28.100 / 57. 28.100
  libavcodec     59. 37.100 / 59. 37.100
  libavformat    59. 27.100 / 59. 27.100
  libavdevice    59.  7.100 / 59.  7.100
  libavfilter     8. 44.100 /  8. 44.100
  libswscale      6.  7.100 /  6.  7.100
  libswresample   4.  7.100 /  4.  7.100
  libpostproc    56.  6.100 / 56.  6.100
Input #0, avi, from 'file:/data/movies/Adaline (2015).avi':
  Duration: 01:52:43.71, start: 0.000000, bitrate: 867 kb/s
  Stream #0:0: Video: mpeg4 (Advanced Simple Profile) (XVID / 0x44495658), yuv420p, 720x408 [SAR 1:1 DAR 30:17], 726 kb/s, 23.98 fps, 23.98 tbr, 23.98 tbn
  Stream #0:1: Audio: mp3 (U[0][0][0] / 0x0055), 48000 Hz, stereo, fltp, 128 kb/s
    Metadata:
      title           : M
Stream mapping:
  Stream #0:0 -> #0:0 (mpeg4 (native) -> h264 (h264_vaapi))
  Stream #0:1 -> #0:1 (mp3 (mp3float) -> mp3 (libmp3lame))
Press [q] to stop, [?] for help
[mpeg4 @ 0x565004d0e0c0] Video uses a non-standard and wasteful way to store B-frames ('packed B-frames'). Consider using the mpeg4_unpack_bframes bitstream filter without encoding but stream copy to fix it.
[h264_vaapi @ 0x565004d062c0] Driver does not support VBR RC mode (supported modes: CQP).
Error initializing output stream 0:0 -- Error while opening encoder for output stream #0:0 - maybe incorrect parameters such as bit_rate, rate, width or height
[libmp3lame @ 0x565004d09440] 4 frames left in the queue on closing
Conversion failed!
 
Dernière édition par un modérateur:
J'ai essayé 2 méthodes. La log déjà fournie correspond à VAAPI.
Avec Quick sync, le message est un peu différent, mais ça parle quand même de ratecontrol à la fin.

Film en MP4
/usr/lib/jellyfin-ffmpeg/ffmpeg -analyzeduration 200M -init_hw_device vaapi=va:,driver=iHD,kernel_driver=i915 -init_hw_device qsv=qs@va -filter_hw_device qs -autorotate 0 -i file:"/data/movies/Adaline (2
015).avi" -map_metadata -1 -map_chapters -1 -threads 0 -map 0:0 -map 0:1 -map -0:s -codec:v:0 h264_qsv -preset 7 -look_ahead 0 -b:v 4543475 -maxrate 4543475 -bufsize 9086950 -profile:v:0 high -level 51 -
g:v:0 72 -keyint_min:v:0 72 -vf "setparams=color_primaries=bt709:color_trc=bt709:colorspace=bt709,scale=trunc(min(max(iw\,ih*a)\,min(720\,408*a))/2)*2:trunc(min(max(iw/a\,ih)\,min(720/a\,408))/2)*2,forma
t=yuv420p" -codec:a:0 libmp3lame -ac 2 -ab 128000 -ar 48000 -copyts -avoid_negative_ts disabled -max_muxing_queue_size 2048 -f hls -max_delay 5000000 -hls_time 3 -hls_segment_type mpegts -start_number 0
-hls_segment_filename "/config/transcodes/eb6ed3935bd65558758fd04237f8c416%d.ts" -hls_playlist_type vod -hls_list_size 0 -y "/config/transcodes/eb6ed3935bd65558758fd04237f8c416.m3u8"


ffmpeg version 5.1.2-Jellyfin Copyright (c) 2000-2022 the FFmpeg developers
built with gcc 10 (Debian 10.2.1-6)
configuration: --prefix=/usr/lib/jellyfin-ffmpeg --target-os=linux --extra-libs=-lfftw3f --extra-version=Jellyfin --disable-doc --disable-ffplay --disable-ptx-compression --disable-shared --disable-lib
xcb --disable-sdl2 --disable-xlib --enable-lto --enable-gpl --enable-version3 --enable-static --enable-gmp --enable-gnutls --enable-chromaprint --enable-libdrm --enable-libass --enable-libfreetype --enab
le-libfribidi --enable-libfontconfig --enable-libbluray --enable-libmp3lame --enable-libopus --enable-libtheora --enable-libvorbis --enable-libdav1d --enable-libwebp --enable-libvpx --enable-libx264 --en
able-libx265 --enable-libzvbi --enable-libzimg --enable-libfdk-aac --arch=amd64 --enable-libsvtav1 --enable-libshaderc --enable-libplacebo --enable-vulkan --enable-opencl --enable-vaapi --enable-amf --en
able-libmfx --enable-ffnvcodec --enable-cuda --enable-cuda-llvm --enable-cuvid --enable-nvdec --enable-nvenc
libavutil 57. 28.100 / 57. 28.100
libavcodec 59. 37.100 / 59. 37.100
libavformat 59. 27.100 / 59. 27.100
libavdevice 59. 7.100 / 59. 7.100
libavfilter 8. 44.100 / 8. 44.100
libswscale 6. 7.100 / 6. 7.100
libswresample 4. 7.100 / 4. 7.100
libpostproc 56. 6.100 / 56. 6.100
Input #0, avi, from 'file:/data/movies/Adaline (2015).avi':
Duration: 01:52:43.71, start: 0.000000, bitrate: 867 kb/s
Stream #0:0: Video: mpeg4 (Advanced Simple Profile) (XVID / 0x44495658), yuv420p, 720x408 [SAR 1:1 DAR 30:17], 726 kb/s, 23.98 fps, 23.98 tbr, 23.98 tbn
Stream #0:1: Audio: mp3 (U[0][0][0] / 0x0055), 48000 Hz, stereo, fltp, 128 kb/s
Metadata:
title : M
Stream mapping:
Stream #0:0 -> #0:0 (mpeg4 (native) -> h264 (h264_qsv))
Stream #0:1 -> #0:1 (mp3 (mp3float) -> mp3 (libmp3lame))
Press [q] to stop, [?] for help
[mpeg4 @ 0x560dba65f540] Video uses a non-standard and wasteful way to store B-frames ('packed B-frames'). Consider using the mpeg4_unpack_bframes bitstream filter without encoding but stream copy to fix
it.
[h264_qsv @ 0x560dba657b80] Selected ratecontrol mode is unsupported
[h264_qsv @ 0x560dba657b80] some encoding parameters are not supported by the QSV runtime. Please double check the input parameters.
Error initializing output stream 0:0 -- Error while opening encoder for output stream #0:0 - maybe incorrect parameters such as bit_rate, rate, width or height
[libmp3lame @ 0x560dba65a900] 4 frames left in the queue on closing
Conversion failed!

2ème test avec un film en 1080p, H264
Stream mapping:
Stream #0:0 -> #0:0 (h264 (native) -> h264 (h264_qsv))
Stream #0:1 -> #0:1 (dts (dca) -> aac (libfdk_aac))
Press [q] to stop, [?] for help
[h264_qsv @ 0x558ffef56440] Selected ratecontrol mode is unsupported
[h264_qsv @ 0x558ffef56440] some encoding parameters are not supported by the QSV runtime. Please double check the input parameters.
Error initializing output stream 0:0 -- Error while opening encoder for output stream #0:0 - maybe incorrect parameters such as bit_rate, rate, width or height
[libfdk_aac @ 0x558ffef19680] 2 frames left in the queue on closing
Conversion failed!
 
Une piste intéressante, ton CPU etant Jasper Lake
1675457576806.png


1675457782009.png
1675457676845.png

Que te donne la commande : ( a faire sur l'hote )
Code:
uname -a
 
et :
Code:
cat /etc/modprobe.d/i915.conf
Code:
cat /sys/kernel/debug/dri/0/gt/uc/guc_info
Code:
cat /sys/kernel/debug/dri/0/gt/uc/huc_info

mais aussi :
Code:
dmesg | grep -i guc
 
Dernière édition:
pour le 1er, j'avais trouvé des idées sur internet, mais pas vu de différence
cat /etc/modprobe.d/i915.conf
options i915 enable_fbc=1 enable_guc=2

ensuite :
cat /sys/kernel/debug/dri/0/gt/uc/guc_info
GuC firmware: i915/ehl_guc_70.1.1.bin
status: MISSING
version: wanted 70.1, found 0.0
uCode: 0 bytes
RSA: 0 bytes

GuC status 0x00000001:
Bootrom status = 0x0
uKernel status = 0x0
MIA Core status = 0x0

Scratch registers:
0: 0x0
1: 0x0
2: 0x0
3: 0x0
4: 0x0
5: 0x0
6: 0x0
7: 0x0
8: 0x0
9: 0x0
10: 0x0
11: 0x0
12: 0x0
13: 0x0
14: 0x0
15: 0x0

GuC log relay not created

une belle erreur sur le suivant :(

cat /sys/kernel/debug/dri/0/gt/uc/huc_info
HuC firmware: i915/ehl_huc_9.0.0.bin
status: ERROR
version: wanted 9.0, found 0.0
uCode: 0 bytes
RSA: 0 bytes
HuC status: 0x00000000

dmesg | grep -i guc
[ 4.792893] Setting dangerous option enable_guc - tainting kernel
[ 4.803228] i915 0000:00:02.0: firmware: failed to load i915/ehl_guc_70.1.1.bin (-2)
[ 4.803375] i915 0000:00:02.0: firmware: failed to load i915/ehl_guc_70.1.1.bin (-2)
[ 4.803382] i915 0000:00:02.0: GuC firmware i915/ehl_guc_70.1.1.bin: fetch failed with error -2
[ 4.803386] i915 0000:00:02.0: [drm] GuC firmware(s) can be downloaded from https://git.kernel.org/pub/scm/linux/kernel/git/firmware/linux-firmware.git/tree/i915
[ 4.952109] i915 0000:00:02.0: [drm] GuC firmware i915/ehl_guc_70.1.1.bin version 0.0
[ 4.952152] i915 0000:00:02.0: [drm] GuC is uninitialized
 
GuC firmware(s) can be downloaded from [URL]https://git.kernel.org/pub/scm/linux/kernel/git/firmware/linux-firmware.git/tree/i915[/URL]

J'avais deja vu cela, pour moi il faut que tu le DL et le place dans /lib/firmware/i915 mais je ne comprend pas quel fichier tu dois prendre.
Les premiers lettre représente le nom du CPU, pour toi c'est Jasper Lake
Donc surement un truc genre jpl, jsl, ... mais rien de ce genre de présent sur le depot.

Sans garanti, tu pourrai essayer de prendre la version Elkhart Lake, l'architeture iGPU semble similaire ( identique ? ) :
Puis tu fait :
Code:
cd /lib/firmware/i915
puis
Code:
wget https://git.kernel.org/pub/scm/linux/kernel/git/firmware/linux-firmware.git/plain/i915/kbl_guc_70.1.1.bin
puis
Code:
update-initramfs -u -k all
puis
Code:
update-grub
puis tu reboot
Code:
reboot

Puis apres le reboot, refait cela pour vérifier le fonctionnement :

Code:
cat /sys/kernel/debug/dri/0/gt/uc/guc_info
Code:
cat /sys/kernel/debug/dri/0/gt/uc/huc_info

mais aussi :
Code:
dmesg | grep -i guc
 
  • J'aime
Réactions: Bambusa29
😎😊😊
Un grand merci. Ca fonctionne. Je vais pousser les tests, mais sur mes 2 films tests, ça transcode !
J'aurai dû venir poser ma question plus tôt ^^ Mais bon, ça m'a permis d'approfondir mes connaissances du monde docker et linux, donc c'est toujours utile.
Pour info, dans le doute, j'ai récupéré :
https://git.kernel.org/pub/scm/linux/kernel/git/firmware/linux-firmware.git/plain/ehl_guc_70.1.1.bin --> celui qui était dans le message d'erreur

cat /sys/kernel/debug/dri/0/gt/uc/huc_info
HuC firmware: i915/ehl_huc_9.0.0.bin
status: RUNNING
version: wanted 9.0, found 9.0
uCode: 498496 bytes
RSA: 256 bytes
HuC status: 0x0007c001
 
  • J'adore
Réactions: EVO
ce topic me fait flipper moi qui voulait justement installer OMV+ JELLYFIN sur ma 5040
 
Maintenant, ça marche très bien ;)
Et si tu rencontres le même pb que moi, tu sauras quelle vérif tu dois faire
 
  • J'aime
Réactions: EVO
J'ai le même GPU que le tien et ai eu le même soucis pour activer l'accélération matériel mais dans mon cas c'était une LXC sous Proxmox.

J'ai fini par trouver la solution, si cela peut aider quelqu'un aussi....

1) Faire un passthru dans le LXC du GPU au niveau de l'hote
On rajoute ces 3 lignes dans la config du conteneur LCX au niveau de l'hote : /etc/pve/lxc/xxx.conf

Code:
lxc.cgroup2.devices.allow: c 226:0 rwm
lxc.cgroup2.devices.allow: c 226:128 rwm
lxc.mount.entry: /dev/dri/renderD128 dev/dri/renderD128 none bind,optional,create=file

On vérifie le GID avec un : ls -al /dev/dri
Code:
crw-rw---- 1 root video  226,   0 Apr  9 11:13 card0
crwxrwxrwx 1 root render 226, 128 Apr  9 11:13 renderD128

2) Au niveau do conteneur LXC

On ajoute l'utilisateur 'jellyfin' au groupe render, video et input
sudo adduser jellyfin render...

et Surtout on change les droite sur /dev/dri !!!

Code:
sudo chmod 777 /dev/dri/*
 
  • J'adore
Réactions: Nincha