Streamdev-plugin

Aus VDR Wiki
(Unterschied zwischen Versionen)
Wechseln zu: Navigation, Suche
(Einleitung)
(Rückgabewerte)
Zeile 74: Zeile 74:
 
Außerdem ist es möglich wie mit [[SVDRP]], bedingt über das VTP Protokoll mittels [[svdrpsend.pl]] zu kommunizieren wenn der Port des Streamdev-Servers angegeben wird.
 
Außerdem ist es möglich wie mit [[SVDRP]], bedingt über das VTP Protokoll mittels [[svdrpsend.pl]] zu kommunizieren wenn der Port des Streamdev-Servers angegeben wird.
  
===Rückgabewerte===
+
==VTP Antwort Codes==
 +
<pre>
 +
215  EPG Eintrag
 +
220  Letztes Kommando ok / Verbinung bereit
 +
221  Service schließt Sende-Kanal
 +
250  Angeforderte Aktion okay, beendet
 +
451  Angeforderte Aktion abgebrochen: lokaler Fehler bei der Bearbeitung
 +
500  Syntax-Fehler, unbekannter Befehl
 +
501  Syntax-Fehler in Parameter oder Argument
 +
550  Angeforderte Aktion nicht ausgeführt
 +
551  Angeforderte Aktion nicht ausgeführt, eine spätere Verbindung war nicht erfolgreich
 +
554  Transaktion fehlgeschlagen
 +
560  Live-Stream derzeit nicht verfügbar
 +
561  Capability not known
 +
562  Pid derzeit nicht verfügbar
 +
563  Stream derzeit nicht verfügbar
 +
</pre>
 +
 
 +
Die Antworten sind vom Format:
 +
 
 +
<pre>
 +
<Antwort Code><-|Leerzeichen><Text><newline>
 +
</pre>
 +
 
 +
Bei der letzten Zeile wird anstelle des - nach dem Antwort Code ein Leerzeichen gesetzt.
 +
 
 
===Befehle===
 
===Befehle===
  

Version vom 17. November 2009, 12:00 Uhr

Inhaltsverzeichnis

Bilder

Einstellungen


Installation

  • siehe allgemeine Plugin Installation

Konfiguration

Da es keine externen Abhängigkeiten gibt, gestaltet sich die Installation recht einfach. Es wird installiert, wie jedes andere Plugin. Eine Besonderheit besteht darin, dass beim Übersetzen gleich zwei Plugins entstehen, der Server und der Client. Gestartet werden sie mittels "-P streamdev-server" bzw. "-P streamdev-client".

Der Zugriff auf den Server wird durch die Konfigurations-Datei streamdevhosts.conf geregelt. Das Streamdev-Plugin bringt eine Beispieldatei mit, die folgendermaßen installiert wird:

cp $SOURCEDIR/VDR/PLUGINS/src/streamdev/streamdevhosts.conf.example $VDRCONFIG/plugins/streamdevhosts.conf

Wichtig: Anschließend muss die Datei editiert und an das eigene Netzwerk angepasst werden. Andernfalls ist kein Streaming möglich!

Danach muss man in der channels.conf des Clients die Programme hinzufügen, die vom Streaming-Server stammen und in Zukunft von dem 'virtuellen' DVB-Device empfangen werden sollen. Im einfachsten Fall genügt es, auf dem Client eine Kopie der channels.conf des Servers zu installieren. Empfangen Client und Server unterschiedliche Kanal-Quellen (z.B. Server: DVB-S, Client: DVB-T), so werden die Einträge aus der channels.conf des Servers einfach in die des Clients eingefügt.

Bei aktuellen Versionen müssen die Kanal-Nummern auf Client und Server nicht übereinstimmen. Es müssen auch nicht alle Kanäle des Server in die channels.conf des Clients aufgenommen werden.

Feste Zuordnung Kanal zu Gerät

Im Normalfall findet VDR selbst heraus, ob ein Kanal lokal oder über Streamdev empfangen werden kann. Eine feste Zuordnung ist aber mit Hilfe des CA-Feldes der Datei channels.conf möglich. Mit den Werten 1-4 wird der Kanal fest an die DVB-Karte mit der entsprechenden Nummer gebunden. Die Nummerierung der DVB-Karten untereinander ergibt sich aus der Reihenfolge in der die Treiber geladen wurden. Die Werte ab 5 werden Ein- und Ausgabegeräten zugeteilt, die von Plugins bereitgestellt werden. Hier ist die Reihenfolge in der die Plugins geladen werden entscheidend.

Beispiele:

  • VDR mit Full-featured-DVB-Karte und Streamdev-client: FF-Karte wird Nummer 1, Streamdev-client Nummer 5
  • VDR mit DXR3-Karte und Streamdev-client: Streamdev-client hat Nummer 6, da das Ausgabegerät DXR3 zuerst geladen wurde
  • VDR mit Streamdev-client und Softdevice-plugin: Streamdev-client bekommt Nummer 5, da Softdevice erst danach geladen wird

Die CA-ID der channels.conf kann über das Kanal-Menü oder direkt in der Datei angepasst werden:

Men & Motors:12421:h:S28.2E:27500:2345:2347:2346:5:7560:0:0:0

(Channels.conf von VDR 1.2.6 - die fünft'letzte' 5 bestimmt das fünfte Device)

Achtung: In aktuellen streamdev-CVS Versionen schert sich der Streamdev-client nicht um diese Einstellung. Wird also z.B. "5" für Streamdev-client konfiguriert, so wird der Kanal wie erwartet nicht über lokale DVB-Karten empfangen. Soll andersherum aber z.B. mit dem Wert "1" ein Kanal fest der ersten DVB-Karte zugeordnet werden, wird unter Umständen dennoch Streamdev zum Empfang genutzt. Der Patch "respect_ca.diff" aus dem "patches"-Verzeichnis der Streamdev-Quellen behebt dieses Problem.

FF-Karte als reines Ausgabegerät

Im Client kann eine Full-featured-DVB-Karte als Ausgabegerät verwendet werden. Deren Tuner muss dabei nicht zwangsweise in der Lage sein, Programme zu empfangen (z.B. wenn sich in der Nähe des Clients keine Anschlussmöglichkeit bietet). Für VDR ist dies allerdings nicht erkennbar und er versucht dennoch ein Programm über die FF-Karte zu empfangen. Nun könnte man die channels.conf editieren und dort jeden Kanal an die Gerätenummer des streamdev-clients binden. Einfacher ist es, VDR zu patchen:

Der LocalChannelProvide-Patch ermöglicht es, den Empfang über lokale DVB-Karten im OSD-Menü unter "Einstellungen --> OSD" zu deaktivieren. Zu finden ist der Patch im "patches"-Verzeichnis der Streamdev-Quellen.

Streamdev-Client Einstellungen

Kurze Erklärung für die Streamdev-Client Einstellungen:

streamdev-client.StreamFilters = 1
streamdev-client.SyncEPG = 0
streamdev-client.RemoteIp = 192.168.0.50
streamdev-client.RemotePort = 2004
streamdev-client.StartClient = 1


  • Filter Streaming (streamdev-client.StreamFilters):
    • Voraussetzung hierfür ist eine aktuelle streamdev-Version sowohl auf dem Client als auch auf dem Server (Mai 2007). Der Client wird mit allen relevanten Informationen versorgt, die der Server über die DVB-Karte empfängt (EPG, Kanal-Updates, ...).
  • EPG synchronisieren (streamdev-client.SyncEPG):
    • Die EPG-Sync Funktion von streamdev und das Epgsync-plugin machen im großen und ganzen das selbe. Streamdev synchronisiert aber im Vordergrund. Der VDR bleibt komplett blockiert bis der EPG-Sync abgeschlossen ist. Je nachdem wie groß die EPG-Datei auf dem Server ist, kann das dauern. Sofern man trotz Filter Streaming nicht auf eine Synchronisation verzichten kann oder will, empfiehlt sich daher die Verwendung des Epgsync-plugins.
  • IP-Adresse des Streaming-Servers (streamdev-client.RemoteIp)
  • VTP-Port auf dem Server (streamdev-client.RemotePort)
  • streamdev-client.StartClient (streamdev-client.StartClient)


VTP Protokoll

Dieser Abschnitt ist unvollständig, muss erweitert werden

Einleitung

Dieses Protokoll wurde erstellt für Video Übertragungen über das Netwerk und steht für Video Transfer Protocol. Es ist ein Text basierendes Protokoll wie z.B. FTP, und wird vom Klienten benutzt um mit einem Server zu kommunizieren welcher verschiedene Typen von Videodaten zur Verfügung stellt, wie z.B. Echtzeitübertragungen und Aufnahmen.

Die Grundkommunikation besteht aus kurzen Text Kommandos welche durch den Klient versendet werden und durch den Server in Form eines Nummerncodes und einer Klartextnachricht beantwortet werden. Alle Zeilen enden mit einem vollen CR/LF, was vorzugsweise als "\015\012" geschrieben wird, dies ist Plattformunabhängig. Denoch sollte ein Klient oder (vor allem) der Server auch auf "\n" Endungen reakieren können. Die MPEG daten werden über eine separate Datenverbindung übertragen.

Außerdem ist es möglich wie mit SVDRP, bedingt über das VTP Protokoll mittels svdrpsend.pl zu kommunizieren wenn der Port des Streamdev-Servers angegeben wird.

VTP Antwort Codes

215   EPG Eintrag
220   Letztes Kommando ok / Verbinung bereit
221   Service schließt Sende-Kanal
250   Angeforderte Aktion okay, beendet
451   Angeforderte Aktion abgebrochen: lokaler Fehler bei der Bearbeitung
500   Syntax-Fehler, unbekannter Befehl
501   Syntax-Fehler in Parameter oder Argument
550   Angeforderte Aktion nicht ausgeführt
551   Angeforderte Aktion nicht ausgeführt, eine spätere Verbindung war nicht erfolgreich
554   Transaktion fehlgeschlagen
560   Live-Stream derzeit nicht verfügbar
561   Capability not known
562   Pid derzeit nicht verfügbar
563   Stream derzeit nicht verfügbar

Die Antworten sind vom Format:

<Antwort Code><-|Leerzeichen><Text><newline>

Bei der letzten Zeile wird anstelle des - nach dem Antwort Code ein Leerzeichen gesetzt.

Befehle

Sonstiges

Probleme

Umschaltprobleme 1

Möglicherweise gibt es mit dem Streamdev-Server ein Problem: Man kann immer nur den Kanal anschauen welcher auch gerade auf dem VDR-Server eingestellt ist. Da viele dieses Problem haben, und ich hoffe dass jeder diese Stelle hier durchliest, hoffe ich, dass ich es vielen Leuten leichter mache.

Hintergrund: Dieses Problem tritt nur dann auf, wenn man nur eine DVB-Karte eingebaut oder mehrere Karten hat, diese aber alle mit Aufnahmen beschäftigt sind. Der VDR schaut auch immer einen Sender, auch wenn er nicht mal ein Ausgabedevice hat. Da nirgends so richtig dieses Problem beschrieben ist, und es überall nur heißt, man soll suchen usw., schreibe ich es nochmal hier:

Lösung: Im OSD folgen wir diesen Menüpunkten: OSD --> Einstellungen --> Plugins --> streamdev-server
Beim Pausierverhalten stellen wir nun "immer pausieren" ein, und nun schaltet der streamdev-server den VDR auf den Kanal den man streamen will und dann funktioniert es...

Sollte man kein OSD am VDR haben, kann man auch manuell die setup.conf vom VDR bearbeiten. VDR vor dem ändern stoppen!:

streamdev-server.AllowSuspend = 1
streamdev-server.SuspendMode = 1
Variante: nur wenige Kanäle sind verfügbar

Ursache und Lösung sind oben beschrieben. Das Fehlverhalten ist jedoch, dass zwei, drei Kanäle verfügbar sind und der Streamdev-Server für alle anderen Kanäle folgende Meldung liefert:

Server returned 409:Channel not available

Umschaltprobleme 2

Was wenn das Pausierverhalten schon auf "immer pausieren" steht, das Problem aber weiter besteht? Ursache könnte eine ältere CVS-Version des Streamdev-Servers sein. Dabei berücksichtigt der Server nicht, dass die aktuell vom Streamdev-client genutzte DVB-Karte ja eigentlich umgeschaltet werden darf (sofern nicht noch anderweitig in Verwendung).

Ein eindeutiger Indikator für dieses Problem: Das Umschalten über direkte Eingabe einer Kanalnummer funktioniert, mit Kanal+/- hingegen wird immer nur zwischen den Kanälen der gerade aktiven Transponder gewechselt.

Lösung: Aktuelles Streamdev aus dem CVS holen oder den im Bug-Tracking hinterlegten Patch verwenden.

Umschaltprobleme 3

Schwierigkeiten kann auch die Einstellung "Primär-Limit" aus dem Menü "Einstellungen -> Aufnahme" bereiten. Dieser Parameter muss auf 0 stehen. Ist ein höherer Wert eingetragen und eine der DVB-Karten im Server wurde zum "Primary Device" ernannt, dann steht diese Karte Streamdev nicht zur Verfügung.

Sprachdateien werden nicht erkannt (VDR>=1.5.7)

Um die Menüs des Plugins auch in einer anderen Sprache als in Englisch anzuzeigen, ist der folgende Patch anzuwenden:

kein TS stream mit pvrinput möglich

Analoge pvrinput Kanäle können nicht mit dem streamdev Plugin im TS Format gestreamt werden, da das streamdev Plugin dafür einen Multiplexer mit Filtersupport im device voraussetzt. Den haben aber normalerweise nur DVB Karten, keine analogen Karten. PES stream funktioniert jedoch, deswegen als stream Format bitte PES wählen.

Fehler im Plugin

Tipps

Streamdev-client mit mehreren Verbindungen oder Servern

Von sich aus kann das streamdev-client-Plugin nur genau eine Verbindung zu genau einem festgelegten Server unterhalten. Mit einem einfachen Trick ist es aber möglich, auch mehrere Server zu kontaktieren oder von einem Server gleichzeitig mehrere Transponder zu empfangen. Letzteres ermöglicht es z.B. ein Programm auf dem Client aufzuzeichnen, während ein anderes angeschaut wird. Sogar das osdpip-plugin kann auf dem Client genutzt werden.

Um dies zu erreichen, muss einfach nur eine Kopie des streamdev-client-Plugins unter einem anderen Namen erstellt werden:

cp libvdr-streamdev-client.so.VERSION libvdr-streamdev-client2.so.VERSION

Beim Start des VDR beide Plugins laden

-Pstreamdev-client -Pstreamdev-client2

Im OSD-Menü unter Einstellungen --> Plugins sind nun zwei streamdev-client-Plugins verfügbar die unabhängig voneinander konfiguriert werden können.

Streamen über DSL

  • Im DSL Router einstellen, dass aus dem Internet Anfragen an Port 3000 (TCP) an den streaming Server weitergeleitet werden, zusätzlich empfiehlt sich die Verwendung von dyndns oder ähnlichen Dynamic DNS Anbietern, damit man die IP des Routers nicht kennen muss
  • es muss eine Datei /root/externremux.sh angelegt werden
  • der verwendete Client sollte die empfangenen Daten buffern: 2,5MByte genügen (je nach Verbindung und Bitrate), Tipp: SMPlayer
  • ein Beispiel für /root/externremux.sh für T-DSL6000:
Datei
/root/externremux.sh
#!/bin/sh
IN=-
OUT=/tmp/out
rm -f $OUT.avi /tmp/out.log
/usr/bin/mkfifo $OUT.avi
cat $OUT.avi & /usr/local/bin/mencoder "$IN" -ovc lavc -lavcopts vcodec=mpeg4:vbitrate=400 -oac mp3lame -lameopts cbr:preset=96:mode=0 -vf scale=576:324 -o $OUT.avi &>$OUT.log


  • Der Zugriff auf den Stream erfolgt dann über http://<DynDNS-Name/Router-IP>:3000/Extern/<Channel>

Streamdev ab gcc version 4.xxx

Ab der Version 4.x.x des gcc benötigt man die CVS Quellen zum kompillieren.

cd $SOURCEDIR/VDR/PLUGINS/src/
cvs -d:pserver:anoncvs@vdr-developer.org:/var/cvsroot co streamdev

Wunschliste

Snapshot

cvs -d:pserver:anoncvs@vdr-developer.org:/var/cvsroot login
cvs -d:pserver:anoncvs@vdr-developer.org:/var/cvsroot co streamdev

Aktuelle Version(en)

Links

  1. Aktuelle Plugin-Homepage
  2. Original Homepage des Autors
  3. Spielt Live-TV und Aufnahmen auf einem Windows-PC ab
  4. Mac OS X VDR stream switcher (MPlayer needed)
  5. Einfacher Streaming Client für Windows
In anderen Sprachen