DVB-Streaming-Server mit Tvheadend

Voraussetzungen: »Linux-kompatibles DVB-Gerät«, »Basisinstallation«

Installation eventuell fehlender DVB-Treiber

Die Treiberinstallation des DVB-Empfängers kann aufgrund der Fülle an Geräten hier nur exemplarisch gezeigt werden. In meiner Konfiguration verwende ich den USB-Empfänger August DVB-T210 v2.0, der in der Lage ist, Signale nach den Standards DVB-T/T2/C umzusetzen, sowie einen alten Raspberry Pi Modell B mit einem 4.4.x-Kernel. Sobald der Stick angeschlossen ist und der SBC vollständig hochgefahren ist, schauen wir uns die Kernelmeldungen bzgl. DVB an:

dmesg | grep dvb

Dies liefert dann etwa folgende Ausgabe:

[   14.194183] dvb-usb: found a 'Mygica T230 DVB-T/T2/C' in warm state.
[   14.641615] dvb-usb: will pass the complete MPEG2 transport stream to the software demuxer.
[   15.962625] dvb-usb: schedule remote query interval to 100 msecs.
[   15.995101] dvb-usb: Mygica T230 DVB-T/T2/C successfully initialized and connected.
[   16.101118] usbcore: registered new interface driver dvb_usb_cxusb
[   58.607643] si2168 3-0064: Direct firmware load for dvb-demod-si2168-b40-01.fw failed with error -2
[   58.622692] si2168 3-0064: Direct firmware load for dvb-demod-si2168-02.fw failed with error -2
[   58.631679] si2168 3-0064: firmware file 'dvb-demod-si2168-02.fw' not found
[   58.659106] si2157 4-0060: Direct firmware load for dvb-tuner-si2158-a20-01.fw failed with error -2
[   58.668473] si2157 4-0060: firmware file 'dvb-tuner-si2158-a20-01.fw' not found

Googlen nach den drei fehlenden Dateien führt schnell auf die GitHub-Seite von OpenELEC, wo diese drei Dateien jeweils zum Download angeboten werden. Diese müssen im Verzeichnis /lib/firmware gespeichert werden. Als root führen wir also nacheinander folgende Befehle aus:

cd /lib/firmware
wget https://github.com/OpenELEC/dvb-firmware/raw/master/firmware/dvb-demod-si2168-b40-01.fw
wget https://github.com/OpenELEC/dvb-firmware/raw/master/firmware/dvb-demod-si2168-02.fw
wget https://github.com/OpenELEC/dvb-firmware/raw/master/firmware/dvb-tuner-si2158-a20-01.fw
shutdown -r now

Ein Check der Kernelmeldungen nach dem Neustart liefert dann zufriedenstellend:

[   14.674748] dvb-usb: found a 'Mygica T230 DVB-T/T2/C' in warm state.
[   15.178135] dvb-usb: will pass the complete MPEG2 transport stream to the software demuxer.
[   16.923471] dvb-usb: schedule remote query interval to 100 msecs.
[   16.976378] dvb-usb: Mygica T230 DVB-T/T2/C successfully initialized and connected.
[   17.081422] usbcore: registered new interface driver dvb_usb_cxusb

Kompilierung und Installation von Tvheadend

Es ist im Folgenden unabdinglich, als normaler Nutzer, also nicht als root, angemeldet zu sein! Die Kompilierung und Installation von Tvheadend geschieht auf folgende Weise:[1][2][3]

wget https://aur.archlinux.org/cgit/aur.git/snapshot/tvheadend.tar.gz
tar -xvf tvheadend.tar.gz
cd tvheadend
makepkg -Asic
sudo shutdown -r now
sudo systemctl start tvheadend

Der erste Befehl installiert die zum Bauen des tvheadend-Installationspakets nötigen Werkzeuge. Im nächsten Schritt wird der Tarball mit allen benötigten Skripten heruntergeladen und entpackt. Nach dem Wechseln in das entpackte neue Verzeichnis wird das Paket mittels makepkg erstellt und installiert. (Zu den Optionen: A ignoriert die CPU-Architektur-Angaben im evtl. veralteten Build-Skript und berücksichtigt somit unsere vorliegende ARM-Architektur, s installiert die Abhängigkeiten mit, i installiert das Paket und c bereinigt das Verzeichnis.)

Auf einem frisch installierten System dauerte das Kompilieren und anschließende Installieren ├╝ber den makepkg-Befehl auf einem alten Raspberry Pi B mit 512MB RAM insgesamt etwa 35 Minuten. Leistungsstärkere SBCs wie der ODROID-C1 schaffen das in wesentlich kürzerer Zeit.

Konfiguration über das Webinterface

Jetzt wird der TV-Streaming-Server über die Weboberfläche konfiguriert; diese wird über http://192.168.178.2:9981 aufgerufen (die letzten beiden sogenannten Oktette der IP, hier 178 und 2, hängen natürlich von der Konfiguration der eth0-Schnittstelle ab und müssen ggf. angepasst werden). Nach erfolgreicher Konfiguration wird abschließend das System veranlasst, Tvheadend bereits während des Bootvorgangs zu starten:

sudo systemctl enable tvheadend

Optional: Senderlogos hinzufügen

Sollen in Client-Anwendungen auch Senderlogos angezeigt werden, so führen wir als root (nicht via sudo!) folgende Befehle aus:

cd /home/hts/.hts/tvheadend
mkdir logos
cd logos

Jetzt laden wir in diesen Ordner unsere Senderlogos, z.B. mittels wget. Eine gute Bezugsquelle dafür ist die Seite »LyngSat Logo«, die so gefundenen Bilder sollten nach dem Download noch auf quadratische Abmessungen gebracht werden. Hierfür bietet sich das Freeware-Programm »XnView« an (die entsprechende Option findet sich dort unter „Bild » Leinwandgröße ändern...“). Anschließend passen wir die Berechtigungen und Richtlinien für den Ordner logos an.

cd ..
chown -R hts:video logos
chmod -R 0700 logos

In der Webkonfigurationsoberfläche von tvheadend geben wir im Reiter „Configuration » Channel / EPG » Channels“ dann im Feld User Icon die URIs zu den Logos an, also bspw.:

file:///home/hts/.hts/tvheadend/logos/ard_das_erste.png

Streaming auf Endgeräte

Nun ist der Streaming-Server bereit. Am PC kann ein TV-Stream z.B. mit dem »VLC-Player« angeschaut werden, wenn über „Netzwerkstream öffnen...“ die passende URL eingegeben wird. Die Kanal-URLs erhalten wir als Download direkt vom Server: http://192.168.178.2:9981/playlist

Auch mit Smartphones oder Tablets lässt sich auf diese Weise fernsehen. Den passenden Android-Client für Tvheadend gibts bei Google Play: »TVHGuide« (oder direkt als apk-Datei zum »Download von der Entwicklerseite«; erfordert das Zulassen der Installation von Apps aus unbekannten Quellen). Alternativ steht auch die App »TVHClient« zur Verfügung, die einen etwas größeren Funktionsumfang hat. Zum eigentlichen Anschauen des Videostreams eignet sich der »MX Player« am besten, da dieser u.a. das evtl. auftretende Umschalten von 4:3 auf 16:9 und umgekehrt fehlerfrei beherrscht. (Zum vielleicht später benötigten Abspielen von AC3-Ton ist noch ein Custom-Codec erforderlich, den es »bei XDA« kostenlos zum Herunterladen gibt.) Die Einrichtung von TVHGuide (oder TVHClient) geschieht intuitiv, einzig der Hinweis, unter „Media container“ Pass-through auszuwählen, sei hier gegeben.