Jellyfin supporta l'accelerazione hardware (HWA) della codifica / decodifica video tramite FFMpeg. FFMpeg e Jellyfin possono supportare molteplici implementazioni di accelerazione hardware come Intel Quicksync (QSV), AMD AMF, nVidia NVENC / NVDEC, OpenMax OMX e MediaCodec tramite API di accelerazione video.
VAAPI è un'API di accelerazione video che utilizza libva per interagire con i controller locali per fornire HWA. QSV utilizza una versione modificata (biforcuta) di VAAPI e la interfaccia con libmfx e i suoi driver proprietari (elenco di processori compatibili con QSV).

Accelerazione HW del sistema operativo consigliata LinuxQSV, NVENC, VAAPI WindowsQSV, NVENC, AMF, VAAPIMacOSNone (VideoToolbox disponibile a breve) AndroidMediaCodec, OMXRPiOMX
Confronto di schede grafiche tramite HWA
NVIDIA utilizzando l'elenco ffmpeg ufficiale. Non tutte le carte sono state testate. Questi driver sono consigliati per Linux e Windows. Ecco l'elenco ufficiale delle schede grafiche NVIDIA per codec supportati. Esempio di Ubuntu che funziona con NVENC. H264 a 10 bit non supporta l'accelerazione NVIDIA.
Elenco di codec supportati da VAAPI.
Il supporto AMF Linux non è ancora ufficiale e le schede AMD GFX devono utilizzare VAAPI su Linux.
Zen è solo la CPU. Non c'è accelerazione hardware per nessuna forma di decodifica / codifica video. Avrai bisogno di una APU o di una dGPU per l'accelerazione hardware.
Benchmark Intel QSV su Linux.
Su Windows, puoi utilizzare le librerie DXVA2 / D3D11VA per la decodifica e la libreria libmfx per la codifica.
CentOS potrebbe richiedere driver aggiuntivi per QSV.
Ecco ulteriori informazioni per saperne di più.
Abilitazione dell'accelerazione hardware
Le opzioni di accelerazione hardware sono disponibili nella Dashboard di amministrazione nella sezione transcodifica . Selezionare un'opzione di accelerazione hardware valida dal menu a discesa, indicare un dispositivo se applicabile e selezionare Abilita crittografia hardware per abilitare la crittografia e decodificare se l'hardware lo supporta.
L'accelerazione hardware è immediatamente disponibile per la riproduzione multimediale. Non è necessario riavviare il server.
configurazione
Ogni tipo di accelerazione hardware, così come ogni tipo di installazione Jellyfin, richiede diverse opzioni di configurazione prima di poter essere utilizzato. È sempre meglio consultare la documentazione di FFMpeg sul tipo di accelerazione scelto per le informazioni più recenti.
Accelerazione in Docker
Per utilizzare l'accelerazione hardware nella Docker, i dispositivi devono essere spostati nel contenitore. Per vedere quali dispositivi video sono disponibili, puoi eseguire sudo lshw -c video o vainfo sul tuo computer.
nota
Le GPU NVIDIA non sono attualmente supportate su Docker-Compose.
È possibile utilizzare Docker Run per avviare il server con un comando simile al seguente.
docker run -d --volume / path / to / config: / config --volume / path / to / cache: / cache --volume / path / to / media: / media ~ -user 1000: 1000 --net = host --restart = salvo-stop --dev / dev / dri / renderD128: / dev / dri / renderD128 --dev / dev / dri / card0: / dev / dri / card0 ~ jellyfin / jellyfin
In alternativa, è possibile utilizzare docker-compose con un file di configurazione in modo da non dover eseguire un comando lungo ogni volta che si riavvia il server.
versione: "3" servizi: jellyfin: immagine: jellyfin / utente jellyfin: 1000: 1000 network_mode: volumi "host": - / path / to / config: / config - / path / to / cache: / cache - / path / to / media: / dispositivi multimediali: # dispositivi VAAPI - / dev / dri / renderD128: / dev / dri / renderD128 - / dev / dri / card0: / dev / dri / card0 # RPi 4 - / dev / vchiq: / dev / qchiq
Debian Docker Nvidia
Per ottenere l'accelerazione hardware utilizzando la finestra mobile, sono necessari diversi passaggi.
Prerequisiti:
https://github.com/nvidia/nvidia-docker/wiki/Installation-(versión-2.0)
GNU / Linux x86_64 con la versione del kernel; 3.10Docker; = 1.12 GPU NVIDIA con architettura; Driver Fermi (2.1) NVIDIA ~ = 361.93 (non testato nelle versioni precedenti)
Conferma che la tua GPU appare con questo comando.
lspci | grep VGA
Aggiorna il tuo host in modo che non vi siano possibilità che software obsoleti causino problemi.
apt-get update && apt-get dist-upgrade -y
Installa il ricciolo da utilizzare per scaricare i file necessari.
apt-get install curl
Modifica sources.list su /etc/apt/sources.list e aggiungi contributi non gratuiti a ciascuna fonte, se necessario.
deb http://ftp.ch.debian.org/debian/ stretch main
La riga sopra deve essere modificata per corrispondere alla riga seguente come esempio.
deb http://ftp.ch.debian.org/debian/ stretch contributo principale non gratuito
Scarica e aggiungi i caratteri del container dock Nvidia.
curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | sudo apt-key adddistribution = $ (. / etc / os-release; echo $ID$VERSION_ID) curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list | sudo tee /etc/apt/sources.list.d/nvidia-docker.list
Aggiorna di nuovo l'elenco dei pacchetti per scaricare l'ultimo software disponibile nel nuovo repository.
apt-get update
Installa le intestazioni linux ed esegui il seguente comando.
apt-get install linux-headers-$ (uname -r | sed $0027s / [^ -] * - [^ -] * - // $0027)
In alternativa, esegui questo comando se sei in corsa per la compatibilità.
apt-get install -t stretch-backports linux-headers-$ (uname -r | sed $0027s / [^ -] * - [^ -] * - // $0027)
Installa Nvidia docker2 dal repository.
apt-get install nvidia-docker2
Quando viene richiesto di scegliere se mantenere o installare il pacchetto di manutenzione, digitare y per installare la versione di manutenzione.
Dopo l'installazione potresti voler aggiungere nvidia come runtime predefinito: modificando /etc/docker/daemon.json in questo modo:
<"Default Runtime": "nvidia", "runtimes": { "nvidia": { "camino": "nvidia-contenedor-tiempo de ejecución", "runtimeArgs": [] } }}
Riavvia i servizi degli stevedores che stanno funzionando.
sudo pkill -SIGHUP docker
Installa driver e dipendenze nvidia.
apt-get install -t stretch-backports nvidia-driver libnvcuvid1 libnvidia-encode1 libcuda1 nvidia-smi
Riavvia l'host per applicare tutte le modifiche.
riavvia ora
Convalida che il driver e l'accoppiatore siano configurati correttamente con questo test drive.
nvidia-smidocker run --gpus 0 nvidia / cuda: 9.0-base nvidia-smi
Convalida dell'accesso alle risorse necessarie dell'host e dello stevedore.
ldconfig -p | grep cuvidldconfig -p | grep libnvidia-encode.so.1
Avviare il contenitore aggiungendo quei parametri di ambiente.
-e "NVIDIA_DRIVER_CAPABILITIES = all" -e NVIDIA_VISIBLE_DEVICES = all --runtime = nvidia --gpus all
Un comando di esecuzione completo sarebbe simile a questo.
docker run -d --name = jellyfin -e NVIDIA_DRIVER_CAPABILITIES = all -e NVIDIA_VISIBLE_DEVICES = all --gpus all --runtime = nvidia -p 8096: 8096 -p 8920: 8920 -v / config: / config -v / media: / media -v / cache: / cache --restore a meno che non venga arrestato ~ jellyfin / jellyfin
Ci sono alcuni passaggi speciali quando si esegue con l'opzione successiva.
--utente 1000: 1000
Potrebbe essere necessario aggiungere questo utente al gruppo di video.
usermod -aG utente video
Una volta avviato il contenitore, è possibile riconvalidare l'accesso alle risorse dell'host.
docker exec -it jellyfin ldconfig -p | grep cuviddocker exec -it jellyfin ldconfig -p | grep libnvidia-encode.so.1
Ora vai alle impostazioni di riproduzione di Jellyfin, abilita Nvidia NVENC e seleziona i codec di destinazione in base a ciò che la tua GPU supporta per riprodurre qualsiasi file che necessita di transcodifica. Cambiare il bitrate è un buon modo per testarlo.
Esamina i log di transcodifica per assicurarti che tutto funzioni correttamente.
Stream #0: 0 -----; #0: 0 (h264 (h264_cuvid) -------; h264 (h264_nvenc)) Stream #0: 2 -------; #0: 1 (ac3 (nativo) -------; aac (nativo))<-pre>Configurare l'accelerazione VAAPI su Debian / Ubuntu dai pacchetti .deb
La configurazione VAAPI in Debian / Ubuntu richiede alcune configurazioni aggiuntive per garantire che le autorizzazioni siano corrette.
Per verificare le informazioni VAAPI sul sistema, installare ed eseguire vainfo dalla riga di comando.
- Configurare VAAPI per il sistema in uso seguendo la documentazione pertinente. Verifica che ora sia presente un dispositivo di rendering in / dev / dri e nota le autorizzazioni e il gruppo disponibili per scrivere su di esso, in questo caso render: $ ls -l / dev / dritotal 0drwxr-xr-x 2 root 100 13 aprile 16:37 by-pathcrw-rw ---- 1 video radice 226, 0 13 aprile 16:37 card0crw-rw ---- 1 video radice 226, 1 aprile 13 16:37 card1crw-rw ---- 1 rendering radice 226, 128 aprile 13 16:37 renderD128 Nota In alcune versioni, il gruppo può essere video anziché render.
- Aggiungere l'utente del servizio Jellyfin al gruppo precedente per consentire l'accesso al processo FFMpeg Jellyfin al dispositivo e riavviare Jellyfin.
sudo usermod -aG render jellyfinsudo systemctl restart jellyfin
- Impostare l'accelerazione VAAPI nella pagina "Transcodifica" del pannello di amministrazione. Immettere il dispositivo / dev / dri / renderD128 sopra come valore del dispositivo dell'API VA.
- Guarda un film e verifica che la transcodifica avvenga visualizzando i registri di ffmpeg-transcode - *. Txt in / var / log / jellyfin e utilizzando radeontop o strumenti simili.
Contenitore LXC o LXD
Questo è stato testato con LXC 3.0 e potrebbe funzionare o meno con le versioni precedenti.
Seguire i passaggi precedenti per aggiungere l'utente jellyfin al gruppo video o rendering, a seconda delle circostanze.
- Aggiungi la tua GPU al contenitore.
$ add dispositivo di configurazione lxc gpu gpu gid = <gid de su video o grupo de renderización;
- Assicurati di avere la carta all'interno del contenitore:
$ lxc exec jellyfin - ls -l / dev / dritotal 0crw-rw ---- 1 video root 226, 0 giu 4 02:13 card0crw-rw ---- 1 video root 226, 0 giu 4 02:13 controlD64crw -rw ---- 1 video radice 226, 128 giu 4 02:13 renderD128
- Impostare Jellyfin per utilizzare l'accelerazione video e puntarlo sul dispositivo corretto se l'opzione predefinita è errata.
- Prova a riprodurre un video che richiede la transcodifica ed esegui quanto segue, dovresti ottenere un successo.
$ ps aux | grep ffmpeg | grep accel
- Puoi anche provare a riprodurre un video che richiede la transcodifica e, se riprodotto, sei a posto.
Risorse utili:
Raspberry Pi 3 e 4
- Aggiungi l'utente del servizio Jellyfin al gruppo video per consentire l'accesso al processo FFMpeg Jellyfin all'encoder e riavvia Jellyfin.sudo usermod -aG video jellyfinsudo systemctl riavvia jellyfinNoteSe stai utilizzando un Raspberry Pi 4, potrebbe essere necessario eseguire sudo rpi-update per gli aggiornamenti del kernel e del firmware.
- Scegli OpenMAX OMX come accelerazione hardware nella scheda Transcodifica del Server Dashboard.
- Modifica la quantità di memoria allocata alla GPU. La GPU non è in grado di gestire contemporaneamente la decodifica e la codifica accelerate sudo nano /boot/config.txt Per RPi4, aggiungi la riga gpu_mem = 320 Vedi di più qui Per RPi3, aggiungi la riga gpu_mem = 256 Puoi impostare qualsiasi valore, ma 320 è la quantità Consigliato per 4K HEVC. Controlla la divisione tra CPU e memoria GPU: vcgencmd get_mem arm && vcgencmd get_mem gpu Monitora la temperatura e la velocità del clock della CPU: vcgencmd measure_temp && vcgencmd measure_clock arm
nota
RPi4 attualmente non supporta la decodifica HWA, ma solo la codifica H.264 HWA. È richiesto il raffreddamento attivo, il raffreddamento passivo è insufficiente per la transcodifica. Nei test RPi3, la transcodifica non funzionava abbastanza velocemente da funzionare in tempo reale perché il video veniva ridimensionato.
Verifica transcodici
Per verificare che si stiano utilizzando le librerie appropriate, eseguire questo comando sul record di transcodifica. Questo può essere trovato in Admin Dashboard> Logs e in / var / log / jellyfin se si trova attraverso il repository.
grep -A2 "Streaming mapping: /var/log/jellyfin/ffmpeg-transcode-85a68972-7129-474c-9c5d-2d9949021b44.txtCiò ha prodotto i seguenti risultati.
Mappatura corrente: #0 corrente: 0 ----; #0: 0 (hevc (nativo) ----; h264 (h264_omx)) Attuale #0: 1 ----; #0: 1 (aac (nativo) ----; mp3 (libmp3lame))Il flusso #0: 0 utilizzava il software per decodificare HEVC e utilizzava HWA per codificare.
Il flusso #0: 1 ha avuto gli stessi risultati. La decodifica è più semplice della codifica, quindi questi sono generalmente buoni risultati. La decodifica HWA è in fase di elaborazione.