Schon länger hielt ich Ausschau nach einer Videorecorderlösung, die meine Anforderungen erfüllt.
Mit dem Raspberry Pi als PVR bin ich recht zufrieden. Ich sehe dabei die folgenden Features.

– verbraucht kaum Energie (meine Version hängt ohne eigenes Netzteil am USB Port des Routers)
– kann videos streamen
– kann über eine Weboberfläche (über Internet und Intranet) gesteuert werden.
– speichert Videoaufnahmen direkt aufs NAS.

Die Lösungen mittels OpenELEC sagten mir jedoch nicht so zu, da der kleine Raspberry mit dem ständig laufenden Graphik-Frontend doch so seine Mühe hat. Der Prozessor war bei mir im Leerlauf so zu 80% – 100% ausgelastet. Deshalb habe ich versucht, eine Lösung ohne weitere Mediacenter-Komponenten zu bauen.

Ich versuche mal die Schritte von Anfang an aufzulisten, obwohl Einiges zur Ersteinrichtung des Raspberry Pi gehört. Aber es kann ja nicht schaden, das hier noch einmal kurz zusammenzufassen. Für alle hier beschriebenen Schritte gilt natürlich „auf eigene Gefahr und Verantwortung“. 😉
Also, legen wir los :

Als erstes wird das Image von http://www.raspberrypi.org/downloads installiert. Zur Zeit (der Erstellung dieser Anleitung) ist das die Version Raspbian „wheezy“ (2013-02-09-wheezy-raspbian.zip)
Als Speicherkarte sollte eine 2GB Karte oder eine größere Karte benutzt werden.
Das Aufspielen des Image wird mit Hilfe des Programms Win32DiskImager (http://sourceforge.net/projects/win32diskimager/) erledigt. Auf die Einzelheiten hierzu muss hier wohl nicht eingegangen werden. Hierzu gibt es etliche Quellen im Netz. Und wer schon einen Raspberry Pi hat, der wird wissen, was hier zu tun ist.

Dann die Karte in den Raspberry einlegen und das System starten. Beim Raspi ist zunächst DHCP eingestellt (es wird also ein DHCP-Server wie DSL-Router oder ähnlich benötigt.) Da beim booten nun zunächst die Adresse unbekannt ist sollte der RasPi per Direktanschluß benutzt werden.
Bei Start zeigt der RasPi die verwendete IP-Adresse an. (My IP address is ….)

Da nun der RasPi eine englische Spracheinstellung hat, sollte diese geändert werden. Dies kann in der Erstkonfiguration erledigt werden.

sudo raspi-config

„change locale“ auswählen. Für meine Konfiguration habe ich folgende Kodierungen eingestellt:

[*] de_DE ISO-8859-1
[*] de_DE.UTF-8 UTF-8
[*] de_DE@euro ISO-8859-15
[*] en_GB.UTF-8 UTF-8

Default locale for the system environment:
de_DE.UTF-8 UTF-8

Als nächstes kann man die Speicherkonfiguration ändern.
Da ich auf jegliche Graphiknutzung verzichte, habe ich hier die kleinstmögliche Größe von 16M für den Graphikspeicher (GPU Speicher) eingestellt.

Weitere Einstellungen:

Set Timezone -> Geographic area : europe
Timezone -> Berlin

und dann kann (und sollte) man noch das Standardpasswort ändern.

Nach diesen Einstellungen hat mein RasPi noch immer nicht das deutsche Tatstaturlayout verwendet.
Dies habe ich in der Datei /etc/default/keyboard eingestellt, die Datei kann man mit dem Editor nano ändern.

sudo nano /etc/default/keyboard

hier wird dann in der Zeile XKBLAYOUT der Wert „gb“ auf „de“ geändert.
———————-
IP-Adresse :
Es ist eigentlich kein Problem, wenn der RasPi eine DHCP Adresse verwendet, aber wenn man sich, wie ich, lieber in einer SSH-Sitzung anmeldet, dann ist es von Vorteil, wenn man eine statische Adresse benutzt. Dies lässt sich in der Datei /etc/network/interfaces ändern. Die Originaldatei kann man per

sudo cp /etc/network/interfaces /etc/network/interfaces.bak

sichern. und dann mit


sudo nano /etc/network/interfaces

editieren. Da ich das private Netz 192.168.25.0 verwende, sieht die Datei hier so aus:


auto lo

iface lo inet loopback
iface eth0 inet static
address 192.168.25.86
network 192.168.25.0
netmask 255.255.255.0
broadcast 192.168.25.255
gateway 192.168.25.250

allow-hotplug wlan0
iface wlan0 inet manual
wpa-roam /etc/wpa_supplicant/wpa_supplicant.conf
iface default inet dhcp

———————-
Nun ist es an der Zeit, den TV-Empfang einzurichten.
Wer hier einen Empfänger hat, der direkt unterstützt wir, der hat Glück. In meinem Fall war es etwas holprig, aber letztlich doch erfolgreich, einen vorhandenen DVB-T Stick zu nutzen. Das Gerät trug keine brauchbare Bezeichnung. Nun gut.

Nach dem Anschliessen des Sticks kann sich mit folgendem Kommando mal die gefundenen USB-Geräte anzeigen lassen :

lsusb

ergibt:

Bus 001 Device 004: ID 048d:9135 Integrated Technology Express, Inc. Zolid Mini DVB-T Stick

Das verrät doch schon mal Einiges. Es wurde ein DVB-T Stick gefunden und es ist ein ITE 9135 Chip darauf. (Einfach mal nach der ID googlen oder die ID mal auf dieser Seite suchen http://linuxtv.org/wiki/index.php/DVB-T_USB_Devices. Dort finden sich eventuell weitere Informationen für den speziellen Fall.

Wenn noch nicht klar ist, welcher Stick es ist, könnte auch in den Kernel-Messages etwas brauchbares stehen:

dmesg | grep dvb

Hier zeige ich die Vorgehensweise für den ITE 9135. (Für andere Sticks sieht das natürlich anders aus.)

Verzeichnis erstellen und Firmware-Files vom Hersteller holen

sudo mkdir /usr/local/ite9135
cd /usr/local/ite9135/
sudo wget http://www.ite.com.tw/uploads/firmware/v3.6.0.0/dvb-usb-it9135.zip

Die Firmware auspacken und extrahieren:

sudo unzip dvb-usb-it9135.zip
sudo dd if=dvb-usb-it9135.fw ibs=1 skip=64 count=8128 of=dvb-usb-it9135-01.fw
sudo dd if=dvb-usb-it9135.fw ibs=1 skip=12866 count=5817 of=dvb-usb-it9135-02.fw

Dann die extrahierten Dateien nach /lib/firmware kopieren.

sudo cp dvb-usb-it9135-*.fw /lib/firmware

Nach einem Neustart sollte die Firmware dann gefunden werden.

dmesg | grep dvb
[ 6.034311] dvb-usb: found a 'ITE 9135 Generic' in cold state, will try to load a firmware
[ 6.690285] dvb-usb: downloading firmware from file 'dvb-usb-it9135-02.fw'
[ 7.072541] dvb-usb: found a 'ITE 9135 Generic' in warm state.
[ 7.083025] dvb-usb: will use the device's hardware PID filter (table count: 31).
[ 7.854316] dvb-usb: schedule remote query interval to 250 msecs.
[ 7.862735] dvb-usb: ITE 9135 Generic successfully initialized and connected.

Das sieht doch recht vielversprechend aus… 😉

———————-

So, nun zur Installation von Tvheadend.
Projekt Home ist hier : https://www.lonelycoder.com/redmine/projects/tvheadend. Im Unterschied zu fertigen Images wie z.B. OpenELEC, wo Tvheadend schon vorinstalliert ist, müssen wir es uns selbst installieren. Die Sourcen gibt’s bei github, deshalb müssen wir uns zunächst mal GIT auf dem Raspberry installieren.


sudo apt-get update
sudo apt-get install git git-core

Dann gehen wir auf den Pfad /usr/local

cd /usr/local

Und dort rufen wir den folgenden Befehl auf um die tvheadend Dateien zu holen:


sudo git clone git://github.com/tvheadend/tvheadend.git

GIT ist so freundlich, ein Unterverzeichnis namens tvheadend zu erstellen und dort die Files zu deponieren. Tvheadend verfügt über ein Konfig-Programm, welches wir schonmal aufrufen können.


cd tvheadend
./configure

Wir erhalten eine Ausgabe wie diese hier:

Checking support/features
checking for cc execinfo.h ...     ok
checking for cc -mmmx ...          fail
checking for cc -msse2 ...         fail
checking for cc getloadavg ...     ok
checking for cc atomic64 ...       fail
checking for py module gzip ...    ok
checking for bzip2 ...             ok
checking for pkg openssl ...       fail
checking for pkg libssl ...        fail
ERROR: SSL development support not found

Einige dieser „fails“ sind nicht weiter schlimm, mmx und msse2 z.B. sind hardwareabhängig und auf der CPU des Raspberry Pi einfach nicht verwendbar. Ist aber nicht schlimm, Tvheadend können wir trotzdem compilieren. In einigen Fällen (libssl und openssl) können wir die Probleme aber auflösen.


sudo apt-get install libcurl4-openssl-dev

Wenn danach noch Probleme mit dem Punkt fetching dvb-scan files ... auftreten, dann empfehle ich den folgenden Aufruf:


sudo ./configure --disable-avahi --disable-dvbscan
sudo ./configure --disable-avahi

Da ich avahi nicht benötige, habe ich es hier nicht eingerichtet.

Das hat bei mir die Probleme gelöst.
Weitere Informationen ggf hier :
Als nächstes können wir Tvheadend compilieren:

sudo make install

Dauert so etwa 7 – 8 Minuten.

Danach kann man ja mal einen Versuch unternehmen, tvheadend das erste Mal zu starten.

./build.linux/tvheadend

Im Browser dann http://YOURIP:9981 eingeben, wobei „YOURIP“ natürlich durch die IP-Adresse des Pi zu ersetzen ist. Hier noch ein Tipp, beim ersten Start von tvheadend ist noch kein Benutzer angelegt – zunächst sollte man ohne Benutzernamen/Passwort auf die Weboberfläche kommen und dann einen Benutzer unter Configuration->Access Control anlegen. Falls später mal Probleme bei der Anmeldung gibt kann man tvheadend mit der Option „-C“ starten, um die Userkontrolle temporär auszuschalten. Bei Zugriff von Ausserhalb des eigenen Netzes sollte natürlich eine Nutzerkontrolle stattfinden.

Um automatisch ein Share im Netz bei Start des Raspberry zu mounten habe ich ein Verzeichniss qss in /mnt (sudo mkdir /mnt/qss) erstellt und einen Eintrag in der Datei /etc/fstab gesetzt:

sudo nano /etc/fstab

Der Eintrag lautet etwa so (Sharename, User, Password etc anpassen)


//192.168.25.26/Public /mnt/qss cifs username=myname,password=mypass,uid=tvheadend,gid=tvheadend

Ist der Eintrag gemacht, dann kann ein Verzeichnis des entsprechenden Shares im TVheadend angegeben werden (Configuration->Digital Video Recorder->Recording system path)

So nun muss noch Tvheadend für den Autostart vorbereitet werden, denn es soll ja beim Start des Raspberry Pi ebenfalls starten:

Hierzu die User und Gruppe für Tvheadend anlegen:

sudo groupadd tvheadend
sudo useradd -g tvheadend -G video -m tvheadend

Ein Startscript erstellen (in Anlehnung an ):
nano /etc/init.d/tvheadend

Den folgenden Inhalt in das Startscript kopieren (alles zwischen den Snip-Markierungen:
—————————–snip——————

#!/bin/bash

TVHNAME="tvheadend"
TVHBIN="/usr/local/bin/tvheadend"
TVHUSER="tvheadend"
TVHGROUP="tvheadend"

case "$1" in
start)
echo "Starting tvheadend"
start-stop-daemon --start --user ${TVHUSER} --exec ${TVHBIN} -- \
-u ${TVHUSER} -g ${TVHGROUP} -f -C
;;
stop)
echo "Stopping tvheadend"
start-stop-daemon --stop --quiet --name ${TVHNAME} --signal 2
;;
restart)
echo "Restarting tvheadend"

start-stop-daemon --stop --quiet --name ${TVHNAME} --signal 2

start-stop-daemon --start --user ${TVHUSER} --exec ${TVHBIN} -- \
-u ${TVHUSER} -g ${TVHGROUP} -f -C

;;
*)
echo "Usage: tvheadend {start|stop|restart}"
exit 1
esac
exit 0

—————————–snip——————

Das Startscript muss nun noch ausfürbar gemacht werden und in der Bootprozedur hinterlegt werden:


sudo chmod 755 /etc/init.d/tvheadend
sudo update-rc.d tvheadend defaults

So, jetzt sollte eigentlich alles soweit erledigt sein.
Viel Spass, mit dem hoffentlich nun funktionierenden Tvheadend.

« »