Vor kurzem wurde der offizielle Emby Docker Container so modifiziert das man endlich auch die Hardwarebeschleunigung von Intel CPU’s nutzen kann.
Auf diese Weise ist es möglich die CPU Last die beim encoden von Videomaterial generiert wird massiv zu senken.
Das kann unter anderem dann nützlich sein wenn man TV Streams oder Filme via Internet vom eigenen Server anschauen möchte, denn die Upload Bandbreite ist in der Regel ja beschränkt.
Ich möchte hier nur einmal kurz dokumentieren welche Schritte nötig sind um das Hardware Transcoding zu aktivieren.
Getestet habe ich das alles mit unRaid 6.3.5 und dem aktuellen Emby Docker aus dem Community Applications Repo. Mein Server verfügt über eine
Eigentlich ist die Einrichtung sehr einfach und umfasst nur drei Schritte:
- Passenden Treiber in unRaid laden
- Render Device an den Container übergeben
- Emby so konfigurieren das Hardwaretranscoding via VAAPI genutzt wird
Das laden des Treiber erledigen wir durch drei kurze Zeilen in der go File unseres unRaid Server. Ich füge solche Zeilen immer vor dem Start des emhttp Server ein:
modprobe i915 chown -R nobody:users /dev/dri chmod -R 777 /dev/dri
Auf diese Weise laden wir den Treiber und sorgen für die korrekten Zugriffsrechte auf das Render Device.
Bei Änderungen an der go File ist ein Reboot fällig, die Datei wird nur beim Systemstart eingelesen!
Nun müssen wir diese an unseren Docker Container weiter reichen.
Navigiert in der Web GUI eures unRaid Server über das Docker Tab in die Edit Anzeige des Emby Containers. Schaltet rechts oben von der Basic View in die Advanced View. Nun habt Ihr ein paar neue Felde die Ihr ausführen könnt. Interessant ist das Feld „Extra Parameters“. Tragt hier nun folgendes ein: –device /dev/dri:/dev/dri (Achtung es müssen am Anfang zwei Bindestriche stehen)
Damit haben wir den zweiten Schritt auch geschafft.
Geht nun ins Dashboard eures Emby Servers. Navigiert nach Transcoding. Dort wählt ihr unter „Video Beschleunigung“ die Video Accelleration API aus. Als VAAPI Gerät tragt Ihr folgendes ein: /dev/dri/renderD128
Wenn Ihr wollt könnt Ihr jetzt auch noch ein bisschen mit verschiedenen Settings rumspielen. Ich habe erstmal alles so belassen wie es ist.
Das Ergebnis ist jedoch beeindruckend. Während ohne Zuhilfenahme der GPU nur das Transcoding von einem Videostream von 1080p auf 720p möglich war, und dabei alle Kerne meiner CPU (2x echt, 2x HT) zu fast 100% ausgelastet war, konnte ich vorhin zwei LiveTV Streams sowie einen Film parallel auf die gleiche Weise eindampfen lassen. Ohne Ruckler etc. Dabei war ein Kern zu gut 50% ausgelastet. Die meiste Arbeit übernimmt nun also wirklich die GPU.
Hoffe das hilft irgendjemanden weiter.
Leider ist was die Geschwindigkeit angeht Emby ziemlich bescheiden ob Intel Quick Sync oder Vaapi.
Plex dagegen macht dies auf dem gleichen Wege wesentlich schneller ohne lange vorher zu warten.
Leider aber immernoch besser als den Prozessor auf 99% laufen zu haben.
Kleine Tipp um das Transcoding Verzeichnis in den RAM auszulagern.
Somit sollte Transcoding noch schneller gehen und bei mir hat es auch einen Fehler mit 4K HEVC Dateien.
Als extra Parameter -v /tmp:/transcode hinzufügen im Plex oder Emby Docker. Danach in Emby oder Plex unter Transcoding den Pfad auf /transcoding ändern….
Nachzulesen ist es hier: https://forums.unraid.net/topic/35878-plex-guide-to-moving-transcoding-to-ram/?page=6
Natürlich könnte man auch ein neues Path mapping machen aber so gehts schneller und einfacher! 😉