Aller au contenu

Accélération matérielle

Jellyfin prend en charge l'accélération matérielle (HWA) de l'encodage / décodage vidéo à l'aide de FFMpeg. FFMpeg et Jellyfin peuvent prendre en charge plusieurs implémentations d'accélération matérielle telles que Intel Quicksync (QSV), AMD AMF, nVidia NVENC / NVDEC, OpenMax OMX et MediaCodec via des API d'accélération vidéo.

VAAPI est une API d'accélération vidéo qui utilise libva pour interagir avec les contrôleurs locaux pour fournir HWA. QSV utilise une version modifiée (forkée) de VAAPI et l'interface avec libmfx et ses pilotes propriétaires (liste des processeurs compatibles QSV).

 Accélération matérielle Accélération matérielle

OS Accélération matérielle recommandée LinuxQSV, NVENC, VAAPI WindowsQSV, NVENC, AMF, VAAPIMacOSNone (VideoToolbox Coming Soon) AndroidMediaCodec, OMXRPiOMX

Comparaison des cartes graphiques utilisant HWA

NVIDIA utilisant la liste officielle ffmpeg. Toutes les cartes n'ont pas été testées. Ces pilotes sont recommandés pour Linux et Windows. Voici la liste officielle des cartes graphiques NVIDIA pour les codecs pris en charge. Exemple d'Ubuntu fonctionnant avec NVENC. H264 10 bits ne prend pas en charge l'accélération NVIDIA.

Liste des codecs pris en charge par VAAPI.

Le support AMF Linux n'est pas encore officiel et les cartes AMD GFX doivent utiliser VAAPI sous Linux.

Zen n'est que le CPU. Il n'y a aucune accélération matérielle pour aucune forme de décodage / codage vidéo. Vous aurez besoin d'un APU ou d'un dGPU pour l'accélération matérielle.

Intel QSV Benchmarks sur Linux.

Sous Windows, vous pouvez utiliser les bibliothèques DXVA2 / D3D11VA pour le décodage et la bibliothèque libmfx pour l'encodage.

CentOS peut nécessiter des pilotes supplémentaires pour le QSV.

Voici des informations supplémentaires pour en savoir plus.

Activation de l'accélération matérielle

Les options d'accélération matérielle se trouvent dans le tableau de bord d'administration dans la section Transcodage . Sélectionnez une option d'accélération matérielle valide dans le menu déroulant, indiquez un périphérique le cas échéant et cochez Activer le chiffrement matériel pour activer le chiffrement ainsi que le décodage si votre matériel le prend en charge.

L'accélération matérielle est immédiatement disponible pour la lecture multimédia. Il n'est pas nécessaire de redémarrer le serveur.

Configuration

Chaque type d'accélération matérielle, ainsi que chaque type d'installation de Jellyfin, nécessite différentes options de configuration avant de pouvoir être utilisé. Il est toujours préférable de consulter la documentation FFMpeg sur le type d'accélération que vous choisissez pour les dernières informations.

Accélération dans Docker

Afin d'utiliser l'accélération matérielle dans le Docker, les périphériques doivent être déplacés vers le conteneur. Pour voir quels périphériques vidéo sont disponibles, vous pouvez exécuter sudo lshw -c video ou vainfo sur votre ordinateur.

Remarque

Les GPU NVIDIA ne sont actuellement pas pris en charge sur Docker-Compose.

Vous pouvez utiliser Docker Run pour démarrer le serveur avec une commande comme la suivante.

docker run -d --volume / path / to / config: / config --volume / path / to / cache: / cache --volume / path / to / media: / media ~ -user 1000: 1000 --net = hôte --restart = à moins que stop --dev / dev / dri / renderD128: / dev / dri / renderD128 --dev / dev / dri / card0: / dev / dri / card0 ~ jellyfin / jellyfin

Alternativement, vous pouvez utiliser docker-compose avec un fichier de configuration afin de ne pas avoir à exécuter une commande longue à chaque redémarrage de votre serveur.

version: "3" services: jellyfin: image: jellyfin / jellyfin utilisateur: 1000: 1000 mode_réseau: "hôte" volumes: - / chemin / vers / config: / config - / chemin / vers / cache: / cache - / chemin / vers / média: / périphériques multimédias: périphériques VAAPI # - / dev / dri / renderD128: / dev / dri / renderD128 - / dev / dri / card0: / dev / dri / card0 # RPi 4 - / dev / vchiq: / dev / qchiq

Debian Docker Nvidia

Pour obtenir une accélération matérielle à l'aide du docker, plusieurs étapes sont nécessaires.

Prérequis:

https://github.com/nvidia/nvidia-docker/wiki/Installation-(version-2.0)

GNU / Linux x86_64 avec la version du noyau; 3.10Docker; = 1.12 GPU NVIDIA avec architecture; Pilotes NVIDIA Fermi (2.1) ~ = 361.93 (non testé dans les versions précédentes)

Confirmez que votre GPU apparaît avec cette commande.

lspci | grep VGA

Mettez à jour votre hôte afin qu'il n'y ait aucune chance qu'un logiciel obsolète cause des problèmes.

apt-get update && apt-get dist-upgrade -y

Installez la boucle à utiliser pour télécharger les fichiers nécessaires.

apt-get install curl

Modifiez sources.list à /etc/apt/sources.list et ajoutez des contributions non libres à chaque source si nécessaire.

deb http://ftp.ch.debian.org/debian/ stretch main

La ligne ci-dessus doit être modifiée pour correspondre à la ligne suivante à titre d'exemple.

deb http://ftp.ch.debian.org/debian/ stretch main non-free contrib

Téléchargez et ajoutez les polices Nvidia Dock Container.

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

Mettez à jour votre liste de packages pour télécharger le dernier logiciel disponible dans le nouveau référentiel.

mise à jour apt-get

Installez les en-têtes linux et exécutez la commande suivante.

apt-get install linux-headers-$ (uname -r | sed $0027s / [^ -] * - [^ -] * - // $0027)

Sinon, exécutez cette commande si vous êtes en course pour la compatibilité.

apt-get install -t stretch-backports linux-headers-$ (uname -r | sed $0027s / [^ -] * - [^ -] * - // $0027)

Installez Nvidia docker2 à partir du référentiel.

apt-get install nvidia-docker2

Lorsque vous êtes invité à choisir de maintenir ou d'installer le package de maintenance, tapez y pour installer la version de maintenance.

Après l'installation, vous voudrez peut-être ajouter nvidia comme runtime par défaut: en éditant /etc/docker/daemon.json comme ceci:

<"Default Runtime": "nvidia", "runtimes": { "nvidia": { "camino": "nvidia-contenedor-tiempo de ejecución", "runtimeArgs": [] } }}

Redémarrez les services des débardeurs qui fonctionnent actuellement.

sudo pkill -SIGHUP docker

Installez les pilotes et les dépendances nvidia.

apt-get install -t stretch-backports nvidia-driver libnvcuvid1 libnvidia-encode1 libcuda1 nvidia-smi

Veuillez redémarrer votre hôte pour appliquer toutes les modifications.

redémarrer maintenant

Vérifiez que votre pilote et votre coupleur sont correctement configurés avec ce lecteur de test.

nvidia-smidocker run --gpus 0 nvidia / cuda: nvidia-smi à 9,0 bases

Validez l'accès aux ressources nécessaires de l'hôte et du manutentionnaire.

ldconfig -p | grep cuvidldconfig -p | grep libnvidia-encode.so.1

Démarrez votre conteneur en ajoutant ces paramètres d'environnement.

-e "NVIDIA_DRIVER_CAPABILITIES = all" -e NVIDIA_VISIBLE_DEVICES = all --runtime = nvidia --gpus all 

Une commande d'exécution complète ressemblerait à ceci.

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 sauf si arrêté ~ jellyfin / jellyfin

Il existe certaines étapes spéciales lors de l'exécution avec l'option suivante.

--utilisateur 1000: 1000

Vous devrez peut-être ajouter cet utilisateur au groupe vidéo.

utilisateur vidéo usermod -aG

Une fois le conteneur démarré, vous pouvez revalider l'accès aux ressources de l'hôte.

docker exec -it jellyfin ldconfig -p | grep cuviddocker exec -it jellyfin ldconfig -p | grep libnvidia-encode.so.1

Maintenant, allez dans les paramètres de lecture de Jellyfin, activez Nvidia NVENC et sélectionnez les codecs cibles en fonction de ce que votre GPU prend en charge pour lire tout fichier nécessitant un transcodage. Changer le débit est un bon moyen de tester cela.

Consultez les journaux de transcodage pour vous assurer que tout fonctionne correctement.

Flux #0: 0 -----; #0: 0 (h264 (h264_cuvid) -------; h264 (h264_nvenc)) Stream #0: 2 -------; #0: 1 (ac3 (natif) -------; aac (natif))<-pre>

Configuration de l'accélération VAAPI sur Debian / Ubuntu à partir des packages .deb

La configuration VAAPI dans Debian / Ubuntu nécessite une configuration supplémentaire pour garantir que les autorisations sont correctes.

Pour vérifier les informations VAAPI sur votre système, installez et exécutez vainfo à partir de la ligne de commande.

  1. Configurez VAAPI pour votre système en suivant la documentation appropriée. Vérifiez qu'il existe maintenant un périphérique de rendu dans / dev / dri, et notez les autorisations et le groupe disponibles pour y écrire, dans ce cas, rendez-vous: $ ls -l / dev / dritotal 0drwxr-xr-x 2 root 100 13 avril 16:37 by-pathcrw-rw ---- 1 vidéo racine 226, 0 13 avril 16:37 card0crw-rw ---- 1 vidéo racine 226, 1 avril 13 16:37 card1crw-rw ---- 1 root render 226, 128 avr 13 16:37 renderD128 Remarque Dans certaines versions, le groupe peut être vidéo au lieu de rendu.
  2. Ajoutez l'utilisateur du service Jellyfin au groupe précédent pour autoriser l'accès du processus Jellyfin FFMpeg au périphérique et redémarrez Jellyfin.
sudo usermod -aG rendre jellyfinsudo systemctl redémarrer jellyfin
  1. Réglez l'accélération VAAPI sur la page "Transcodage" du panneau d'administration. Entrez le périphérique / dev / dri / renderD128 ci-dessus comme valeur de périphérique de l'API VA.
  2. Regardez un film et vérifiez que le transcodage se produit en affichant les journaux de ffmpeg-transcode - *. Txt sous / var / log / jellyfin et en utilisant radeontop ou des outils similaires.

Conteneur LXC ou LXD

Cela a été testé avec LXC 3.0 et peut ou peut ne pas fonctionner avec les versions antérieures.

Suivez les étapes ci-dessus pour ajouter l'utilisateur jellyfin à la vidéo ou au groupe de rendu, selon leurs circonstances.

  1. Ajoutez votre GPU au conteneur.
$ lxc config device add  gpu gpu gid = 
  1. Assurez-vous d'avoir la carte à l'intérieur du conteneur:
$ lxc exec jellyfin - ls -l / dev / dritotal 0crw-rw ---- 1 vidéo racine 226, 0 juin 4 02:13 card0crw-rw ---- 1 vidéo racine 226, 0 juin 4 02:13 controlD64crw -rw ---- 1 vidéo racine 226, 128 juin 4 02:13 renderD128
  1. Réglez Jellyfin pour utiliser l'accélération vidéo et pointez-le sur le bon appareil si l'option par défaut est incorrecte.
  2. Essayez de lire une vidéo qui nécessite un transcodage et exécutez ce qui suit, vous devriez obtenir un hit.
$ ps aux | grep ffmpeg | grep accel
  1. Vous pouvez également essayer de lire une vidéo qui nécessite un transcodage, et si elle est lue, vous êtes bon.

Ressources utiles:

Raspberry Pi 3 et 4

  1. Ajoutez l'utilisateur du service Jellyfin au groupe vidéo pour autoriser l'accès du processus Jellyfin FFMpeg à l'encodeur et redémarrez Jellyfin.sudo usermod -aG video jellyfinsudo systemctl restart jellyfinNoteSi vous utilisez un Raspberry Pi 4, vous devrez peut-être exécuter sudo rpi-update pour les mises à jour du noyau et du firmware.
  2. Choisissez OpenMAX OMX comme accélération matérielle dans l'onglet Transcodage du tableau de bord du serveur.
  3. Modifiez la quantité de mémoire allouée au GPU. Le GPU ne peut pas gérer le décodage et l'encodage accélérés simultanément sudo nano /boot/config.txt Pour RPi4, ajoutez la ligne gpu_mem = 320 Voir plus ici Pour RPi3, ajoutez la ligne gpu_mem = 256 Vous pouvez définir n'importe quelle valeur, mais 320 est la quantité Recommandé pour 4K HEVC. Vérifiez la division entre le processeur et la mémoire du GPU: vcgencmd get_mem arm && vcgencmd get_mem gpu Surveillez la température et la vitesse de l'horloge du processeur: vcgencmd measure_temp && vcgencmd measure_clock arm
Remarque

RPi4 ne prend actuellement pas en charge le décodage HWA, mais uniquement l'encodage H.264 HWA. Un refroidissement actif est nécessaire, un refroidissement passif est insuffisant pour le transcodage. Dans les tests RPi3, le transcodage ne fonctionnait pas assez rapidement pour fonctionner en temps réel car la vidéo était en cours de redimensionnement.

Vérification des transcodes

Pour vérifier que vous utilisez les bibliothèques appropriées, exécutez cette commande sur votre enregistrement de transcodage. Cela peut être trouvé dans Admin Dashboard> Logs, et dans / var / log / jellyfin si c'est via le référentiel.

grep -A2 "Mappage de flux: /var/log/jellyfin/ffmpeg-transcode-85a68972-7129-474c-9c5d-2d9949021b44.txt

Cela a donné les résultats suivants.

Cartographie actuelle: #0 actuelle: 0 ----; #0: 0 (hevc (natif) ----; h264 (h264_omx)) Actuel #0: 1 ----; #0: 1 (aac (natif) ----; mp3 (libmp3lame))

Le flux #0: 0 a utilisé un logiciel pour décoder HEVC et utilisé HWA pour coder.

Le flux #0: 1 a eu les mêmes résultats. Le décodage est plus facile que l'encodage, ce sont donc généralement de bons résultats. Le décodage HWA est un travail en cours.

fr_FRFrançais
es_ESEspañol zh_CN简体中文 hi_INहिन्दी arالعربية pt_BRPortuguês do Brasil bn_BDবাংলা ru_RUРусский ja日本語 de_DEDeutsch it_ITItaliano fr_FRFrançais