Eduard Prezer Logo
DJ Fotografie Über mich Links Blog Gästebuch Impressum

Odroid XU4 und Plex Media Server Transcoding mit Openmediavault

Die Vermutung liegt nahe, dass die Hardware des Odroid XU4 mit seinem 8-Kern ARM Prozessor dazu in der Lage ist Videomaterial on-the-fly mithilfe des Plex Media Servers zu Transkodieren. Installiert man sich die ARM Variante des Plex Media Servers (z.B. als openmediavault plugin), ist das Transcodieren allerdings ab werk erst einmal deaktiviert. Hier zeigt der Plex Media Server die Fehlermeldung "Der server ist nicht leistungsfähig genug um videos zu konvertieren". Mithilfe einiger kleiner Modifikationen, lässt sich Plex allerdings doch dazu überreden auf einem Odroid XU4 zu Transkodieren.

Diese Anleitung funktioniert exemplarisch mit Openmediavualt 2.2.7 und Plex Media Server Version 0.9.12.4

Vorraussetzungen

Zunächst sollte man sicherstellen dass das Paket libexpat1 installiert ist:

sudo apt-get install libexpat1 -y

Modifikationen

Nun müssen wir die zu modifizierenden Dateien (plex.js und index.html) lokalisieren. Wir wechseln dazu ins root Verzeichnis und suchen nach der Datei plex.js. Die Ausgabe dazu sollte in etwa so aussehen.

# cd /
# find -name plex.js
./usr/lib/plexmediaserver/Resources/Plug-ins/WebClient.bundle/Contents/Resources/js/plex.js
./media/cdd7bebd-29e1-44d5-84e4-6c126ba92770/plexmediaserver/Library/Application Support/Plex Media Server/Plug-ins/WebClient.bundle/Contents/Resources/js/plex.js
./export/root/plexmediaserver/Library/Application Support/Plex Media Server/Plug-ins/WebClient.bundle/Contents/Resources/js/plex.js

Unter /usr/lib/plexmediaserver liegen die eigentlichen Dateien die wir modifizieren möchten. Unter /export/root/plexmediaserver liegt eine Art Cache dieser Dateien der momentanen Plex Media Server Konfiguration. Unter /media liegt euer Backup der Plex Media Server Konfiguration falls ihr das konfiguriert habt.

Für die Modifikation reicht es die Dateien in  /usr/lib/plexmediaserver und /export/root/plexmediaserver/ zu modifizieren. Die index.html liegt dabei immer ein Verzeichnis weiter oben im Verzeichnis "Resources".

In der plex.js suchen wir nach der Funktion validateTranscoder:function und fügen direkt nach der "{" Klammer "return false;" ohne Zeilenumbrüche oder Leerzeichen ein.
Das Ergebnis sollte in etwa so Aussehen

[...]validateTranscoder:function(e,t){return false;[...]

In der index.html suchen wir nach der Zeile 

<script id="plex-script" src="js/plex.js?hash=3d1c5d7&version=2.4.9"></script>

und ändern diese zu 

<script id="plex-script" src="js/plex.js"></script>

Plex Media Server überschreibt normalerweise die Dateien unter /export/root/plexmediaserver/, womit unsere Modifikationen bei änderung der Plex Einstellungen wieder weg wären. Um dies zu verhindern entziehen wir plex die Schreibrechte für die Dateien index.html und plex.js indem wir den Dateibesitzer auf root stellen und plex somit nur noch leserechte hat.
Achtung: Diese Modifikation kann unter Umständen Probleme nach Software Updates für Plex verursachen.

# cd "/export/root/plexmediaserver/Library/Application Support/Plex Media Server/Plug-ins/WebClient.bundle/Contents/Resources"
# ls -la index.html js/plex.js
-rw-r--r-- 1 plex nogroup    2409 Sep 15 11:11 index.html
-rw-r--r-- 1 plex nogroup 2156175 Sep 15 11:14 js/plex.js
# chown root index.html js/plex.js
# ls -la index.html js/plex.js
-rw-r--r-- 1 root nogroup    2409 Sep 15 11:11 index.html
-rw-r--r-- 1 root nogroup 2156175 Sep 15 11:14 js/plex.js

Um die Änderungen zu Übernehmen müssen wir den Plex Media Server Dienst nur noch neu starten.

service plexmediaserver restart

Nachtrag: Bei einem Reboot werden wohl seitens Plex komischerweise die geänderten Dateien in /media sowie /export überschreiben. Ich habe keine effektive Möglichkeit gefunden dies zu Unterbinden. Allerdings kann man, wenn man Plex sowieso über einen nginx Reverseproxy bereitstellt auf die modofizierte plex.js verweißen. Mithilfe der Regex Regel muss man nicht mal mehr die index.html ändern.

location ~ ^/web/js/plex.js(.*)$
{
  alias /usr/lib/plexmediaserver/Resources/Plug-ins/WebClient.bundle/Contents/Resources/js/plex.js;
}

Leistungsfähigkeit

Die Leistung des Odroid XU4 Boards reicht auf jeden Fall um ein 1080p 4:2:0 high h264 Kodiertes Video mit einer Bitrate von über 2000kpbs und 5.1dts Sound im MKV Container on-the-fly in Webfähige 720p 3Mbps zu Transkodieren. Dabei pendelt sich die durchschnittliche CPU Last auf etwa 50-60% ein. Das sollte gerade so reichen um auch zwei parallele Streams mit Quellmaterial in dieser Qualität zu Transkodieren. Zur Veranschaulichung hier nochmal die Darstellung der CPU Auslastung aus Openmediavault während des Transcodierens.