Jellyfin unterstützt die Hardwarebeschleunigung (HWA) der Videokodierung / -decodierung mit FFMpeg. FFMpeg und Jellyfin können mehrere Implementierungen der Hardwarebeschleunigung wie Intel Quicksync (QSV), AMD AMF, nVidia NVENC / NVDEC, OpenMax OMX und MediaCodec über Videobeschleunigungs-APIs unterstützen.
VAAPI ist eine Videobeschleunigungs-API, die libva verwendet, um mit lokalen Controllern zu interagieren und HWA bereitzustellen. QSV verwendet eine modifizierte (gegabelte) Version von VAAPI und verbindet es mit libmfx und seinen proprietären Treibern (Liste der QSV-kompatiblen Prozessoren).
Vom Betriebssystem empfohlene HW-Beschleunigung LinuxQSV, NVENC, VAAPI WindowsQSV, NVENC, AMF, VAAPIMacOSNone (VideoToolbox in Kürze erhältlich) AndroidMediaCodec, OMXRPiOMX
Vergleich von Grafikkarten mit HWA
NVIDIA unter Verwendung der offiziellen ffmpeg-Liste. Nicht alle Karten wurden getestet. Diese Treiber werden für Linux und Windows empfohlen. Hier ist die offizielle Liste der NVIDIA-Grafikkarten für unterstützte Codecs. Beispiel für die Arbeit von Ubuntu mit NVENC. H264 10-Bit unterstützt keine NVIDIA-Beschleunigung.
Liste der von VAAPI unterstützten Codecs.
Die AMF Linux-Unterstützung ist noch nicht offiziell und AMD GFX-Karten müssen VAAPI unter Linux verwenden.
Zen ist nur die CPU. Es gibt keine Hardwarebeschleunigung für irgendeine Form der Videodecodierung / -codierung. Für die Hardwarebeschleunigung benötigen Sie eine APU oder eine dGPU.
Intel QSV Benchmarks unter Linux.
Unter Windows können Sie die DXVA2 / D3D11VA-Bibliotheken zum Decodieren und die libmfx-Bibliothek zum Codieren verwenden.
Für CentOS sind möglicherweise zusätzliche Treiber für den QSV erforderlich.
Hier finden Sie zusätzliche Informationen, um mehr zu erfahren.
Aktivieren der Hardwarebeschleunigung
Optionen für die Hardwarebeschleunigung finden Sie im Admin-Dashboard im Abschnitt Transcodierung . Wählen Sie im Dropdown-Menü eine gültige Hardwarebeschleunigungsoption aus, geben Sie gegebenenfalls ein Gerät an und aktivieren Sie die Option Hardwareverschlüsselung aktivieren, um die Verschlüsselung zu aktivieren, sowie die Dekodierung, wenn Ihre Hardware dies unterstützt.
Die Hardwarebeschleunigung ist sofort für die Medienwiedergabe verfügbar. Der Server muss nicht neu gestartet werden.
Setup
Jede Art der Hardwarebeschleunigung sowie jede Art der Jellyfin-Installation erfordert unterschiedliche Konfigurationsoptionen, bevor sie verwendet werden kann. Es ist immer am besten, die FFMpeg-Dokumentation zu der von Ihnen gewählten Beschleunigungsart zu konsultieren, um die neuesten Informationen zu erhalten.
Beschleunigung in Docker
Um die Hardwarebeschleunigung im Docker nutzen zu können, müssen Geräte in den Container verschoben werden. Um zu sehen, welche Videogeräte verfügbar sind, können Sie sudo lshw -c video oder vainfo auf Ihrem Computer ausführen.
Hinweis
NVIDIA-GPUs werden derzeit von Docker-Compose nicht unterstützt.
Sie können Docker Run verwenden, um den Server mit einem Befehl wie dem folgenden zu starten.
Docker führen -d --volume / path / to / config: / config --volume / path / to / cache: / cache --volume / path / to / media: / media ~ -user 1000: 1000 --net = aus host --restart = es sei denn-stop --dev / dev / dri / renderD128: / dev / dri / renderD128 --dev / dev / dri / card0: / dev / dri / card0 ~ jellyfin / jellyfin
Alternativ können Sie Docker-Compose mit einer Konfigurationsdatei verwenden, sodass Sie nicht bei jedem Neustart Ihres Servers einen langen Befehl ausführen müssen.
Version: "3" Dienste: Jellyfin: Image: Jellyfin / Jellyfin Benutzer: 1000: 1000 Netzwerkmodus: "Host" -Volumes: - / Pfad / zu / Konfiguration: / Konfiguration - / Pfad / zu / Cache: / Cache - / Pfad / to / media: / media-Geräte: # VAAPI-Geräte - / dev / dri / renderD128: / dev / dri / renderD128 - / dev / dri / card0: / dev / dri / card0 # RPi 4 - / dev / vchiq: / dev / qchiq
Debian Docker Nvidia
Um eine Hardwarebeschleunigung mit dem Docker zu erreichen, sind mehrere Schritte erforderlich.
Voraussetzungen:
https://github.com/nvidia/nvidia-docker/wiki/Installation-(version-2.0)
GNU / Linux x86_64 mit der Kernelversion; 3.10Docker; = 1.12 NVIDIA GPU mit Architektur; Fermi (2.1) NVIDIA-Treiber ~ = 361.93 (in früheren Versionen nicht getestet)
Bestätigen Sie, dass Ihre GPU mit diesem Befehl angezeigt wird.
lspci | grep VGA
Aktualisieren Sie Ihren Host, damit veraltete Software keine Probleme verursacht.
apt-get update && apt-get dist-upgrade -y
Installieren Sie die Locke, die zum Herunterladen der erforderlichen Dateien verwendet werden soll.
apt-get install curl
Bearbeiten Sie die Datei "sources.list" in /etc/apt/sources.list und fügen Sie jeder Quelle nach Bedarf unfreie Beiträge hinzu.
deb http://ftp.ch.debian.org/debian/ Streckenhaupt
Die obige Zeile muss so geändert werden, dass sie der folgenden Zeile als Beispiel entspricht.
deb http://ftp.ch.debian.org/debian/ strecken Haupt nicht frei beitragen
Laden Sie die Nvidia Dock Container-Schriftarten herunter und fügen Sie sie hinzu.
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
Aktualisieren Sie Ihre Paketliste erneut, um die neueste im neuen Repository verfügbare Software herunterzuladen.
apt-get update
Installieren Sie die Linux-Header und führen Sie den folgenden Befehl aus.
apt-get install linux-headers-$ (uname -r | sed $0027s / [^ -] * - [^ -] * - // $0027)
Führen Sie diesen Befehl alternativ aus, wenn Sie sich im Wettbewerb um Kompatibilität befinden.
apt-get install -t Stretch-Backports Linux-Header-$ (uname -r | sed $0027s / [^ -] * - [^ -] * - // $0027)
Installieren Sie Nvidia docker2 aus dem Repository.
apt-get install nvidia-docker2
Wenn Sie aufgefordert werden, das Wartungspaket zu warten oder zu installieren, geben Sie y ein, um die Wartungsversion zu installieren.
Nach der Installation möchten Sie möglicherweise nvidia als Standardlaufzeit hinzufügen: Bearbeiten Sie /etc/docker/daemon.json wie folgt:
<"Default Runtime": "nvidia", "runtimes": { "nvidia": { "camino": "nvidia-contenedor-tiempo de ejecución", "runtimeArgs": [] } }}
Starten Sie die Dienste der Stauer neu, die gerade arbeiten.
sudo pkill -SIGHUP Docker
Installieren Sie nvidia-Treiber und Abhängigkeiten.
apt-get install -t Stretch-Backports NVIDIA-Treiber libnvcuvid1 libnvidia-encode1 libcuda1 nvidia-smi
Bitte starten Sie Ihren Host neu, um alle Änderungen zu übernehmen.
Starten Sie jetzt neu
Stellen Sie sicher, dass Ihr Treiber und Ihr Koppler bei dieser Probefahrt ordnungsgemäß konfiguriert sind.
nvidia-smidocker run --gpus 0 nvidia / cuda: 9,0-Base nvidia-smi
Überprüfen Sie den Zugriff auf die erforderlichen Ressourcen des Hosts und des Stauers.
ldconfig -p | grep cuvidldconfig -p | grep libnvidia-encode.so.1
Starten Sie Ihren Container, indem Sie diese Umgebungsparameter hinzufügen.
-e "NVIDIA_DRIVER_CAPABILITIES = all" -e NVIDIA_VISIBLE_DEVICES = all --runtime = nvidia --gpus all
Ein vollständiger Ausführungsbefehl würde so aussehen.
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 --wiederherstellen, sofern nicht gestoppt ~ jellyfin / jellyfin
Beim Ausführen mit der nächsten Option gibt es einige spezielle Schritte.
- Benutzer 1000: 1000
Möglicherweise müssen Sie diesen Benutzer zur Videogruppe hinzufügen.
usermod -aG Video User
Sobald der Container gestartet ist, können Sie den Zugriff auf die Ressourcen des Hosts erneut überprüfen.
docker exec -it jellyfin ldconfig -p | grep cuviddocker exec -it jellyfin ldconfig -p | grep libnvidia-encode.so.1
Gehen Sie nun zu den Jellyfin-Wiedergabeeinstellungen, aktivieren Sie Nvidia NVENC und wählen Sie die Zielcodecs aus, je nachdem, was Ihre GPU unterstützt, um Dateien abzuspielen, die transkodiert werden müssen. Das Ändern der Bitrate ist ein guter Weg, um dies zu testen.
Überprüfen Sie die Transcodierungsprotokolle, um sicherzustellen, dass alles ordnungsgemäß funktioniert.
Stream #0: 0 -----; #0: 0 (h264 (h264_cuvid) -------; h264 (h264_nvenc)) Stream #0: 2 -------; #0: 1 (ac3 (nativ) -------; aac (nativ))<-pre>Einrichten der VAAPI-Beschleunigung unter Debian / Ubuntu aus .deb-Paketen
Die VAAPI-Konfiguration in Debian / Ubuntu erfordert eine zusätzliche Konfiguration, um sicherzustellen, dass die Berechtigungen korrekt sind.
Um die VAAPI-Informationen auf Ihrem System zu überprüfen, installieren Sie vainfo und führen Sie es über die Befehlszeile aus.
- Konfigurieren Sie VAAPI für Ihr System gemäß der entsprechenden Dokumentation. Stellen Sie sicher, dass sich jetzt ein Rendergerät in / dev / dri befindet, und notieren Sie sich die Berechtigungen und Gruppen, die zum Schreiben verfügbar sind. In diesem Fall rendern Sie: $ ls -l / dev / dritotal 0drwxr-xr-x 2 root 100 13. April 16:37 by-pathcrw-rw ---- 1 Root-Video 226, 0 13. April 16:37 card0crw-rw ---- 1 Root-Video 226, 1. April 13 16:37 card1crw-rw ---- 1 root render 226, 128 Apr 13 16:37 renderD128 Hinweis In einigen Versionen besteht die Gruppe möglicherweise aus Video anstelle von Rendern.
- Fügen Sie den Benutzer des Jellyfin-Dienstes zur vorherigen Gruppe hinzu, um den Zugriff auf den Jellyfin FFMpeg-Prozess auf das Gerät zu ermöglichen, und starten Sie Jellyfin neu.
sudo usermod -aG render jellyfinsudo systemctl starte jellyfin neu
- Stellen Sie die VAAPI-Beschleunigung auf der Seite "Transcoding" des Admin-Panels ein. Geben Sie das Gerät / dev / dri / renderD128 oben als Gerätewert der VA-API ein.
- Sehen Sie sich einen Film an und stellen Sie sicher, dass die Transcodierung stattfindet, indem Sie die Protokolle von ffmpeg-transcode - *. Txt unter / var / log / jellyfin anzeigen und Radeontop oder ähnliche Tools verwenden.
LXC- oder LXD-Container
Dies wurde mit LXC 3.0 getestet und funktioniert möglicherweise mit früheren Versionen.
Befolgen Sie die obigen Schritte, um den Jellyfin-Benutzer je nach den Umständen zur Video- oder Rendergruppe hinzuzufügen.
- Fügen Sie Ihre GPU zum Container hinzu.
$ lxc Konfigurationsgerät hinzufügen gpu gpu gid = <gid de su video o grupo de renderización;
- Stellen Sie sicher, dass sich die Karte im Behälter befindet:
$ lxc exec jellyfin - ls -l / dev / dritotal 0crw-rw ---- 1 Root-Video 226, 4. Juni 02:13 card0crw-rw ---- 1 Root-Video 226, 4. Juni 02:13 controlD64crw -rw ---- 1 Root-Video 226, 128 4. Juni 02:13 renderD128
- Stellen Sie Jellyfin so ein, dass die Videobeschleunigung verwendet wird, und zeigen Sie auf das richtige Gerät, wenn die Standardoption falsch ist.
- Versuchen Sie, ein Video abzuspielen, für das eine Transcodierung erforderlich ist, und führen Sie Folgendes aus. Sie sollten einen Treffer erzielen.
$ ps aux | grep ffmpeg | grep accel
- Sie können auch versuchen, ein Video abzuspielen, für das eine Transcodierung erforderlich ist. Wenn es abgespielt wird, sind Sie gut.
Nützliche Ressourcen:
Himbeer Pi 3 und 4
- Fügen Sie den Benutzer des Jellyfin-Dienstes zur Videogruppe hinzu, um Jellyfins FFMpeg-Prozesszugriff auf den Encoder zu ermöglichen, und starten Sie Jellyfin.sudo neu. Starten Sie jellyfin neu. Hinweis Wenn Sie ein Raspberry Pi 4 verwenden, müssen Sie möglicherweise sudo rpi-update ausführen für Kernel- und Firmware-Updates.
- Wählen Sie OpenMAX OMX als Hardwarebeschleunigung auf der Registerkarte Transcodierung des Server-Dashboards.
- Ändern Sie die der GPU zugewiesene Speichermenge. Die GPU kann die beschleunigte Dekodierung und Codierung nicht gleichzeitig verarbeiten. Sudo nano /boot/config.txt Fügen Sie für RPi4 die Zeile gpu_mem = 320 hinzu. Weitere Informationen finden Sie hier. Für RPi3 fügen Sie die Zeile gpu_mem = 256 hinzu. Sie können einen beliebigen Wert festlegen, aber 320 ist die Menge Empfohlen für 4K HEVC. Überprüfen Sie die Aufteilung zwischen CPU- und GPU-Speicher: vcgencmd get_mem arm && vcgencmd get_mem gpu Überwachen Sie die Temperatur und Geschwindigkeit des CPU-Takts: vcgencmd Measure_Temp && vcgencmd Measure_clock Arm
Hinweis
RPi4 unterstützt derzeit keine HWA-Decodierung, nur die H.264-HWA-Codierung. Aktive Kühlung ist erforderlich, passive Kühlung reicht für die Transcodierung nicht aus. In RPi3-Tests funktionierte die Transcodierung nicht schnell genug, um in Echtzeit zu arbeiten, da die Größe des Videos geändert wurde.
Überprüfen von Transcodes
Führen Sie diesen Befehl für Ihren Transcodierungsdatensatz aus, um zu überprüfen, ob Sie die entsprechenden Bibliotheken verwenden. Dies finden Sie im Admin-Dashboard> Protokolle und in / var / log / jellyfin, wenn es sich über das Repository befindet.
grep -A2 "Stream-Zuordnung: /var/log/jellyfin/ffmpeg-transcode-85a68972-7129-474c-9c5d-2d9949021b44.txtDies ergab die folgenden Ergebnisse.
Aktuelle Zuordnung: #0 Strom: 0 ----; #0: 0 (hevc (native) ----; h264 (h264_omx)) Current #0: 1 ----; #0: 1 (aac (native) ----; mp3 (libmp3lame))Der #0: 0-Stream verwendete Software zum Decodieren von HEVC und HWA zum Codieren.
Der #0: 1-Stream hatte die gleichen Ergebnisse. Das Dekodieren ist einfacher als das Kodieren, daher sind dies im Allgemeinen gute Ergebnisse. Die HWA-Dekodierung ist in Arbeit.