Raspberry Pi: Live-Fernsehen mit tvheadend

Für den Raspberry Pi gibt es viele Einsatzmöglichkeiten. Eine davon: das Streaming eines DVB-Signals ins Netzwerk, um z.B. in Räumen ohne guten DVB-T-Empfang live Fernsehen zu können.

DVB-T und DVB-C gleichzeitig, gestreamt via tvheadend vom Raspberry Pi
DVB-T und DVB-C gleichzeitig, gestreamt via tvheadend vom Raspberry Pi
Was man dafür braucht: einen Raspberry Pi, einen DVB-T-Stick der von Linux unterstützt wird sowie einen passenden Client (wenn man nicht direkt XBMC auf dem Raspberry verwenden will) und einen USB-Hub, da die USB-Anschlüsse am Raspberry nicht genug Strom liefern. In meinem Fall verwende ich die Lösung, um meinen DVB-T-Stick mit Mac-OS-X nutzen zu können, wo er leider nicht direkt unterstützt wird.

Mittlerweile habe ich das Setup um DVB-C-Support erweitert, da der Kabelanschluss ungünstig im Wohnzimmer gelegen ist. So lässt sich digitales Kabelfernsehen einfach in mehreren Zimmern verteilen – zumindest wenn man sich auf unverschlüsselte Sender beschränkt. Man benötigt gar nicht mal viele Teile, die Kosten entstehen vor allem durch den USB-Stick für DVB-T oder noch teurer DVB-C. Wichtig ist vor allem der Linux-Support, sonst bekommt man ein Problem wenn man TVHeadend einsetzen will.

Einkaufsliste für Live-TV mit RaspberryPi
Folgende Teile werden benötigt, um diese Anleitung umsetzen zu können:

Installation des DVB-T-Sticks unter Raspbian

Ich verwende unter anderem einen Terratec Cinergy HT USB XE, dem zuerst einmal die passende Firmware fehlt (für den Sundtek MediaTV Pro III gibt es kompatible Treiber). Mittels eines kurzen Linux-Befehls (muss auf der Konsole ausgeführt werden)bekommt man eine Liste von Kernelmeldungen – dort ist auch verzeichnet, welche Firmware-Datei erwartet wird:

~# cat /var/log/dmesg

Auf linuxtv.org gibt es die entsprechenden Dateien, die passende wird einfach nach /lib/firmware kopiert, spätestens nach einem Neustart sind die Firmwares geladen und der DVB-T-Stick kann verwendet werden. In der dmesg-Ausgabe sollten nun keine Fehler bzw. fehlende Dateien um Zusammenhang mit dem Stick stehen. In meinem Fall sieht das Endergebnis so aus:

dvb-usb: found a 'Terratec Cinergy HT USB XE' in cold state, will try to load a firmware
dvb-usb: downloading firmware from file 'dvb-usb-dib0700-1.20.fw'
dib0700: firmware started successfully.
dvb-usb: found a 'Terratec Cinergy HT USB XE' in warm state.
dvb-usb: will pass the complete MPEG2 transport stream to the software demuxer.
DVB: registering new adapter (Terratec Cinergy HT USB XE)
DVB: registering adapter 0 frontend 0 (DiBcom 7000PC)...
xc2028 1-0061: creating new instance
xc2028 1-0061: type set to XCeive xc2028/xc3028 tuner
xc2028 1-0061: Loading 80 firmware images from xc3028-v27.fw, type: xc2028 firmware, ver 2.7
Registered IR keymap rc-dib0700-rc5
input: IR-receiver inside an USB DVB receiver as /devices/platform/bcm2708_usb/usb1/1-1/1-1.3/1-1.3.4/rc/rc0/input0
rc0: IR-receiver inside an USB DVB receiver as /devices/platform/bcm2708_usb/usb1/1-1/1-1.3/1-1.3.4/rc/rc0
dvb-usb: schedule remote query interval to 50 msecs.
dvb-usb: Terratec Cinergy HT USB XE successfully initialized and connected.
usbcore: registered new interface driver dvb_usb_dib0700

Installation von tvheadend

tvheadend ist eine Software, die den DVB-Stick ansteuert und den Stream des jeweiligen Senders im Netzwerk bereitstellt. Außerdem gibt es einen elektronischen Programmführer (EPG), die Möglichkeit Aufnahmen zu timen (nur sinnvoll, wenn eine Festplatte am Raspberry Pi angeschlossen ist). Für Raspbian gibt es fertige tvheadend-Pakete, die sich einfach über aptitude installieren lassen: damit spart man sich den vorher nötigen Aufwand für das kompilieren aus den Quellen. Ist tvheadend installiert und gestartet, erreicht man unter http://<IP-des-Raspberry>:9981 die tvheadend-Oberfläche.

Konfiguration von tvheadend

tvheadend Sendersuchlauf: Auswahl der des Gebietes
tvheadend Sendersuchlauf: Auswahl der des Gebietes
Bevor man die Nutzung starten kann, muss man natürlich erst einmal einen Sendersuchlauf durchführen. Zwar gibt es in tvheadend regionsspezifische Vorgaben für den Suchlauf, bei mir in München hat es allerdings nur mit dem Default-Wert, der ein größeres Spektrum absucht, funktioniert.

tvheadend Senderliste
tvheadend Senderliste
Am Ende wurden 33 Sender gefunden, die überflüssigen die nur auf eine Mediathek verweisen werden dabei rausgefiltert, sodass man nur nutzbare Sender bekommt.

Über den Play-Link kann man entweder den Stream direkt im Browser öffnen (wenn das VLC-Plugin installiert ist) oder einen Link zu diesem bestimmten Stream bekommen, den man dann im VLC öffnen kann. Damit kann man, wenn auch noch etwas umkomfortabel, prüfen ob das Setup korrekt funktioniert und ein Live-Fernsehbild übertragen wird.

Wichtig: Die Uhrzeit auf dem Raspberry Pi muss richtig sein, ansonsten gibt es Probleme mit dem elektronischen Programmführer (EPG). Die einfachste Lösung ist ntpdate zu installieren, damit wird Datum und Uhrzeit beim Start des Raspberry korrekt gesetzt (sofern eine Internetverbindung vorhanden ist).

tvheadend mit DVB-C- und DVB-T-Tuner

tvheadend mit zwei Tunern auf Raspberry Pi: läuft.
tvheadend mit zwei Tunern auf Raspberry Pi: der kleiner Rechner kommt zwar an sein Limit, aber es funktioniert.

tvheadend ist in der Lage, mehrere Tuner anzusprechen. Dies bietet mehrere Vorteile: zum einen können zwei Clients unabhängig voneinander ein unterschiedliches Programm empfangen (oder man kann einen anderen Sender aufnehmen), zum anderen können Empfangsschwächen ausgeglichen werden (in meinem Fall funktioniert der Sender DMAX über DVB-C eher schlecht, via DVB-T dagegen ohne Probleme. Die Einrichtung ist dabei einfach: es werden schlicht beide DVB-Sticks konfiguriert, wobei jeweils bei dem die gewünschten Sender gemapped werden, über den sie empfangen werden soll. Die Clients bekommen davon dann nichts mit sondern erst einmal nur eine durchgehende Senderliste.

Zuerst war ich etwa skeptisch, ob der Raspberry Pi mit zwei Anspruchsvollen USB-Geräten umgehen kann, übertaktet auf 900 MHz scheint dies jedoch kein Problem zu sein. Auch das parallele Streaming auf iPhone und iPad mit zwei verschiedenen Sendern funktioniert so.

Clients für tvheadend

VLC als tvheadend-Client
VLC als tvheadend-Client
Verwendet man Windows, kann man mittels eines Plugins die Unterstützung für tvheadend nachrüsten. Alternativ dazu lässt sich auch XBMC verwenden (z.B. auch auf einer Android-TV-Box wie meiner ATV1200), eine entsprechende Anleitung wenn man tvheadend eingerichtet hat finden sich zum Beispiel hier. XBMC kann auch direkt auf dem Raspberry laufen, sodass dann über dem HDMI-Ausgang ein Live-TV-Bild ausgegeben wird.

Für iOS-Geräte benutze ich die App Blackbox, die zwar mit 5,99 Euro nicht zu den günstigsten gehört, aber problemlos mit tvheadend zusammenarbeitet.

DVB-C mit tvheadend: RTL in München

DVB-T und DVB-C gleichzeitig, gestreamt via tvheadend vom Raspberry Pi
DVB-T und DVB-C gleichzeitig, gestreamt via tvheadend vom Raspberry Pi
Mit Hilfe eines Sundtek MediaTV Pro III ist auch DVB-C-Support möglich. Damit wird zum einen das Problem gelöst, dass zwischen Kabelabschluss und Fernseher eine zu lange Strecke ist und keine passenden Kabel liegen und zum anderen empfängt man dann auch im Raum München wieder die Sender der RTL-Gruppe. Da der Raspberry Pi selbst kein Videobild darstellen muss sondern die Informationen nur durchreicht, reicht die Leistung dafür aus. Etwas überraschend: es funktioniert sowohl DVB-T als auch DVB-C parallel mit zwei USB-Sticks auf dem Raspberry Pi, man kann sogar zwei Sender gleichzeitig Streamen.

Ansonsten funktioniert die Lösung bereits sehr gut, auch wenn DVB-T natürlich auch in den anderen Räumen verfügbar ist ohne Probleme – es ging mir erst einmal darum, ein funktionierendes Setup zu bekommen. Das ist auch gelungen, ohne den Raspberry Pi deutlich übertakten zu müssen.

Für diejenigen, die noch mehr Leistung für ihren Heimserver wollen oder die noch andere Dienste ausführen wollen, sei dieser Beitrag empfohlen: . Tvheadend läuft auf dem Cubietruck genauso wie auf dem Raspberry Pi, verbraucht nur nicht so viel CPU-Leistung (dafür etwas mehr Strom).

tvheadend Ausgabe auf einem iPhone 5
tvheadend Ausgabe auf einem iPhone 5

Update 08.09.2014:
Die FireTV-Box von Amazon soll XBMC ebenfalls unterstützen, jedenfalls gibt es schon eine Anleitung dazu. FireTV mit XBMC klingt nach einer guten Kombination für einen HTPC-Client, der auch als TV-Client für tvheadend fungieren kann. Das Thema werde ich in Zukunft hier im Blog weiter verfolgt.