Vorgeschichte

Kürzlich kam ich in den Genuss eines eigenen Samsung Smart TV. Angetrieben von Interesse in DLNA und Medienstreaming kam ich auf “ReadyMedia”, ehemals “minidlna”. ReadyMedia verfügt zum aktuellen Zeitpunkt über alle benötigten Funktionen, um simples Medienstreaming zu realisieren. Von Haus gibt es bislang keinen Support für Transkodierung.

Dieser Punkt ist für mich jedoch von Relevanz, da fast meine komplette Musiksammlung aus den verlustfreien Formaten FLAC und WAV besteht. Der Samsung Smart TV unterstützt soweit ich dies ausprobiert habe lediglich MP3 – kein FLAC, kein WAV, kein AAC.

Folgende Möglichkeiten habe ich als Lösung ins Auge gefasst:

  • Pre-Transkodieren der kompletten Sammlung, bei Zuwachs späteres “inkrementelles Transkodieren”
  • “On-the-fly”-Transkodieren

readymedia-transcode und ffmpeg während ein Titel abgespielt wird

Beide Verfahren haben ihre Vor- und Nachteile. So verbraucht die Pre-Transkodierung zwar mehr Speicher, wenn ich die Originale behalten will, es entsteht aber weniger/kaum Rechenaufwand bei der Wiedergabe.
Dank “On-the-fly”-Transkodierung kann ich meine Musiksammlung unaufgeräumt und unvorbereitet einwerfen. Dafür entsteht bei jeder Wiedergabe ein gewisser Rechenaufwand, der letztlich zu einer kleinen, aber dennoch spürbaren Verzögerung führt.

Das zweite Verfahren habe ich gewählt, da ich dieses als weit komfortabler empfinde und Rechenzeit ein zu vernachlässigender Punkt ist – beim Streaming-Server handelt es sich um einen Dell Optiplex 755 mit Core2Quad Q6700.

Was wir nun tun

  1. Hinzufügen des Deb-Multimedia-Repositorys
  2. Herunterladen, kompilieren und installieren
    1. Abhängigkeiten
    2. ReadyMedia-transcoding
  3. Grundkonfiguration von ReadyMedia-transcoding
    1. Anpassen des “transcoding_audio”-Skripts
  4. Start und Funktionstest
  5. Abschluss

Hinzufügen des Deb-Multimedia-Repositorys

In Anbetracht dessen, dass Debian Jessie nun bereits ein Jahr auf dem Buckel hat und bereits bei Release viele Pakete, insbesondere Bibliotheken wie auch FFmpeg aufgrund der “Freeze-Policy” veraltet waren, ist es sinnvoll, das Deb-Multimedia-Repository zu nutzen.

Datei /etc/apt/sources.list oder /etc/apt/sources.list.d/99-deb-multimedia.list mit folgendem Inhalt befüllen:

deb ftp://ftp.uni-kl.de/debian-multimedia/ testing main
deb-src ftp://ftp.uni-kl.de/debian-multimedia/ testing main

Pubkeys importieren, um Fehlermeldungen und Sicherheitsrisiken vorzubeugen:

apt-get install deb-multimedia-keyring

Paketlisten aktualisieren und ein Upgrade durchführen:

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

Herunterladen, kompilieren und installieren

Abhängigkeiten

Meinen Beobachtungen zufolge werden die mit dem folgenden Kommando zu installierenden Pakete in Debian Jessie benötigt:

apt-get install git automake autopoint gcc libavutil-dev libavcodec-dev libavformat-dev libjpeg-dev libsqlite3-dev libexif-dev libid3tag0-dev libogg-dev libvorbis-dev libflac-dev libmagickwand-dev build-essential gettext ffmpeg

ReadyMedia-Transcode

Um ReadyMedia-Transcode herunterzuladen, werden die Quelldateien zuvor aus dem Bitbucket-Repository geklont:

git clone -b transcode https://bitbucket.org/stativ/readymedia-transcode.git

Um schlussendlich zu kompilieren, werden diese 4 Befehle benutzt:

./autogen.sh
./configure
make
make install

Grundkonfiguration von ReadyMedia-Transcode

Eine beispielhafte Konfiguration liegt im Verzeichnis “readymedia-transcode” bei. In dieser habe ich die folgenden Zeilen abgeändert:

port=8201
user=minidlna
media_dir=A,/mnt/three
media_dir=V,/mnt/two
friendly_name=Medienserver
transcode_audio_transcoder=/root/readymedia-transcode/transcodescripts/transcode_audio

Diese Änderungen sind, bis auf die letzte, nicht notwendig, aber meiner Meinung nach empfehlenswert. In der letzten Zeile wird ein Skript definiert, welches sich dann um die Transkodierung kümmert. Auch hierfür werden bereits Skripte mitgeliefert, welche sich in meinem Fall allerdings als nicht funktionstüchtig herausgestellt haben.

Anpassen des “transcoding_audio”-Skripts

Standardmäßig kommt FFmpeg zum Einsatz, um beliebige Formate in das gewünschte, vom jeweiligen Smart TV unterstützte, Format zu transkodieren. Aber auch andere Software kann hierfür genutzt werden. Die Skripte sind in Bash geschrieben und die einzige Bedingung ist, dass die Ausgabe der transkodierten Daten per pipe möglich ist.

Mit dem mitgelieferten Skript hatte ich gleich mehrere Probleme. Dort wird ffmpeg mit folgenden Parametern gestartet:

ffmpeg -ss $STARTPOSITION -t $DURATION -i "$SOURCE" -loglevel quiet -acodec libmp3lame -f mp3 -ar 44100 -ab 224k pipe:1

Zum einen kommt hier eine veraltete Syntax zum Einsatz (z. B. -ab statt -b:a). Zum anderen hatte ich mit einer FLAC-Testdatei Probleme, da in den Stream Videodaten gemischt wurden. Mein ffmpeg-Befehl lautet daher nun so:

ffmpeg -ss $STARTPOSITION -t $DURATION -i "$SOURCE" -f mp3 -c:v copy -vn -b:a 128k pipe:1

Würde ich an meinem Smart TV AAC nutzen können, könnte das Kommando auch so aussehen:

ffmpeg -ss $STARTPOSITION -t $DURATION -i "$SOURCE" -f adts -c:v copy -vn -b:a 128k pipe:1

Start und Funktionstest

Ich persönlich starte den Daemon noch manuell und in screen (während ich mich im Verzeichnis mit Konfiguration und Binary befinde):

screen ./minidlnad -d -f readymedia-medienserver.conf

Hierbei definiere ich mit -d, dass ich für das Debugging relevante Informationen (am Anfang bei Transcoding-Problemen sehr hilfreich) angezeigt bekommen möchte. So wird beispielsweise auch der Output (z. B. Transcoding-Fortschritt) von ffmpeg angezeigt. Mit -f wird definiert, dass ich eine eigene Konfigurationsdatei namens “readymedia-medienserver.conf” nutzen möchte.

Abschluss

Zum Abschluss gilt es noch zu sagen, dass einige Funktionen, die man bei der Nutzung von offiziell unterstützen Formaten hat, nicht vorhanden sind. Am nervigsten ist davon, dass die “Fortschrittsanzeige” der Musiktitel fehlt. Weiterhin ist die “On-the-fly-Transkodierung” mit einer gewissen Latenz beim starten eines Titels verbunden.
Es gibt noch einige weitere Nachteile, die ich in Freizeit versuche zu beheben und dann entsprechend auch irgendwann in das Projekt einfließen zu lassen.

Hinweis: Dieser Beitrag erhebt keinen Anspruch auf Vollständigkeit. Über jedwede Informationen per Mail, Kontaktformular oder Kommentarfunktion bin ich sehr erfreut.

Quellen

Leave a Reply

Your email address will not be published.