Du bist hier:Start»Linux»Raspberry Pi»Mediacenter

Raspberry Pi 2 als Mediacenter

05.03.2016

Raspberry Pi Mediacenter

Der Raspberry Pi 2 kann durch einen USB-Stick für DVB-T zu einem digitalen Videorekorder erweitert werden. Durch die Software VLC kann das Fernsehprogramm auf ein Smartphone über das WLAN-Netzwerk gestreamt werden. In folgendem Artikel wird die dafür erforderliche Konfiguration unter dem Betriebssystem Raspbian Jessie beschrieben.

Digitaler Videorekorder und Fernsehstreaming

Das digitale Fernsehen DVB-T kann in vielen Gebieten in Deutschland über Antenne empfangen werden. DVB-T gibt es jetzt (2016) noch ein Jahr in Berlin bevor der Nachfolger DVB-T2 im Frühjahr 2017 starten soll. Durch einen USB-Stick kann DVB-T-Fernsehen am Computer empfangen und aufgezeichnet werden. Das funktioniert auch am Mini-Computer Raspberry Pi. Das folgende Bild zeigt den Raspberry Pi 2 mit dem USB-Stick Terratec Cinergy T USB XXS. Übers WLAN kann der Raspberry das aufgenommene Fernsehen auf ein Smartphone streamen (z.B. Samsung Galaxy S3).

Raspberry Pi mit DVB-T-Stick

Raspberry Pi mit USB-Stick für DVB-T

USB-Stick, Stromversorgung und Firmware

Leider funktioniert nicht jeder DVB-T-Stick am Raspberry Pi. Ich hatte einen "DNT-Eurostick" am Pi probiert, der nur Videos mit Bildartefakten produzierte. Außerdem ist für die Stromversorgung des Raspberry Pi ein Netzteil mit 2A (Ampere) und folgende Einstellung nötig:

# increase the current for USB on the pi
sudo bash

echo "max_usb_current=1" >> /boot/config.txt
reboot

Mit einem WLAN-Stick und dem USB-Stick für DVB-T benötigt der Raspberry Pi etwa 4 Watt. Für die meisten USB-Sticks ist noch eine Firmware notwendig, die man sich aus dem Internet in das Verzeichnis /lib/firmware/ herunterladen kann. Hier ein Beispiel für den Terratec-Stick Cinergy XXS:

sudo bash

# show kernel messages when the USB stick is plugged in:
dmesg

# example for Terratec: dvb-usb: downloading firmware from file 'dvb-usb-dib0700-1.20.fw'

# get the firmware for your USB stick
wget https://github.com/cernekee/linux-firmware/raw/master/dvb-usb-dib0700-1.20.fw -O /lib/firmware/dvb-usb-dib0700-1.20.fw

exit

Einige USB-Sticks funktionieren auch ohne zusätzliche Firmware. Zum Beispiel funktioniert der USB-Stick "Logilink VG0002A DVB-T-USB 2.0" mit dem Realtek-Chip RTL2832U "out of the box" zur DVB-T Aufnahme.

Alleskönner VLC - funktioniert nicht

Auf einem "normalen" Computer reicht die Software VLC (VideoLAN Client) aus, um DVB-T aufzuzeichnen und gleichzeitig übers Netzwerk zu streamen:

# record and stream television, the following command is one line

cvlc dvb-t:// :dvb-bandwidth=8 :dvb-frequency=570000000 :program=514 --sout '#duplicate{dst=std{access=http,mux=ts,dst=:8080}, dst=file{dst=/media/storage/test.mpg}}'

VLC funktioniert auf dem Raspberry Pi nicht problemlos. Als Ersatz kann die Software mplayer zur DVB-T-Aufnahme benutzt werden. Zunächst müssen einige Software-Pakete auf dem Raspberry Pi installiert und nach DVB-T-Kanälen gesucht werden.

# on the Raspberry Pi
# install necessary software packages
sudo apt-get install -y mplayer2 vlc vlc-nox libav-tools dvb-apps

# scan the DVB-T network for channels (in this example DVB-T in Berlin)
scan /usr/share/dvb/dvb-t/de-Berlin > /home/pi/.mplayer/channels.conf

# if the scan does not work on the Pi create the channels.conf
# at your "real" computer and copy to the Pi

# for Berlin you can download it here:
wget http://torsten-traenkner.de/linux/raspberry/channels.conf -O /home/pi/.mplayer/channels.conf

MPlayer für die Aufzeichnung

Falls der Scan nicht funktioniert, kann die Datei channels.conf auch heruntergeladen werden - für Berlin z.B. hier: channels.conf. Jetzt kann mplayer DVB-T-Fernsehen aufzeichnen:

# record transport stream with mplayer:
mplayer dvb://"ZDF" -quiet -dumpstream -dumpfile $(date "+%F_%H-%M-%S")_ZDF.ts

Speicherort der Fernsehaufnahmen

Für einen definierten Speicherort der Fernsehaufnahmen empfehle ich eine Extra-Partition auf der SD-Karte anzulegen und diese als /media/storage/ einzubinden.

# add a third partition on the Pi to store the television
sudo bash

# add an entry to the file system table
echo "/dev/mmcblk0p3  /media/storage  ext4    defaults,noatime  0       2" >> /etc/fstab

# create the mount directory
mkdir /media/storage
chown pi:pi /media/storage
mount /media/storage
exit

Shell-Skript fürs Streaming

Das Shell-Skript "stream_television.sh" filtert durch das Programm avconv aus dem Transportstrom eine MPG-Datei heraus und streamt mit VLC die MPG-Datei übers WLAN-Netzwerk.

mkdir /home/pi/tools
cd /home/pi/tools

# download the television script
wget http://torsten-traenkner.de/linux/raspberry/stream_television.sh
chmod 755 stream_television.sh

# create the alias "tv" for the script
echo "alias tv='/home/pi/tools/stream_television.sh'" >> /home/pi/.bashrc
source /home/pi/.bashrc

Die Fernsehaufnahme läßt sich jetzt komfortabel durch folgende Befehle starten und stoppen:

# display available channels:
tv

# start recording and streaming television (takes some seconds to start)
tv ZDF

# stop the recording
tv stop

Leider benötigt der Umweg über mplayer -> avconv -> vlc etwa 10 Sekunden Startzeit bevor der Stream übers Netzwerk verfügbar ist. Auf dem Smartphone muss jetzt der VLC-Player für Android installiert werden. Anschließend kann in VLC unter "Medienadresse öffnen" die URL http://<ip_adresse_des_raspberry_pi>:8080 eingetragen werden und schon kann man auf dem Smartphone fernsehen.

Netzwerkstream in VLC auswählen

Netzwerkstream in VLC auswählen

Die Größe des Smartphone-Displays stellt in der Praxis ein Problem dar. Das Fernseh-Streamen auf ein Tablet könnte eine sinnvollere Alternative sein. Außerdem wird DVB-T-Fernsehen im sogenannten Interlaced-Modus gesendet. Das bedeutet, dass nur jede zweite Zeile im Bild gesendet wird. Für eine verbesserte Bildqualität müßte die MPG-Datei auf dem Raspberry Pi mit Hilfe des Programms avconv mit einem Videofilter umkodiert werden.

Digitaler Videorekorder

Die Funktionalität als Videorekorder läßt sich über die Programme "crontab" oder "at" auf dem Raspberry Pi einrichten.

# regular recording with crontab

# example "Tagesschau" at 20:00 every day
crontab -l > /dev/shm/crontab.tmp
echo "58 19 * * * /home/pi/tools/stream_television.sh \"Das Erste\"" >> /dev/shm/crontab.tmp
echo "17 20 * * * /home/pi/tools/stream_television.sh stop" >> /dev/shm/crontab.tmp
crontab /dev/shm/crontab.tmp

# single video recording
echo "/home/pi/tools/stream_television.sh ZDF" > /home/pi/atjob.txt
echo "/home/pi/tools/stream_television.sh stop" > /home/pi/atjob_stop.txt
at -f /home/pi/atjob.txt 10:28 13.02.2016
at -f /home/pi/atjob_stop.txt 11:02 13.02.2016

atq

EPG - Elektronischer Programmführer

Da Fernseh-Sendungen nicht immer pünktlich starten, sind genaue Programmdaten erforderlich. Eine kostenlose "Programmzeitschrift" läßt sich aus den EPG-Informationen des DVB-T Stroms auslesen. Dazu kann das Programm "tv_grab_dvb" benutzt werden.

# tune the program
mplayer dvb://"Das Erste" -quiet -dumpstream -dumpfile /media/storage/delete_me.ts

# in another terminal
wget http://www.darkskiez.co.uk/tv_grab_dvb-0.9.tar.gz
tar xzvf tv_grab_dvb-0.9.tar.gz
cd tv_grab_dvb-0.9/
make clean
make
./tv_grab_dvb > tv.xml

# the scan takes about 30 seconds
# tv.xml stores the television start time in UTC

# stop mplayer:
killall mplayer
rm -f /media/storage/delete_me.ts

Zeitgesteuerte Radio-Aufnahme

Das Aufnehmen von Internetradio funktioniert deutlich einfacher als die Anleitung fürs Fernsehstreamen. Für die Radio-Aufnahme muss das bereits weiter oben beschriebene Verzeichnis /media/storage/ vorhanden sein.

# install a necessary package to record internet streams
sudo apt-get install mplayer2

# download the radio script
mkdir /home/pi/tools/
cd /home/pi/tools/
wget http://torsten-traenkner.de/linux/raspberry/radio_stream.sh -O radio_stream.sh
chmod 755 radio_stream.sh

# create the alias "ra" for the script
echo "alias ra='/home/pi/tools/radio_stream.sh'" >> /home/pi/.bashrc
source /home/pi/.bashrc

Radioaufnahme starten und stoppen

Die Radioaufnahme läßt sich jetzt komfortabel durch folgende Befehle starten und stoppen:

# display available radio stations:
ra

# start recording and streaming of a radio station, example Jam FM
ra jam

# stop the recording
ra stop

Die voreingestellten Internetradios sind Berliner Radiosender. Es lassen sich aber problemlos weitere Internetradios zu dem Skript "radio_stream.sh" hinzufügen.

Radioaufnahme aufs Smartphone streamen

Im VLC-Player unter Android kann die Adresse des Raspberry Pi eingetragen werden, um den Radiostream zu hören - zum Beispiel:

# in VLC player on Android:
http://192.168.178.25:8000/audio.mp3

Zeitgesteuerte Aufnahme

Mit dem Programm "crontab" läßt sich Internetradio zu einer bestimmten Zeit aufnehmen und stoppen.

# example
crontab -l > /dev/shm/crontab.tmp
echo "58 22 * * 6 /home/pi/tools/radio_stream.sh jam" >> /dev/shm/crontab.tmp
echo "32 23 * * 6 /home/pi/tools/radio_stream.sh stop" >> /dev/shm/crontab.tmp
crontab /dev/shm/crontab.tmp

Mediathek und Livestream

Sowohl ARD als auch ZDF bieten einen Livestream ihres Nachrichtenprogramms im Internet an. Dieser Stream kann mit dem Programm AdobeHDS.php heruntergeladen werden. Damit AdobeHDS funktioniert müssen einige Software-Pakete installiert werden - zum Beispiel PHP5. Die Abkürzung HDS steht für HTTP Dynamic Streaming.

# install necessary software packages
sudo apt-get install -y php5 php5-cli php5-mcrypt php5-curl curl

# on some systems you have to enable the mcrypt module for php:
sudo php5enmod mcrypt

cd /home/pi/

# download the program AdobeHDS.php
wget "https://raw.githubusercontent.com/K-S-V/Scripts/7e1c8d844e9907ea6407d74bc1d784e71ccb3ca3/AdobeHDS.php" -O AdobeHDS.php

# download ARD livestream / Tagesschau
wget http://www.tagesschau.de/templates/pages/multimedia/livestream_player.jsp -O livestream.txt
url=$(grep "manifest\.f4m" livestream.txt | sed 's|.*\(http:.*\.f4m\).*|\1|')"?hdcore=3.1.0&plugin=aasp-3.1.0.43.124"
echo "URL: $url"
php AdobeHDS.php --manifest "$url" --delete --outfile $(date "+%F_%H-%M-%S")_tagesschau.flv

# download ZDF heute+ um 23 Uhr
php AdobeHDS.php --manifest "http://zdf0506-lh.akamaihd.net/z/none06_v1@392858/manifest.f4m?hdcore=3.6.0&plugin=aasp-3.6.0.50.41" --delete --outfile $(date "+%F_%H-%M-%S")_heute_plus.flv

# on Linux Mint 18 you can use:
sudo apt-get install -y php7.0-cli php-mcrypt php-bcmath php-curl php-simplexml

Die Download-Links wurden zuletzt am 05. März 2016 geprüft und könnten in Zukunft abweichen. Falls die Links nicht mehr funktionieren, dann schreibe mir bitte einen Kommentar (unter diesem Artikel).

Heute+ Livestream

Fürs Herunterladen von Heute+ habe ich ein kleines Shell-Skript zur Automatisierung geschrieben:

# special script for heute+
mkdir /home/pi/tools
cd /home/pi/tools
wget http://torsten-traenkner.de/linux/raspberry/download_heuteplus_livestream.sh -O download_heuteplus_livestream.sh
chmod 755 download_heuteplus_livestream.sh

# create a cron job for the download:
crontab -e
59 22 * * 1-5 /home/pi/tools/download_heuteplus_livestream.sh
21 23 * * 1-5 killall php download_heuteplus_livestream.sh

Tagesschau Livestream

Fürs Herunterladen der Tagesschau habe ich ebenfalls ein kleines Shell-Skript zur Automatisierung geschrieben:

# special script for tagesschau
mkdir /home/pi/tools
cd /home/pi/tools
wget http://torsten-traenkner.de/linux/raspberry/download_tagesschau_livestream.sh -O download_tagesschau_livestream.sh
chmod 755 download_tagesschau_livestream.sh

# create a cron job for the download:
crontab -e
59 19 * * * /home/pi/tools/download_tagesschau_livestream.sh
17 20 * * * killall php download_tagesschau_livestream.sh

Die flv-Dateien sind Flash Videos - ein Relikt aus der Vergangenheit. In dem Container-Format Flash Video befindet sich ein MP4-Video mit 1280 x 720 Bildpunkten, das sich auf einem Computer mit VLC oder dem Programm mplayer abspielen läßt. Auf einem Smartphone lassen sich diese Video-Dateien ebenfalls abspielen - zum Beispiel auf einem Samsung Galaxy S3 mit dem VLC-Player für Android. In den Einstellungen von VLC muss allerdings die Hardware-Beschleinigung deaktiviert werden, damit das Video richtig dekodiert werden kann. Wer ein noch älteres Smartphone als das Galaxy S3 besitzt, kann beim Programm AdobeHDS den Parameter "--quality" mit einer geringeren Video-Qualität benutzen, damit weniger Rechenleistung beim Dekodieren erforderlich ist. Auf modernen Smartphones sollte das Abspielen der HD-Videos hingegen kein Problem sein.

Falls du Fragen hast, dann kannst du die Kommentar-Funktion benutzen.

Kommentar schreiben