DVB-C streaming über VLC zu Android

Worum geht es ...

Die Aufgabe war, Live-TV von einer DVB-C Quelle im lokalen WLAN auf ein Android-Handy zu streamen. Auf dem Smartphone läuft Android in der Version 2.1 und der Empfang hat testweise auch mit einem Nokia 5800 mit Symbian S60 5th als Betriebssystem funktioniert.
Letztendlich kann natürlich auch jeder andere Videostream auf dem folgenden Weg zum Handy gelangen ...

Was braucht man?

  • Einen Rechner, auf dem der TV-Empfang und das transkodieren, also das umwandeln des DVB-Signals in ein für Handys verständliches Format, stattfindet. Dieser Computer wird auch als Server bezeichnet. Auf dem Server läuft in diesem Beispiel Windows 7. Es sollte aber auch mit anderen Windows-Versionen laufen.
  • Es muss natürlich eine TV-Karte an den Computer angeschlossen sein, von dem der Stream aus verteilt wird. Dabei müssen in Windows sogenannte BDA-Treiber für die entsprechende Karte installiert sein. Darüber können dann auch andere Anwendungen wie VLC Media Player auf die TV-Karte zugreifen.
  • Den Open Source VLC Media Player, der kostenlos ist. Die genutzte Version ist die 1.1.4. Will man eine bestehende Installation nicht verändern, so kann man eine portable Version nutzen und dort Anpassungen vornehmen, die dann nur in der Version gültig sind
  • Für die Steuerung vom Handy aus ein verändertes http-Interface
  • Etwas Zeit ...

VLC Player einrichten

Nachdem man den VLC Player installiert hat, sind ein paar Einstellungen vozunehmen:
Picture
Links unten muss man "Alle" markieren, damit man die nötigen Einstellungen vornehmen kann.
Picture
Unter Hauptinterfaces wird der HTTP-Server aktiviert - er dient der Fernsteuerung. Klickt man auf die HTTP-Einstellungen, so kann man angeben, auf welchen Netzwerkkarten das Interface verfügbar sein soll. In diesem Beispiel nehme ich "0.0.0.0:8080". Das heißt, der Zugriff ist nicht eingeschränkt, jeder Computer kann darauf zugreifen, und das HTTP-Interface soll auf dem Port 8080 laufen.
Picture
Picture
Nun geht es um den Vorgang des Transkodierens. Unter der Streamausgabe kann man eine Befehlskette eintragen, die dann auf jeden Stream angewendet wird, den VLC startet.
Picture
Der Code sieht wie folgt aus:

#duplicate{dst="transcode{vcodec=h264,vb=256,fps=25,venc=x264{profile=baseline,keyint=50,bframes=0,no-cabac,ref=1,vbv-maxrate=256,vbv-bufsize=128,aq-mode=0,no-mbtree,partitions=none,no-weightb,weightp=0,me=dia,subme=0,no-mixed-refs,no-8x8dct,trellis=0,level1.3},vfilter=canvas{width=320,height=240,aspect=320:240,padd}soverlay,acodec=mp4a,ab=64,channels=1,samplerate=44100,audio-sync}:rtp{sdp=rtsp://0.0.0.0:5554/stream.sdp,caching=2000}"}

Er muss in einer fortlaufenden Zeile ohne Leerstellen in das Feld kopiert werden.

Dort sind eigentlich alle wichtigen Parameter enthalten, die beispielsweise die Audio- und Videoqualität und das Format definieren. Auch der Name des Streams ist dort angegeben, unter dem man ihn später aufrufen kann. Man kann problemlos mit den Einstellungen herumexperimentieren - die Erläuterungen dazu findet man im VideoLAN Wiki.
Die Ausgabe des Streams wird dann unter folgender Adresse abzurufen sein: "rtsp://0.0.0.0:5554/stream.sdp".Wobei der Abruf dann über die IP-Adresse des Servers erfolgt. Also z.B. "rtsp://192.168.178.22:5554/stream.sdp".

Zuletzt wird noch eine Wiedergabeliste eingetragen, die vom VLC Player direkt nach seinem Start geladen und auch abgespielt wird:
Picture

Autostart von VLC

Will man, dass der Player automatisch beim hochfahren des Servers startet, hat man die Möglichkeit den VLC Player als Dienst unter Windows anzumelden. Noch einfacher ist es, wenn man ihn in den Autostart Ordner von Windows kopiert.

Wiedergabeliste

Picture
In dieser Wiedergabelsite kann natürlich jede Art von Video-Datei (letztlich auch Audiodateien oder sogar andere Streams) drin stehen, die dann auf das Handy gestreamt werden.

Hier geht es um DVB-C, so dass als Beispiel ein paar Kabelsender eingetragen sind.

Anzumerken ist, dass die Playlist direkt nach dem Start des VLC-Players mit dem abspielen der Sender beginnt. Das soll in diesem Fall nicht passieren, weil, je nach Bedarf, noch andere Programme auf die DVB-C-Schnittstelle zugreifen sollen. Spielt VLC gleich einen Kabelsender ab, so ist der Tuner belegt und kein anderes Programm kann darauf zugreifen.
Das läßt sich mit dem 'Dummy'-Eintrag vermeiden. Der spielt erstmal 999999 Sekunden, bis mit dem Sender ARD auf den Tuner zugegriffen werden würde.

Das HTTP-Interface

Als Anpassung an mobile Endgeräte wurde ein anderes als das original VLC-http-interface benutzt . Ursprünglich für die Nutzung mit einer Dreambox geschrieben, ist es aber auch für diese Zwecke gut zu gebrauchen. An ein paar Stellen wurde 'Dreambox' durch 'DVB-C' ersetzt. Ansonsten ist es diese ZIP-Datei: http-Interface (created by Lucas Steigmeyer).
Picture
Installiert wird das neue Interface als Ersatz des Alten in den Ordner 'http' innerhalb des 'VLC'-Verzeichnisses. Dazu kann man einfach den ursprünglichen Ordner 'http' in 'http_old' umbenennen und einen neuen Ordner 'http' erstellen, in den dann der Inhalt der ZIP-Datei kommt.
Ist alles korrekt konfiguriert, kann man auf dem Server unter der Adresse "127.0.0.1:8080" das neue Interface erreichen. Ist die Firewall korrekt gesetzt, dann kann es auch von einem anderen Rechner/Handy aus abgerufen werden. Dafür muss man die IP-Adresse des Servers im lokalen Netz aufrufen: Zum Beispiel "http://192.168.178.56:8080" ohne Anführungszeichen in den Browser eingeben.

In der Wiedergabeliste kann dann ein Sender ausgewählt werden, der dann von VLC gestreamt wird. Über den Link 'stream now' wird der Stream geöffnet und sollte dann zumindest im lokalen Netzwerk auf dem Handy von dem entsprechenden Media Player abgespielt werden.
Das Ganze läßt sich mittels Portfreigaben im Router natürlich im Prinzip auch von außerhalb nutzen.