        
                        VDR Streamplayer


Geschrieben von:             Udo Richter <udo_richter@gmx.de>
Projekt's Homepage:          http://urichter.cjb.net/vdr
Kompatibilität:              VDR-1.2.6 bis VDR-1.3.20 sollte funktionieren
Siehe Datei COPYING für Lizenz-Informationen



Über
--------------------------------------------------------------------------
Streamplayer ist ein Plugin, um Netzwerk-Streams mit VDR zu empfangen und 
anzuzeigen, wodurch VDR zum Streaming-Client wird. Das Plugin ist 
absichtlich auf DVB-Kompatible MPEG1/2-Streams beschränkt, die ohne große
CPU-Last angezeigt werden können. Ein möglicher Stream Server ist der VLC
media player (http://www.videolan.org/), ein anderer ist der HTTP Server
des Streamdev Plugins.


Unterstützte Protokolle
--------------------------------------------------------------------------
Derzeit sind zwei Protokolle implementiert:

-HTTP Streaming fordert den Video-Stream von einem Web-Server an. HTTP
 basiert auf TCP, einem zuverlässigen, fehlertoleranten Internet-
 Protokoll, das eigentlich schlechter für Echtzeit-Anwendungen geeignet 
 ist. Andererseits ist es toleranter auf schwierigen Netzwerken.

-UDP Streaming lauscht auf alle UDP-Pakete, die auf einem UDP-Port 
 empfangen werden, unabhängig davon, woher sie kommen. Da UDP keine 
 verlorengegangenen Pakete erneut anfordert, erholt sich UDP sehr schnell
 von Datenverlusten in dem Teile des Videos übersprungen werden. UDP ist 
 das einzige Format, das Multicast-Übertragungen unterstützt.

 Fals der Computer direkt mit dem Internet verbunden ist, sollte der UDP-
 Port geblockt werden, sonst kann jeder im Internet den Fernseher 
 übernehmen. ;)


Unterstützte Formate
--------------------------------------------------------------------------
Derzeit akzeptiert das Plugin nur Mpeg Transport Streams (TS) mit darin 
enthaltenen Mpeg1/2 Video Streams. Der Video-Stream muss eine DVB-
kompatible Auflösung von {720,704,640,512,480,352}x{576,480,288,240} 
haben. Nicht alle Kombinationen werden funktionieren. Basierend auf der
Framerate wird die DVB-Karte zwischen PAL und NTSC umschalten. Es ist eine
gute Idee, die Zeilenzahl 240 und 480 zusammen mit 30fps für NTSC-Ausgabe
zu benutzen, und die Zeilenzahl 288 und 576 mit 25fps für PAL.


Installation
--------------------------------------------------------------------------
Genau wie jedes andere Plugin. Entpacken in das PLUGINS/src Verzeichnis
und anlegen eines symbolischen Links: 
ln -s streamplayer-x.x.x streamplayer
Danach kann man entweder 'make plugins' im VDR-Verzeichnis ausführen, oder
einfach 'make' im Streamplayer-Verzeichnis.


Benutzung
--------------------------------------------------------------------------
Nachdem der Hauptmenü-Eintrg des Plugins ausgewählt wurde, öffnet sich ein
Lesetzeichen-ähnlicher Dialog. Streamplayer verwendet ein URL-ähnliches 
konzept, um Netzwerk-Streams auszuwählen. Die erste Zeile zeigt die zu 
letzt benutzte URL an, und kann bearbeitet werden. Darunter ist eine Liste
von Lesezeichen. Die Einträge können mit 'Ok' direkt abgespielt werden, 
'Rot' ermöglicht das Bearbteiten des Eintrags, 'Grün' zeigt den gleichen
Dialog zum Anlegen eines neuen Eintrags, und 'Blau' lädt das ausgewählte
Lesezeichen in die obere Eingabezeile für weitere Bearbeitung.

Die Lesezeichen-Datei kann auch bearbeitet werden, in der Datei
/video/plugins/streamplayer-bookmarks.conf (oder wo der Plugin 
Konfigurationsordner ist). Der Syntax ist Titel:URL.

Beim ersten Start wird eine kleine Lesezeichen-Liste angelegt. Der erste 
Eintrag lauscht auf UDP Port 1234, der gerne vom VideoLan Player genutzt 
wird, der zweite Eintrag verbindet zu einem Streamdev HTTP server auf dem
lokalen Rechner, und fordert Kanal 1 an.

UDP Protokoll:
Die URL für das UDP-Protokoll ist einfach "udp:xxxx", wobei xxxx die UDP 
Port Nummer ist, auf der gelauscht werden soll. Streamplayer lauscht nur,
die Video-Quelle muss dazu gebracht werden, die Daten an den VDR-Rechner
zu senden.

HTTP Protokoll:
Die URL für HTTP ist wie üblich: "http://server[:port]/path". Die Port-
Numer ist optional und wie üblich standardmässig 80.

Während des Abspielens zeigt 'Ok' ein kleines Status-Display, mit 
derzeitigen Status-Infos und der Empfangs-Datenrate.


Beispiele
--------------------------------------------------------------------------
Einige Beispiele, wie VLC media player und Streamplayer zusammen arbeiten:

Angenommen, source.local ist der Computer mit der Stream-Quelle, 
vdr.local ist der VDR-Computer. Falls im lokalen Netz kein DNS-Server 
läuft, können auch IP-Adressen verwendet werden. Natürlich können beide 
Adressen auch gleich sein, wenn nur ein Computer eingesetzt wird.


Falls das Video als video.mpg vorliegt, und im VCD/SVCD/DVD-Format ist,
kann das Video direkt gestreamt werden.
Zum Abspielen über HTTP streaming muss VLC wie folgt gestartet werden:

  vlc video.mpg --sout "#std{access=http,mux=ts,url=:1234}"

Im Streamplayer muss diese URL benutzt werden:
 
  http://source.local:1234/
  
Das ist alles.


Falls das Video als UDP-Stream gesendet werden soll:

  vlc video.mpg --sout "#std{access=udp,mux=ts,url=vdr.local:1234}"

Diesmal wird die Adresse des VDR-Computers verwendet. Im Streamplayer
kommt diese Adresse zum Einsatz:

  udp:1234


Falls die Quelle nicht mpeg1/2 kompatibel ist, kann das Video umkodiert 
werden:

  vlc video.avi --sout "#transcode{vcodec=mpgv,vb=4000,acodec=mpga,ab=192}
  :std{access=http,mux=ts,url=:1234}"

Um eine DVB-kompatible Auflösung zu erreichen, kann man die Größe 
anpassen:

  vlc video.avi --sout "#transcode{vcodec=mpgv,vb=4000,acodec=mpga,ab=192,
  width=720,height=576}:std{access=http,mux=ts,url=:1234}"

Dummerweise gibt es ein Problem: Die DVB-Karten erwarten 4:34 
Videomaterial, alle 16:9 oder ähnliche Quellen müssen mit schwarzen Balken
auf 4:3 Format aufgefüllt werden, und dieses Auffüllen ist derzeit mit VLC
nicht möglich. (Umschaltung auf 16:9 Anamorphe Ausstrahlung wäre denkbar,
aber ich kann dazu nichts sagen.) Entweder, das Videomaterial muss auf 4:3
herunter geschnitten werden (nicht funktionsfähig in 0.8.0 und 0.8.1), 
oder man muss mit gestrecktem Video leben.
Ich arbeite an einem Patch für VLC, der beim Stream-Transkodieren das 
Beschneiden repariert, und das Auffüllen ermöglicht, so dass alle Formate
auf 4:3 gebracht werden können.


Zukunfts-Pläne
--------------------------------------------------------------------------
Dies sind keine Versprechen, eher eine Sammlung von Dingen, die sinnvoll
erscheinen. Keine Garantie, ob oder wann diese Dinge Realität werden.

-Lokalisierung
-Verbessertes OSD- und Nachrichtenmanagement
-Löschen/Verschieben von Bookmarks
-RTP Protokoll zum Streamen
-RTSP Protokoll, um die Wiedergabe des Servers zu steuern
-PS/PES Stream-Formate
-Verbesserte PID-Erkennung, Auswertung von PAT-Tabellen etc.
-Dynamische PID-Wechsel während des Abspielens?
-Unterstützung reiner Audio-Streams
-Unterstützung mehrerer Audio-Streams
