Streamdev-plugin

Aus VDR Wiki
(Unterschied zwischen Versionen)
Wechseln zu: Navigation, Suche
K (Hierarchie)
K (Update link for streamdev project page and download link for the most recent stable version)
 
(144 dazwischenliegende Versionen von 47 Benutzern werden nicht angezeigt)
Zeile 1: Zeile 1:
 
==Beschreibung==
 
==Beschreibung==
'''Autor:''' Sascha Volkenandt
+
Das Streamdev Plugin erlaubt das Streamen von Live-TV des VDR zu Streaming Clients.
  
Das Streamdevice Plugin ist die Netzwerkerweiterung des VDR. Es besteht aus zwei Teilen:
+
Streamdev besteht aus zwei Plugins, streamdev-server und streamdev-client. Damit ist auch VDR als Streaming Client nutzbar.
*Streamdev-server
+
*Streamdev-client
+
  
Der Server-Teil (streamdev-server) kommt in eine VDR zum Einsatz, der eine (oder mehrere) DVB-Karten enthält. Er stellt über DVB empfangene Kanäle als Streams im Netzwerk zur Verfügung.
+
===Status===
 +
Letztes Update 05/2012
  
Der Client-Teil (streamdev-client) kann in einem VDR eingesetzt werden, der selbst keinerlei DVB-Karte(n) enthält, sondern stattdessen Kanäle über das Netzwerk, also per TCP/IP empängt.
+
==Bilder==
 +
[[Bild:streamdev-plugin.jpg|thumb|none|''Einstellungen'']]
  
In den meisten Fällen kommt also in einem VDR entweder das eine oder das andere Plugin zum Einsatz. Man kann allerdings theoretisch zwei VDR im Netzwerk die beide jeweilse eine DVB-Karte haben, quasi über Kreuz miteinander verbinden, so dass sie ihre Karten gegenseitig nutzen können. Das kann dann sinnvoll sein, wenn man beispielsweise auf beiden VDRs denselben Kanal schauen und gleichzeitig einen anderen Kanal aufnehmen möchte.
+
==Installation==
 +
Beim Kompilieren werden zwei Plugins erzeugt, streamdev-client und streamdev-server.
  
Für das Verständnis des Plugins betrachten wir das Linux-Programm "sort". Es empfängt einen Datenstrom von der Standardeingabe, sortiert ihn und schickt ihn zur Standardausgabe. Die Standardeingabe ist normalerweise am Gerät "Tastatur" und die Ausgabe am Gerät "Monitor" angeschlossen. Effektiver ist es natürlich, die Datenströme umzuleiten und an Dateien anzuschließen:
+
===Konfiguration===
 +
Der Zugriff auf den Server wird durch die [[streamdevhosts.conf]] konfiguriert.  
 +
cp [[Struktur|$SOURCEDIR]]/VDR/PLUGINS/src/streamdev/streamdevhosts.conf.example [[Struktur|$VDRCONFIG]]/plugins/[[streamdevhosts.conf]]
  
sort < unsortiert.txt > sortiert.txt
+
Die streamdevhosts.conf muss korrekt konfiguriert werden. Andernfalls erlaubt das Server Plugin kein [[Streaming]] zu den Clients!
  
Beim VDR kann es mehrere Ein- und Ausgabedatenströme geben. Diese sind normalerweise an den Geräten [[Tuner]] und [[Decoder]] angeschlossen, können aber auch an Plugins umgeleitet werden. Aufnahmen kann man in diesem Zusammenhang wie "eingefrorene" Datenströme auffassen.
+
====Konfiguration Client Plugin====
 +
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.
  
Das Streamdev Plugin ist nun in der Lage, Ausgabedatenströme entgegenzunehmen, über das Netzwerk an andere Rechner zu versenden und dort als Eingabedatenströme wieder abzuliefern.
+
Es müssen auch nicht alle Kanäle des Server in die [[channels.conf]] des Clients aufgenommen werden.
  
'''ACHTUNG: In der Datei streamdevhosts.conf wird festgelegt welche Rechner auf den Streaming-Server zugreifen dürfen. Wird diese Datei nicht angepasst, ist kein Streaming möglich. Kann diese nicht gefunden werden, kann man sie ueber find / -name streamdevhosts.conf finden. Hat man einen Rechner im Netz mit der IP 192.168.1.1 schaltet man den Zugriff fuer alle Rechner frei indem man in die Datei um den Eintrag 192.168.1.0/24 ergaenzt '''
+
Die Streamdev-Client Einstellungen in VDRs setup.conf:
 +
streamdev-client.StreamFilters = 1
 +
# streamdev-client.SyncEPG = 0
 +
streamdev-client.RemoteIp = 192.168.0.50
 +
streamdev-client.RemotePort = 2004
 +
streamdev-client.StartClient = 1
  
===Möglichkeiten===
 
====normale Arbeitsstationen====
 
Es kann auf ganz normalen Rechnern, die am Netzwerk hängen, ferngesehen werden. Leider gibt es noch keine Möglichkeit wie man direkt Timer bearbeiten kann, aber dafür gibt es ja den genialen [[Vdradmin]].
 
  
====Konsolen und andere starke Clients====
+
*Filter Streaming (streamdev-client.StreamFilters):
XBoxen usw. können genauso wie ganz normale Arbeitsstationen über ihre Mediaplayer meistens die Videostreams abspielen.
+
**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, ...).  
====Linux Clients====
+
Es kann zum Beispiel mit dem [[Xine-plugin]] oder dem [[Softdevice-plugin]] ein VDR auch ohne [[DVB-Karte]] in einem Linux Rechner betrieben werden. In Verbindung mit [[LIRC]] steht so eine Konfiguration einem normalen VDR in nichts nach. Mit dem Umweg über Linux als Betriebssystem auf der [[X-Box]] bekommt man so einen VDR mit [[OSD]] zum Laufen.
+
  
===Streamdev-server===
+
*EPG synchronisieren (streamdev-client.SyncEPG):
Dieses Plugin stellt für den VDR, welcher das Plugin gestartet hat, ein Ausgabegerät dar. Der VDR kann es wie den Decoderteil einer
+
** Diese Funktion wurde in Version 0.5.0 (2010) aus dem Plugin entfernt. Die folgende Beschreibung erlkärt, warum:
[[DVB-Karte|Fullfeatured DVB-Karte]] benutzen und MPEG2-Daten von
+
** 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-plugin|Epgsync-plugins]].
Live-TV oder von VDR-Aufnahmen dorthin senden, auch mehrere gleichzeitig. Das Plugin zeigt natürlich die Daten nicht an, sondern packt die Videoströme in ein anderes Streamingformat und versendet sie per Netzwerk an einen anderen Rechner.
+
  
Es wird dann noch ein Eingabegerät für den VDR benötigt.
+
*IP-Adresse des Streaming-Servers (streamdev-client.RemoteIp)
 +
*VTP-Port auf dem Server (streamdev-client.RemotePort)
 +
*streamdev-client.StartClient (streamdev-client.StartClient)
  
===Streamdev-client===
+
==VTP Protokoll ==
Dieses Plugin verhält sich gegenüber VDR, welcher das Plugin gestartet hat, wie ein Eingabegerät. Es empfängt Videoströme per Netzwerk, wandelt das Streamingformat erneut und übergibt die Ströme an VDR. Die Daten werden vom VDR verarbeitet, als kämen sie von einer DVB-Karte.
+
===Einleitung===
 +
Dieses Protokoll wurde erstellt für Video Übertragungen über das Netzwerk 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.
  
Ein Ausgabegerät muss noch bereitgestellt werden, entweder mit einer echten fullfeatured DVB-Karte oder über ein anderes Plugin ([[Dxr3]]-, [[Softdevice-plugin|Softdevice]]-, [[Xine-plugin]]).
+
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. Dennoch sollte ein Klient oder (vor allem) der Server auch auf "\n" Endungen reagieren können. Die MPEG Daten werden über eine separate Datenverbindung übertragen.
  
Client-Lösung mit Xine-Plugin - Skizze zum Verständnis: [http://mitglied.lycos.de/peterweber69/ Link]
+
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.
  
===Zusammenspiel===
+
===VTP Antwort Codes===
* VDR1
+
<pre>
** Eingabedatenströme von
+
215  EPG Eintrag
*** DVB-Karte(n)
+
220  Letztes Kommando ok / Verbindung bereit
** Ausgabedatenströme an
+
221  Service schließt Sende-Kanal
*** Decoder
+
250  Angeforderte Aktion okay, beendet
*** Streamdev-server Plugin (sendet an VDR2 und VDR3)
+
451  Angeforderte Aktion abgebrochen: lokaler Fehler bei der Bearbeitung
* VDR2
+
500  Syntax-Fehler, unbekannter Befehl
** Eingabedatenströme von
+
501  Syntax-Fehler in Parameter oder Argument
*** DVB-Karte(n)
+
550  Angeforderte Aktion nicht ausgeführt
*** Streamdev-client Plugin (empfängt von VDR1)
+
551  Angeforderte Aktion nicht ausgeführt, eine spätere Verbindung war nicht erfolgreich
** Ausgabedatenströme an
+
554  Transaktion fehlgeschlagen
*** Decoder
+
560  Live-Stream derzeit nicht verfügbar
* VDR3
+
561  Capability not known
** Eingabedatenstrom von
+
562  Pid derzeit nicht verfügbar
*** Streamdev-client Plugin (empfängt von VDR1)
+
563  Stream derzeit nicht verfügbar
** Ausgabedatenstrom an
+
</pre>
*** Softdevice Plugin
+
  
Dabei kann man die Verbindungen auch mischen. Zwei VDRs können sich ihre DVB-Karten gegenseitig zur Verfügung stellen.
+
Die Antworten sind vom Format:
  
Der Fantasie sind dabei (fast) keine Grenzen gesetzt. Es muss aber gesichert sein, dass mindestens ein Eingabedatenstrom mit dem Gerät "Tuner" und ein Ausgabedatenstrom mit dem Gerät "Decoder" (Fernseher) verbunden ist.
+
<pre>
 +
<Antwort Code><-|Leerzeichen><Text><newline>
 +
</pre>
  
Soweit die idealisierte Theorie. In der Praxis gibt es da noch einige Schwierigkeiten zu überwinden, da der VDR von sich aus eigentlich nicht netzwerkfähig ist. So haben wir weitere Verbindungen für die Steuerung und das [[OSD]] zu berücksichtigen.
+
Bei der letzten Zeile wird anstelle des - nach dem Antwort Code ein Leerzeichen gesetzt.
  
===Beispiele===
+
==Sonstiges==
====Beispiel 1:====
+
===Probleme===
Es gibt einen VDR mit mehreren [[DVB-Karte|DVB-Karten]] und einem installierten streamdev-server.
+
====Kanal nicht verfügbar/Umschaltproblem====
Ein weiterer VDR, der per Netzwerk angeschlossen ist, streamt sich alles, da er keine DVB-Karte als Eingang hat, sondern eine [[dxr3|DXR-3]] Karte, [[Softdevice-plugin]], [[Xine-plugin]] oder [[Full-featured-DVB-Karte|Fullfeatured DVB-Karte]] ohne angeschlossene SatLeitung.
+
* Man kann immer nur den Kanal anschauen, welcher auch gerade auf dem VDR-Server eingestellt ist.
 +
* Lösung:
 +
** Im OSD:  OSD --> Einstellungen --> Plugins --> streamdev-server: Pausierverhalten "immer pausieren"
 +
** per [[setup.conf]] des VDR:  streamdev-server.AllowSuspend = 1 streamdev-server.SuspendMode = 1
  
====Beispiel 2:====
+
====Umschaltprobleme wegen Primary Limit====
Es gibt mehrere VDRs mit je einer DVB-karte die alle unabhänig voneinander laufen.
+
* Einstellung "Primär-Limit" im Menü "Einstellungen -> Aufnahme" muss auf 0 stehen.
Jedoch gibt es ein gemeinsames Videoverzeichnis auf einem Server das per SMB oder NFS mit den Clients verbunden wird. Empfehlenswert ist NFS.
+
* 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.
Wenn ein Server zum Einsatz kommt, dann kann man diesem mehrere Budget-VB-Karten geben, so dass alle Aufnahmen zentral gemacht werden. So muss nur ein System an sein, wenn Aufnahmen anstehen und es muss nur ein System auf besonders hohe Energiesparung ausgelegt werden.
+
Um die Clients besonders leise zu bekommen, kann man ja durch den Server auf Aufnahmefestplatten verzichten, und die Clients per Netzwerk booten lassen. So ist kein bewegtes Teil mehr im VDR. Als Alternative zum Netzwerk-Boot gibt es noch die Möglichkeit über einen IDE-nach-Compact-Flash-Wandler zu booten, was den beonderen Gimmick bietet, dass jeder User auch seine eigene CF-Karte in den vor ihm stehenden Client schieben kann.
+
  
===Protokoll-Informationen===
+
====Sprachdateien werden nicht erkannt (VDR>=1.5.7)====
 +
* Im Menüs des Plugins ist nur Englisch verfügbar
 +
* Abhilfe: {{vdrportal attachment|18059|vdr-streamdev-gettext.patch}}
  
Das streamdev-server-Plugin enthält genau genommen gleich zwei Server, die auf unterschiedlichen Ports horchen und sich mit unterschiedlichen Protokollen ansprechen lassen. Die beiden verwendeten Protokolle sind
+
====kein TS stream mit pvrinput möglich====
 +
* Analoge pvrinput Kanäle können im TS Format gestreamt werden, da das streamdev Plugin dafür einen Multiplexer mit Filtersupport im device voraussetzt.
 +
* Abhilfe: im pvrinput Plugin stream Format PES wählen.  
  
* Das VTP-Protokoll
+
===Tipps===
* Das HTTP-Protokoll
+
====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.
  
==== VTP-Protokoll ====
+
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
VTP steht für Video Transfer Protocol. Dabei handelt es sich um ein textbasiertes Protokoll, ähnlich dem SVDRP. Ein Client kann über entsprechende Befehle Kanäle abfragen und umschalten sowie Streaming-Clients anmelden. Die eigentliche Übertragung der Audio- oder Audio- und Videodaten erfolgt dann allerdings über eine separate Verbindung auf einem anderen Port. Das Verfahren ist mit dem beim FTP-Protokoll vergleichbar, wo Client und Server ebenfalls untereinander eine separate Verbindung aushandeln, auf der dann die eigentlichen Daten fließen.
+
Beim Start des VDR beide Plugins laden
 
+
  -Pstreamdev-client -Pstreamdev-client2
Bei einer VDR-VDR-Verbindung wird das VTP-Protokoll benutzt. Eine Beschreibung des Protokolls findet sich im Quellcodes des streamdev-Plugins in der Datei PROTOCOL.
+
Im OSD-Menü unter Einstellungen --> Plugins sind nun zwei streamdev-client-Plugins verfügbar die unabhängig voneinander konfiguriert werden können.
 
+
==== HTTP-Protokoll ====
+
 
+
Das streamdev-server-Plugin stellt auf Port 3000 einen HTTP-Server zur Verfügung, sofern dieser nicht per Konfiguration abgeschaltet worden ist. Auf diesen HTTP-Server kann man theoretisch mit einem ganz normalen Webbrowser zugreifen.
+
 
+
Der HTTP-Server des streamdev-server-Plugings horcht normalerweise auf Port 3000.
+
 
+
Wenn der VDR beispielsweise die Adresse 192.168.0.1 im Netzwerk hat, gibt man im Browser ein
+
 
+
http://192.168.0.1:3000/
+
 
+
Es sollte dann eine Liste von Kanälen erscheinen. Hinter dem Namen jedes Kanals verbirgt sich ein Link auf einen HTTP-Aufruf mit dem man beginnen kann, den betreffenden Kanal zu streamen.
+
 
+
====Sonstiges====
+
* Mit der neuen Version klappt der Verbindungsaufbau zu Clients stabiler.
+
* Bei Wireless-LAN-Verbindungen könnte die Durchsatzrate nicht ausreichen. Wenn es starke Schwankungen in der Übertragungsrate gibt, aber es im Durchschnitt reicht, dann wäre es als Tipp ratsam den Puffer höher zu stellen.
+
 
+
<!-- ===Status=== -->
+
==Bilder==
+
[[Bild:streamdev-plugin.jpg|thumb|none|''Einstellungen'']]
+
 
+
<!-- ==Bedienung== -->
+
<!-- ===[[SVDRP]] Befehle=== -->
+
<!-- ==Hardwareanforderungen== -->
+
<!-- ==Softwareanforderungen== -->
+
<!-- ==Installation== -->
+
<!-- ===Optionen=== -->
+
<!-- ===Patches=== -->
+
 
+
==Konfiguration==
+
Da es keine externen Abhängigkeiten gibt, gestaltet sich die Installation recht einfach. Es wird installiert, wie jedes andere [[Plugin_Installation|Plugin]].
+
Eine Besonderheit besteht darin, dass beim Übersetzen gleich zwei Plugins entstehen, der Server und der Client.
+
 
+
  cp [[Struktur|$SOURCEDIR]]/VDR/PLUGINS/src/streamdev/*.conf.example [[Struktur|$VDRCONFIG]]/plugins/[[streamdevhosts.conf]]
+
 
+
 
+
Danach muß man in der channels.conf des Clients die Programme hinzufügen, die von Streaming-Server stammen und in Zukunft von dem 'virtuellen' DVB-Device empfangen werden sollen.
+
 
+
Men & Motors:12421:h:S28.2E:27500:2345:2347:2346:3:7560:0:0:0
+
 
+
(Channels.conf von VDR 1.2.6 - die fünft'letzte' 3 bestimmt das dritte DVB Device - in diesem Client Rechner sind zwei FF-DVBs Karten verbaut)
+
 
+
<!-- ===Einstellungen=== -->
+
<!-- ===Parameter=== -->
+
 
+
==Sonstiges==
+
===Probleme===
+
====Umschaltprobleme====
+
Komischerweise hat jeder, hatte ich (BlackKing) auch, 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 das jeder diese Stelle hier durchliest, hoffe ich das ich es vielen Leuten leichter mache.<br>
+
Hintergrund: Dieses Problem tritt nur dann auf wenn man nur eine DVB-Karte eingebaut hat, oder mehrere Karten hat, diese aber alle mit Aufnahmen beschäftigt sind. Der VDR schaut auch immer einen Sender, auch wenn er nichtmal 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:<br>
+
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!:
+
====Streamen über DSL====
streamdev-server.AllowSuspend = 1
+
* Im DSL Router einstellen, dass aus dem Internet Anfragen an Port 3000 (TCP) an den streaming Server weitergeleitet werden,
streamdev-server.SuspendMode = 1
+
* der verwendete Client sollte die empfangenen Daten buffern: 2,5MByte genügen (je nach Verbindung und Bitrate)
 +
* Der Zugriff auf den Stream erfolgt dann über <nowiki>http://<HOST-Adresse>:3000/EXT/<Channel></nowiki>
 +
* Die Datei ist unter VDRCONF/plugins/streamdev-server/externremux.sh abzulegen - ein Beispielskript liegt den Sourcen des Plugins bei.  
  
====Fehler im Plugin====
+
Beispiele für das Streamen mit unterschiedlichen Einstellungen
* {{bug tracker mantisbt}}
+
* <nowiki>http://<HOST-Adresse>:3000/EXT/1 (Kanal 1 mit Standardeinstellungen)</nowiki>
 +
* <nowiki>http://<HOST-Adresse>:3000/EXT;QUALITY=WLAN11;VBR=512/1 (Optimiert für WLAN11, jedoch mit Videobitrate 512kBit/s statt der Standardeinstellung für WLAN11)</nowiki>
 +
* <nowiki>http://<HOST-Adresse>:3000/EXT;VC=x264/1 (verwende x264 Codec) </nowiki>
 +
* <nowiki>http://<HOST-Adresse>:3000/EXT;QUALITY=DSL6000/1 (optimiert für DSL6000)</nowiki>
 +
* <nowiki>http://<HOST-Adresse>:3000/EXT;VBR=250;ABR=16;WIDTH=128/1 (manuelle Vorgabe der Video/Audiobitrate und der Breite)</nowiki>
  
<!-- ===Tipps=== -->
+
===Bugs und Wünsche===
 +
* http://projects.vdr-developer.org/projects/plg-streamdev/issues
  
===Wunschliste===
+
==Entwicklerversion==
* {{bug tracker mantisbt}}
+
git clone git://projects.vdr-developer.org/vdr-plugin-streamdev.git
  
===Snapshot===
+
==Aktuelle Version==
cvs -d:pserver:anoncvs@vdr-developer.org:/var/cvsroot login
+
[http://projects.vdr-developer.org/attachments/download/1580/vdr-streamdev-0.6.1.tgz 0.6.1]
cvs -d:pserver:anoncvs@vdr-developer.org:/var/cvsroot co streamdev
+
  
 
==Links==
 
==Links==
# [http://www.magoa.net/linux Homepage des Plugins]
+
# [http://projects.vdr-developer.org/projects/plg-streamdev Homepage des Plugins]
# [http://www.m-i-b-u.de/vdrsp VDR Stream Player (M$)]
+
# [http://freakstuff.de/zapper Spielt Live-TV und Aufnahmen auf einem Windows-PC ab]
+
# [http://www.christian-hornung.de/tools.html Mac OS X VDR stream switcher (MPlayer needed)]
+
  
 
[[Kategorie:Plugins]]
 
[[Kategorie:Plugins]]
 +
[[Kategorie:Empfänger-Plugins]]
 +
[[Kategorie:Ausgabe-Plugins]]
 
[[Kategorie:Streaming]]
 
[[Kategorie:Streaming]]
 
{{i18n|streamdev-plugin}}
 
{{i18n|streamdev-plugin}}

Aktuelle Version vom 6. Oktober 2016, 11:25 Uhr

Inhaltsverzeichnis

[Bearbeiten] Beschreibung

Das Streamdev Plugin erlaubt das Streamen von Live-TV des VDR zu Streaming Clients.

Streamdev besteht aus zwei Plugins, streamdev-server und streamdev-client. Damit ist auch VDR als Streaming Client nutzbar.

[Bearbeiten] Status

Letztes Update 05/2012

[Bearbeiten] Bilder

Einstellungen

[Bearbeiten] Installation

Beim Kompilieren werden zwei Plugins erzeugt, streamdev-client und streamdev-server.

[Bearbeiten] Konfiguration

Der Zugriff auf den Server wird durch die streamdevhosts.conf konfiguriert.

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

Die streamdevhosts.conf muss korrekt konfiguriert werden. Andernfalls erlaubt das Server Plugin kein Streaming zu den Clients!

[Bearbeiten] Konfiguration Client Plugin

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.

Es müssen auch nicht alle Kanäle des Server in die channels.conf des Clients aufgenommen werden.

Die Streamdev-Client Einstellungen in VDRs setup.conf:

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):
    • Diese Funktion wurde in Version 0.5.0 (2010) aus dem Plugin entfernt. Die folgende Beschreibung erlkärt, warum:
    • 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)

[Bearbeiten] VTP Protokoll

[Bearbeiten] Einleitung

Dieses Protokoll wurde erstellt für Video Übertragungen über das Netzwerk 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. Dennoch sollte ein Klient oder (vor allem) der Server auch auf "\n" Endungen reagieren 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.

[Bearbeiten] VTP Antwort Codes

215   EPG Eintrag
220   Letztes Kommando ok / Verbindung 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.

[Bearbeiten] Sonstiges

[Bearbeiten] Probleme

[Bearbeiten] Kanal nicht verfügbar/Umschaltproblem

  • Man kann immer nur den Kanal anschauen, welcher auch gerade auf dem VDR-Server eingestellt ist.
  • Lösung:
    • Im OSD: OSD --> Einstellungen --> Plugins --> streamdev-server: Pausierverhalten "immer pausieren"
    • per setup.conf des VDR: streamdev-server.AllowSuspend = 1 streamdev-server.SuspendMode = 1

[Bearbeiten] Umschaltprobleme wegen Primary Limit

  • Einstellung "Primär-Limit" im Menü "Einstellungen -> Aufnahme" 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.

[Bearbeiten] Sprachdateien werden nicht erkannt (VDR>=1.5.7)

[Bearbeiten] kein TS stream mit pvrinput möglich

  • Analoge pvrinput Kanäle können im TS Format gestreamt werden, da das streamdev Plugin dafür einen Multiplexer mit Filtersupport im device voraussetzt.
  • Abhilfe: im pvrinput Plugin stream Format PES wählen.

[Bearbeiten] Tipps

[Bearbeiten] 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.

[Bearbeiten] Streamen über DSL

  • Im DSL Router einstellen, dass aus dem Internet Anfragen an Port 3000 (TCP) an den streaming Server weitergeleitet werden,
  • der verwendete Client sollte die empfangenen Daten buffern: 2,5MByte genügen (je nach Verbindung und Bitrate)
  • Der Zugriff auf den Stream erfolgt dann über http://<HOST-Adresse>:3000/EXT/<Channel>
  • Die Datei ist unter VDRCONF/plugins/streamdev-server/externremux.sh abzulegen - ein Beispielskript liegt den Sourcen des Plugins bei.

Beispiele für das Streamen mit unterschiedlichen Einstellungen

  • http://<HOST-Adresse>:3000/EXT/1 (Kanal 1 mit Standardeinstellungen)
  • http://<HOST-Adresse>:3000/EXT;QUALITY=WLAN11;VBR=512/1 (Optimiert für WLAN11, jedoch mit Videobitrate 512kBit/s statt der Standardeinstellung für WLAN11)
  • http://<HOST-Adresse>:3000/EXT;VC=x264/1 (verwende x264 Codec)
  • http://<HOST-Adresse>:3000/EXT;QUALITY=DSL6000/1 (optimiert für DSL6000)
  • http://<HOST-Adresse>:3000/EXT;VBR=250;ABR=16;WIDTH=128/1 (manuelle Vorgabe der Video/Audiobitrate und der Breite)

[Bearbeiten] Bugs und Wünsche

[Bearbeiten] Entwicklerversion

git clone git://projects.vdr-developer.org/vdr-plugin-streamdev.git

[Bearbeiten] Aktuelle Version

0.6.1

[Bearbeiten] Links

  1. Homepage des Plugins
In anderen Sprachen