Raspberry Pi – DVB-C Videorekorder & TV-Streaming

Mit Tvheadend und dem Sundtek MediaTV Pro DVR selbst hosten

Schon richtig lange benutze ich als TV-Recorder Tvheadend auf einem Raspberry Pi, wobei das DVB-C TV-Signal über zwei Sundtek MediaTV Pro III per USB reinkommt. Anscheinend schon über 3 Jahre, eben nochmal nachgeschaut, die USB-TV-Empfänger habe ich mir im August 2014 zugelegt.

Ziemlich lange hatte ich damals nach einem vernünftigen USB-Receiver gesucht und bin am Ende bei Sundtek gelandet – Qualität aus Deutschland, hat ein bisschen seinen Preis, aber hat sich definitiv bisher gelohnt.

„Live“ TV schauen mache ich dabei eher gar nicht bis sehr selten, wobei das Tvheadend natürlich auch kann – Leute, die sich in 2 Stunden Sendezeit 1 Stunde Werbung geben werde ich eh nie verstehen…

2 gleichzeitige Aufnahmen (direkt auf eine SMB-Freigabe im lokalen Netzwerk) und dazu noch 1 – 2 (HTSP-)Streams – bekommt die kleine Himbeere ohne Probleme hin – ich war anfangs selbst überrascht.

Einrichtung

Auf die Einrichtung von Raspbian selbst gehe ich hier erstmal nicht weiter ein, das lädt man sich ja für gewöhnlich eh nur als fertiges Image auf die miroSD und dann geht es auch schon los.

Da Tvheadend nicht allzu oft ein Release mit fertigem Debian-Paket veröffentlicht, kompiliere ich das ca. einmal im Monat selbst direkt auf dem Pi aus dem aktuellen Master-Branch von GitHub – bisher war es nur einmal der Fall, dass dabei was kaputt war.

Neben der Wartezeit, das Kompilieren dauert auf dem Raspberry schon mal so 30 Minuten, ist das relativ simpel.

Beim ersten Mal müssen zuvor noch die notwendigen Abhängigkeiten installiert, der User für den Tvheadend Dienst erstellt und das Repository geklont werden:

apt-get install build-essential git pkg-config libssl-dev bzip2 wget libavahi-client-dev zlib1g-dev libavcodec-dev libavutil-dev libavformat-dev libswscale-dev libcurl4-gnutls-dev liburiparser-dev debhelper php5-curl
cd /opt
git clone https://github.com/tvheadend/tvheadend.git

adduser hts
usermod -a -G video hts

Folgende Schritte für das Aktualisieren der Arbeitskopie und (neu-)kompilieren sind dann für jedes Update gleich:

./configure --disable-satip_server --disable-satip_client --disable-libav --disable-ffmpeg_static --disable-libx265 --disable-libx265_static
make

Wenn das fertig ist, sollte unter ./build.linux/tvheadend das Ergebnis zu finden sein.

Für die Sundtek USB-Receiver muss einmalig noch der passende Treiber installiert werden, was auch einfach geht:

cd /tmp
wget http://www.sundtek.de/media/sundtek_netinst.sh
chmod 755 sundtek_netinst.sh
./sundtek_netinst.sh

Für Tvheadend lege ich dann noch ein klassisches init.d-Script an, wobei Tvheadend direkt aus dem Build-Verzeichnis gestart wird:

init.d tvheadend
#!/bin/sh ### BEGIN INIT INFO # Provides: tvheadend # Required-Start: $remote_fs $syslog # Required-Stop: $remote_fs $syslog # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short-Description: Start daemon at boot time # Description: Enable service provided by daemon. ### END INIT INFO dir="/opt/tvheadend/build.linux" cmd="/opt/tvheadend/build.linux/tvheadend" user="hts" name=`basename $0` pid_file="/var/run/$name.pid" stdout_log="/var/log/$name.log" stderr_log="/var/log/$name.err" get_pid() { cat "$pid_file" } is_running() { [ -f "$pid_file" ] && ps `get_pid` > /dev/null 2>&1 } case "$1" in start) if is_running; then echo "Already started" else echo "Starting $name" cd "$dir" if [ -z "$user" ]; then sudo $cmd >> "$stdout_log" 2>> "$stderr_log" & else sudo -u "$user" $cmd >> "$stdout_log" 2>> "$stderr_log" & fi echo $! > "$pid_file" if ! is_running; then echo "Unable to start, see $stdout_log and $stderr_log" exit 1 fi fi ;; stop) if is_running; then echo -n "Stopping $name.." kill `get_pid` for i in {1..10} do if ! is_running; then break fi echo -n "." sleep 1 done echo if is_running; then echo "Not stopped; may still be shutting down or shutdown may have failed" exit 1 else echo "Stopped" if [ -f "$pid_file" ]; then rm "$pid_file" fi fi else echo "Not running" fi ;; restart) $0 stop if is_running; then echo "Unable to stop, will not attempt to start" exit 1 fi $0 start ;; status) if is_running; then echo "Running" else echo "Stopped" exit 1 fi ;; *) echo "Usage: $0 {start|stop|restart|status}" exit 1 ;; esac exit 0

Die Empfänger erkennt Tvheadend automatisch, klappert beim ersten Start ebenfalls automatisch die Muxus durch (kann auch mal länger dauern) – Sender zuordnen und schon hat man einen schicken Videorekorder mit ziemlich selbst erklärender Weboberfläche, weswegen die Konfiguration dort nicht im Detail hier beschrieben bzw. gescreenshotet werden muss, denke ich.

DVB-Adapter Übersicht in der Tvheadend Weboberfläche

Zum Streaming am TV nutze ich das entsprechende Plugin für Kodi – was auch reibungslos funktioniert.

Tvheadend Senderliste in Kodi

Für das Smarpthone gibt es noch den TVHClient, bei mir eher selten im Einsatz.

Du möchtest mir hierzu Feedback hinterlassen? Dann schreib mir gerne eine Nachricht.