Die Fragen, die während der Projektphase aufgetreten sind findet ihr im MLD-Forum
Hier wird beschrieben, wie ihr euch einen Headless-Server bastelt auf Grundlage eines Raspberry PI. Das Ziel wird sein, ein robuster, stromsparender VDR Server, der im Keller oder Dachboden liegen kann und euer LAN mit den Streams versorgt. Wenn der Server läuft, werde ich noch ein paar mögliche Clientlösungen, die ich selber einsetze, beschreiben.
Die Anforderungen an das Projekt sind:
Da der Raspberry im Speicher betrieben wird, soll die Festplatte für die Aufnahmen an einem andren Ort sein. Wenn eine Fritzbox vorhanden ist, bietet sich diese natürlich an. Die Fritzbox kann kein NFS mit original Firmware von AVM. Entweder muss es ein NAS sein, welches NFS kann oder eine modifizierte Firmware.
Ich habe mich zuerst dafür entschieden, das MLD-4.0.0-rpi_simple_2014.03.29-51 zu benutzen. In dem Simple Archiv sind nur die nötigsten Pakete dabei und Netzwerkunterstützung.
Der Zusammenbau stellt kein Problem dar, alle Komponenten passen einwandfrei. Der große der drei Kühlkörper wird auf den SOC geklebt, das ist der große Chip in der Mitte. Ein kleiner Kühlkörper kommt auf den Chip für den Ethernet / USB -Controller Chip, direkt hinter den USB-Anschlüssen. Der dritte Kühlkörper kommt auf den Spannungswandler zwischen dem HDMI Anschluss und dem USB-Power Anschluss. Der Kühlkörper ist eigentlich etwas zu groß, das macht aber nichts, er steht ein bisschen an den Rändern über. Danach wird der RasPi in das Gehäuse gepackt.
Die SD-Karte wird an einem PC mit FAT32 formatiert. Das Image haben wir uns oben herunter geladen, jetzt wird jetzt entpackt. Der Inhalt des Archives sollte dann ungefähr so aussehen:
Den entpackten Inhalt dieses Archives KOPIERT ihr auf die SD-Karte. Dazu braucht ihr keine Software (wie unetbootin oder yumi o.Ä.). Das funktioniert nur mit SD-Karten, die eine FAT32 Partition enthalten. Unter Windows ist das immer so, jedoch wird die Installation später die Partitionen verändern, so dass ihr dafür sorgen müsst, dass bei einer evt. neuen Installation nach diesem Prinzip auf eine bereits benutzte SD-Karte wieder nur die eine FAT32 Partition ist.
Die SD-Karte stekt ihr jetzt in den RasPi. Verbindet den RasPI mit eurem LAN. Steckernetzteil anschließen. RasPi bootet.
Die TerraTec Cinergy S2 USB hat eine eigenen Stromversorgung, für diesen Receiver braucht man nicht zwingend einen aktiven USB-Hub.
Der RasPi ist so konfiguriert, dass er per DHCP eine Adresse zugewiesen bekommt. Schaut auf eurem Router nach, welche das ist. Bei einer FritzBox findet ihr das in dem Menu “Heimnetz - Netzwerk”, wenn dort ein PC mit dem Namen “MLD_SERVER” steht, findet ihr seine IP rechts davon.
Damit ihr auf das MLD auf dem RasPi drauf kommt, benutzt ihr jetzt einen SSH-Client (der Zugang via SSH ist auf dem Image bereits voraktiviert), PuTTY ist eine gute Wahl. In der “PuTTY Configuration” braucht ihr nur die IP Adresse in das Feld “Host Name (or IP adress)” eintragen und auf “open” klicken. Bei der ersten Verbindung müsst ihr den Serverkey bestätigen, danach seht ihr im Terminalfenster:
login as:
Der Benutzer, mit dem ihr euch einloggen könnt ist “root”, das Passwort ist auch “root”
login as: root root@192.168.222.61's password: root
BusyBox v1.22.1 (2014-03-07 14:28:47 CET) built-in shell (ash) Enter 'help' for a list of built-in commands. MLD>
Der erste Schritt ist, dass ihr das Image (aktuell läuft das alles aus dem Speicher) auf die SD-Karte installiert. Das macht ihr über das Webinterface oder auf der Kommandozeile mit dem Befehl
MLD> install start installation partitioning disk mmcblk0 format disk mmcblk0p1 format disk mmcblk0p2 install system on mmcblk0p2 write boot files on mmcblk0p1 Installation completed
Dann hat alles funktioniert. Also dann Reboot und das neue System starten.
Als nächstes verbindet ihr euch auf die Weboberfläche mit http://eure-IP
(oder wenn z.B. eine Fritzbox verwendet wird per http://MLD
)
Hier stellen wir ein paar Parameter ein, diese werden in der Datei rc.config gespeicher. Falls jemand weiß, wie ich die Konfiguration über die Kommanozeile neu einlese, soll er das bitte hier dokumentiern, so dass man das WebIf nicht mehr braucht
Schaltet DHCP benutzen aus und gebt dem Raspi eine feste IP-Adresse. Das war es, das WebIf brauchen wir jetzt nicht mehr. Alternativ kann auch in einigen Routern eingestellt werden, dass dem RPI eine Feste IP Adresse zugewiesen werden soll.
Tipp: Um mal schnell eine zweite temporäre IP-Adresse für euer MLD zu benutzen (weil vielleicht das NAS in einem anderen Netz ist) könnt ihr das über die Kommandozeile mit dem Befehl machen:
ifconfig eth0:tempIP 192.168.1.1 up
Wir brauchen ein paar Pakete und andere fliegen raus:
opkg remove webserver opkg remove psplash opkg install tools opkg install mc opkg install ntp-client opkg install dvb opkg install nfs-client opkg install vdr opkg install vdr-plugin-streamdev-server opkg install vdr-plugin-epgsearch restart vdr
Wenn ihr VDR installiert, müsst ihr noch die für euch passende Kanalliste aussuchen, ich wähle: DVD-S-S19.2E-Astra-FTA-DE-HD
Wer das OSD benutzen möchte, sollte noch zusätzlich vdr-plugin-control installieren. Das ermöglicht die Ausgabe des OSD auf einem Telnet-Terminal - der Standardport ist 2002.
Optional, wenn ihr einen Monitor und Tastatur an eurem Raspi habt, solltet ihr noch das vdr-plugin-skincurses installieren, dann lässt sich das VDR OSD auf Konsole 5 benutzen.
Das Herunterfahren des VDR kann man verhindern (24 Stundenbetrieb), indem ihr den VDR stoppt und in der Datei /etc/vdr/setup.conf die Werte auf 0 ändert.
MinEventTimeout = 0 MinUserInactivity = 0
Danach den VDR wieder starten.
Zum Streamdev Server testen, gebt ihr die Adresse des RasPi in einen Browser ein und den Port 3000. Dort solltet ihr nun die Kanalliste sehen.
http://meine-IP-Raspi:3000
Klickt mit rechts auf einen Sender und kopiert euch die URL in die Zwischenablage. Mit VLC könnt ihr schon mal schauen, ob ein Fernsehbild gestreamt wird. Dazu öffnet ihr VLC und klickt im Menu auf “Medien” –> “Netzwerkstream öffnen…”, dort fügt ihr die URL aus der Zwischenablage ein. Kommt ein Bild? → Dann ist alles Gut.
Jetzt könnt ihr testen, ob eine Aufnahme auch tatsächlich auf dem NAS gespeichert wird. Dazu könnt ihr temporär die NFS-Freigabe direkt auf das VZ data mounten. Die Freigabe hier im Beispiel heißt “NFS”. “mount IP-Adresse-NAS:/Freigabenamen-NAS /mnt/data/tv” Bsp:
mount 192.168.1.2:/NFS /mnt/data/tv
Dann startet ihr eine Aufnahme, da wir ja keinerlei Frontend haben, machen wir das zum Testen direkt über SVDRP. Dazu könnt ihr auch Putty verwenden. Öffnet eine neue Sitzung. Der Host ist euer RasPi, der Port ist 6419 und das Protokoll RAW.
Mit dem Kürzel: NEWT wird ein neuer Timer erstellt:
1:19:4:2010:2150:51:50:Testaufnahme NAS:
aktiv:Kanalnummer:Tag_des_Monats:Startzeit:Endzeit:Priorität:Dauerhaftigkeit:Titel:
wird die auf dem NAS gespeichert, ist so weit alle OK und wir können das NAS in der /etc/fstab mounten. Dadurch wird das NAS automatisch beim Starten gemounted. Dazu die Zeile ganz unten in der /etc/fstab einfügen (z.B. mit mc und Datei bearbeiten):
192.168.1.2:/NFS /mnt/data/tv nfs rw 0 0
Momentan benutze ich AndroVDR unter Android - VDR-Manger wäre auch noch möglich, aber da finde ich das Plugin für MLD nicht.
Ihr könnt mit VLC so ziemlich überall Fernsehen, aber am besten ist das geeignet, wenn ihr mit einem Android Tablet schauen wollt. Ich empfehle euch VLC oder meiner Meinung besser, weil stabiler (aber nicht kostenfrei) vPlayer. Aufnahmen könnt ihr euch auch unter Android anschauen. Das Problem ist, dass die meisten Dateimanger die Aufnahmen im Netzwerk herunterladen wollen. Mit dem “Filemanger” könnt ihr sie aber auch streamen (da kommt der Dialog “öffnen mit…”) mit VLC oder vPlayer
Wer möchte, kann sich den Raspi auch übertakten, das bringt noch mal ein bisschen mehr Performance. Ich habe meinen mit 900 MHz und 32 MB GPU RAM laufen. Eigentlich sollte es möglich sein, der GPU nur 16 MB RAM zu zuordnen, funktioniert bei meinem aber nicht. In der Datei /boot/config.txt müssen dazu die Werte für arm_freq, core_freq und sdram_freq hinzugefügt werden und der Wert für gpu_mem angepasst werden. Hier ein Beispiel der config.txt:
#hdmi_mode=20 #hdmi_group=1 sdtv_mode=2 sdtv_aspect=3 disable_splash=1 gpu_mem=32 kernel=kernel cmdline=cmdline arm_freq=900 core_freq=450 sdram_freq=450
Ein HD-Stream (1280×720 - TerraTec Cinergy S2 USB)
Mem: 167196K used, 311840K free, 0K shrd, 804K buff, 73796K cached CPU: 15% usr 23% sys 12% nic 24% idle 0% io 0% irq 23% sirq Load average: 0.71 0.49 0.51 3/87 4665
Ein SD Stream (720×576 TerraTec Cinergy S2 USB)
Mem: 161528K used, 317508K free, 0K shrd, 804K buff, 73740K cached CPU: 2% usr 9% sys 2% nic 80% idle 0% io 0% irq 5% sirq Load average: 0.02 0.23 0.45 2/88 4661
Eine HD Aufnahme (1280×720 TerraTec Cinergy S2 USB)
Mem: 204540K used, 274496K free, 0K shrd, 804K buff, 98084K cached CPU: 13% usr 42% sys 1% nic 24% idle 0% io 0% irq 18% sirq Load average: 1.16 0.60 0.53 3/87 4678
Eine SD Aufnahme (720×576 TerraTec Cinergy S2 USB)
Mem: 203788K used, 275248K free, 0K shrd, 804K buff, 97536K cached CPU: 6% usr 17% sys 2% nic 61% idle 0% io 0% irq 11% sirq Load average: 1.10 1.10 0.79 2/86 4693
1 Stream | 2 Streams | 1 Stream und 1 Aufnahme | 1 Aufnahmen | 2 Aufnahmen | Bildqualität | |
---|---|---|---|---|---|---|
USB 1: TerraTec Cinergy S2 USB 2: leer | 15% usr 23% sys 12% nic 24% idle 0% io 0% irq 23% sirq | — | — | 18% usr 25% sys 1% nic 33% idle 0% io 1% irq 18% sirq | — | sehr gut |
USB 1: TerraTec Cinergy S2 USB 2: TerraTec Cinergy S2 | bitte ergänzen | bitte ergänzen | bitte ergänzen | bitte ergänzen | bitte ergänzen | |
USB 1: TechoTrend-connect S2-3600 USB 2: leer | 21% usr 28% sys 23% nic 2% idle 0% io 0% irq 23% sirq | — | — | 14% usr 42% sys 2% nic 0% idle 0% io 0% irq 40% sirq | — | viele Artefakte |
USB 1: TechoTrend-connect S2-3600 USB 2: TechoTrend-connect S2-3600 | 29% usr 23% sys 6% nic 3% idle 0% io 0% irq 36% sirq | 33% usr 19% sys 0% nic 0% idle 0% io 0% irq 47% sirq | 25% usr 25% sys 0% nic 0% idle 0% io 0% irq 49% sirq | 21% usr 47% sys 1% nic 0% idle 0% io 0% irq 29% sirq | 31% usr 42% sys 0% nic 0% idle 0% io 0% irq 25% sirq | live TV schlecht 1. Aufn sehr gut |
1 Stream | 2 Streams | 1 Stream und 1 Aufnahme | 1 Aufnahmen | 2 Aufnahmen | Bildqualität | |
---|---|---|---|---|---|---|
USB 1: TerraTec Cinergy S2 USB 2: leer | 2% usr 9% sys 2% nic 80% idle 0% io 0% irq 5% sirq | — | — | 6% usr 17% sys 2% nic 61% idle 0% io 0% irq 11% sirq | — | sehr gut |
USB 1: TerraTec Cinergy S2 USB 2: TerraTec Cinergy S2 | bitte ergänzen | bitte ergänzen | bitte ergänzen | bitte ergänzen | bitte ergänzen | |
USB 1: TechoTrend-connect S2-3600 USB 2: leer | 18% usr 25% sys 1% nic 33% idle 0% io 1% irq 18% sirq | — | — | 11% usr 37% sys 1% nic 19% idle 0% io 0% irq 28% sirq | — | wenig Artefakte |
USB 1: TechoTrend-connect S2-3600 USB 2: TechoTrend-connect S2-3600 | 13% usr 33% sys 17% nic 7% idle 0% io 0% irq 27% sirq | 18% usr 38% sys 2% nic 0% idle 0% io 0% irq 40% sirq | 15% usr 41% sys 0% nic 0% idle 0% io 0% irq 43% sirq | 12% usr 52% sys 3% nic 0% idle 0% io 0% irq 31% sirq | 15% usr 44% sys 0% nic 0% idle 0% io 0% irq 40% sirq | live TV Artefakte |
Ich bekomme nicht alle HD Sender mit der TerraTec Cinergy S2 USB zum laufen Siehe Forum
Leider bin ich bis jetzt gescheitert, einen RasPi so einzurichten, dass eine ruckelfreie Benutzung mit mehr als einem Receiver möglich wäre. Dies liegt vermutlich daran, dass beim RasPi der Controller für USB und Ethernet auf einem Chip sind.
Mit der TechoTrend-connect S2-3600 USB sind viele Artefakte im Bild
Mein Eindruck ist, dass es sehr auf die Hardware (oder besser die Treiber für die Hardware) der verwendeten Receiver ankommt. Die TerraTec Cinergy S2 USB ist wesentlich Ressourcen schonender als die TechoTrend-connect S2-3600 USB. Falls ihr noch andere USB Receiver habt, wäre es klasse, wenn ihr mit ein und zwei Stück hier über die Performance berichten würdet.