VDR als Streaming - Server

Aus EasyVDR Wiki
Wechseln zu: Navigation, Suche

zurück

Einführung

easyVDR kann auch als Media oder Streaming Server eingesetzt werden. So kann z.B. das gerade laufende TV-Programm auch auf einem/mehreren anderen PC's ( oder anderen Clients wie z.B. MediaMVP / XBox usw.) angeschaut werden. Auf der Seite des VDR gibt es dazu das Plugin streamdev das aus den Programmteilen Server und Client besteht. Der Client-anteil wird auf dem easyVDR Streamingserver nicht benötigt. Der Streamdev-Server ist in der Lage ( je nach Hardware - Ausstattung ) unterschiedliche TV-Programme gleichzeitig auf mehrere Clients zu verteilen. Bei einer intensiven Nutzung dieser Fähigkeiten wird es aber notwendig sein mehrere DVB-Karten in den Server einzubauen.

Streamdev - Plugin starten

Mit Hilfe des Streamdev-Server - Plugins kann der VDR als Streamingserver verwendet werden. Dieses Plugin muss bei easyVDR zuerst aktiviert werden. Das geht mit der Fernbedienung und dem Menü im OSD so: ( evtl. weichen die Bezeichnungen bei easyVDR 0.4 etwas ab )

  • System
    • Einstellungen
      • VDR-Einstellungen
        • Plugins-Einstellungen
          • Aktiviere Plugins

Danach ist natürlich ein Neustart des VDR notwendig

Einstellungen des Streamdev Server -Plugins

Erreichbar auch wieder über das Menü des OSD

  • System
    • Einstellungen
      • VDR-Einstellungen
        • Plugins-Einstellungen
          • Plugins Setup

Hier gibt es dann diese Einstellmöglichkeiten: ( meine Einstellungen als Beispiel Fett markiert )

  • Allgemeines
Einstellung Werte Beschreibung
Maximalanzahl an Clients 5
Pausierverhalten nie pausieren / immer pausieren / pausieren anbieten Hier werden die Prioritäten zw. Server und Client verteilt

immer pausieren nimmt dem Server im Bedarfsfall das TV-Signal weg und bevorzugt den Client
nie pausieren bevorzugt den Server und der Client bekommt evtl. kein Signal

Client darf pausieren ja / nein
  • VDR zu VDR Server
Einstellung Werte Beschreibung
VDR zu VDR Server starten ja / nein Über diesen Server läuft die kommunikation zw. Streamdev-Server und Streamdev-Client. Auch andere Clients benutzen diese Kommunikationsschnittstelle
Port des VDR zu VDR Servers 2004
Bind to IP 0.0.0.0 mit 0.0.0.0 kann ohne Einschränkung auf den Server zugegriffen werden. Weitere Infos hier
  • HTTP Server
Einstellung Werte Beschreibung
HTTP Server starten ja / nein Über den HTTP Server laufen die Streams. Der muss also zwingend gestartet werden.
Port des HTTP Servers 3000
HTTP Streamtyp TS / PES / PS / ES / Extern MPEG-Streamformat PS: Programmstream TS: Transportstream
Weitere Infos hier
Bint to IP 0.0.0.0 mit 0.0.0.0 kann ohne Einschränkung auf den Server zugegriffen werden. Weitere Infos hier

Verwendung

Um an einem beliebigen PC als Client für einen so eingerichteten easyVDR Streamingserver zu benutzen, gibt es verschiedene Client - Programme. Damit kann der Server recht komfortabel genutzt werden. Jetzt will ich aber zunächst beschreiben, wie die Adresse eines Streams zusammengesetzt ist. Dazu werde ich für den Server eine Beispiel - IP-Adresse annehmen: 192.168.1.2 ( Diese Adresse müsst ihr dann entsprechend der Adresse eures Servers ändern).

( hier folgen jetzt natürlich eine Menge toter Links ) Im WEB-Browser die Adresse des VDR eingeben: http://192.168.1.2:3000
Im Browser ist jetzt eine Liste ( Kanalliste ) eures VDR zu sehen.

  • Das Erste (deu) (2ch) (dd)
  • ZDF (deu) (2ch) (dd)
  • ...
  • ...

Diese Kanalliste verweist ( als Links ) auf die entsprechenden Streamadressen der einzelnen TV-Programme.
Im Fall von Das Erste also auf http://192.168.1.2:3000/PES/S19.2E-1-1101-28106+1
( auch möglich wäre: http://192.168.1.2:3000/PES/1+1 )
Die Streamadresse ist zusammengesetzt aus:

  • http://
  • 192.168.1.2 IP-Adresse
  • :3000 Port Nummer
  • /PES MPEG Streamtyp ( den verwende ich für den VLC als Mediaplayer )
  • /S19.2E-1-1101-28106 hier z.B. TV-Senderkennung für SAT oder auch nur /1 für Programmplatz 1
  • +1 optionale Angabe für den Audiokanal

Zur Optimierung des Streamdev-Servers für den verwendeten Mediaplayer ( z.B. MPlayer / VLC ... ) bleibt nur der Parameter für dem MPEG - Streamtyp. Der Punkt HTTP Streamtyp in den Plugin - Einstellungen ist übrigens nur ein Vorgabewert und kann durch eine andere Angabe in der Streamadresse überschrieben werden. Es kann also auch mit dem Vorgabewert HTTP Streamtyp = PES durch http://192.168.1.2:3000/TS/S19.2E-1-1101-28106+1 ein anderer MPEG Streamtyp angefordert werden.

Dieser Artikel befasst sich hauptsächlich mit dem Streamen von Audio oder Video von einem VDR zu einem anderen PC. Mit dem Streamen zu einem sogenannten Streaming Client, oft auch als UPnP-Media-Renderer bekannt, befaßt sich der Artikel Streaming_Clients.

Wir unterscheiden (vorläufig) vier verschiedene Anforderungen an das Streaming-Profil des Servers:

  • Live-Streaming der Fernsehkanäle,
  • Live-Streaming der Radiokanäle,
  • Aufzeichnungen,
  • Live-Streaming der Fernseh- und Radiokanäle + Aufzeichnungen.

Je nachdem, welches Profil gewünscht wird, gibt es unterschiedliche Ansätze, um den Anforderungen gerecht zu werden:

Streaming von Fernsehkanälen

Meist wird die klassische Variante, unter Verwendung des Streamdev-plugin als Serveranwendung und mit einem der folgenden Programmen auf dem Client zur Anzeige benutzt:

Software


Das Streamdev-plugin kann entweder direkt über eines der obigen Programme angesprochen werden oder aber indirekt über Webinterfaces wie Vdradmin AM oder Xxv aufgerufen werden.

Hier am Beispiel des MPlayer, wird das Streaming von Fernsehkanälen mit folgendem Befehl gestartet, die sich aus Anwendungsnamen und der URL für das Streaming zusammensetzt.

Linux:    mplayer http://192.168.0.200:3000/PES/3
Windows:  C:\Programme\mplayer\mplayer http://192.168.0.200:3000/PES/3
Mac OSX:  "/Applications/Programme/MPlayer/MPlayer OS X 2.app/Contents/Resources/mplayer.app/Contents/MacOS/mplayer" \                            
          http://192.168.0.200:3000/PES/3

Diese Eingabe erfolgt in der Eingabeaufforderung bzw. einem Terminal- oder Konsolenprogramm.

Aufbau der URL

Die URL (Uniform Resource Locator) definiert den gewünschten Fernsehkanal, der über das Netzwerk angezeigt werden soll. Eine Clientanwendung spricht dabei jeden einzelnen Fernsehkanal des VDR über eine eigene URL-Adresse an. Der Aufbau einer URL entspricht dem normalen Zugriff auf Internetseiten im Browser, da das HTTP-Protokoll als Steuerkanal verwendet wird.


Die URL Adresse http://192.168.0.200:3000/PES/3 setzt sich wie folgt zusammen:

  • http:// : Netzwerkprotokoll
  • 192.168.0.200 : IP des VDR-Rechners
  • 3000 : Port über den das Streamdev streamt (s. OSD|Einstellungen)
  • PES : Datenkodierung, zur Verfügung stehen PES, TS, PS, ES und externremux.sh
  • 3 : Kanal-Nummer, entsprechend der Reihenfolge der Kanäle in channels.conf
  • +2 : ein optionaler Parameter, der den verwendeten Audiokanal angibt : http://192.168.0.200:3000/PES/3+2


Alternativ zur Kanalnummer, die sich ja durch Verschiebungen in der Kanalliste ändern kann, kann in der URL auch eine eindeutige Kanal-ID übergeben werden, z.B. für die ARD auf Astra S19.2E : http://192.168.1.200:3000/PES/S19.2E-1-1101-28106 .

Diese Kanal ID hat das Format Quelle-NID-TID-SID der Einträge aus der channels.conf.

Wird die URL http://192.168.1.200:3000, ohne weitere Parameter im Browser aufgerufen, erstellt das Streamdev-plugin eine Webseite, die als Basis für das Streaming von Fernsehkanälen verwendet werden kann. Diese einfache Webseite enthält eine Linkliste der Stream-URLs aller Kanäle des VDR.

Mit diesem Skript lässt sich eine Liste aller Stream-URLs aus der eigenen channels.conf generieren.

VDRADRESS="192.168.0.200" && \
CHANNELSCONF="/etc/vdr/channels.conf" && \
VDRPORT="3000" && STREAMTYP="PS" && \
cat $CHANNELSCONF | sed \
's/^\([^\;]*\)[^:]*\:\([^:]*\:[^:]*\)\:\([^:]*\)\:\([^:]*\:[^:]*\:[^:]*\:[^:]*\:[^:]*\:\)\([^:]*\)\:\([^:]*\)\:\([^:]*\)\:\(.*\)$/http:\/\/'$VDRADRESS':'$VDRPORT'\/'$STREAMTYP'\/\3-\6-\7-\5\ #\ \ \1/g'


Zum Streaming von Fernsehkanälen mit dem VDR kann auch das Vompserver-plugin mit VompClient verwendet werden.

Streaming mittels MPlayer

Linux

Eventuell muss unter Linux noch die Option -vo /dev/... zur Angabe des Geräts für Video-Output ergänzt werden (vgl. mplayer --help).

Windows

Anscheinend funktioniert das Streaming mit dem mplayer bislang unter Windows nur ansatzweise und scheint extrem davon abzuhängen, wie Plugin, Player und Tools aufeinander abgestimmt sind (vgl. [6]).

MacOSX

MPlayer spielt unter Umständen keine Streams ab, wenn es aus dem Finder heraus aufgerufen wird. Statt dessen kann man das Programm aus dem Terminal starten; dann stehen Optionen zur Verfügung, mit denen auch auf langsameren Rechnern Streams dargestellt werden können, etwa "-cache 8192 -framedrop"; Skalierung mit "-xy 0.5"). Der etwas kryptische Pfad muss dann mit angegeben werden -- es sein denn, man setzt einen Symlink (Adminrechte erforderlich):

sudo ln -s /Applications/Programm/MPlayer/MPlayer\ OS\ X\ 2.app/\
Contents/Resources/mplayer.app/Contents/MacOS/mplayer /usr/bin/mplayer

Anschließend kann man aus dem Terminal aufrufen:

mplayer http://192.168.1.200:3000/PS/1

Streaming mittels VLC

Eine Alternative v.a. für ältere Rechner stellt ein aktueller VideoLanClient (VLC) dar. Die Version 0.8.4 spielt beispielsweise bereits an einem Macintosh G3 333MHz unter leichtem Ruckeln ab - deutlich besser als mit einem aktuellen MPlayer. VLC ist am Macintosh für ältere Rechner empfehlenswert, es gibt aber auch Einschränkungen: [7]

Mac OSX (Intel)

Zumindest ab Version 0.8.5 funktioniert VLC recht gut auf einem Intel Mac ! Für ARD Sender PES, der Rest PS und Radio ES.

Linux

Damit VLC 0.8.6 unter Linux überhaupt etwas anzeigt, muss man PS oder PES einstellen, mit TS arbeitet der VLC nicht zusammen und zeigt nichts, nicht mal eine Fehlermeldung an, sondern empfängt die Daten nur und schmeißt sie weg.

Um relativ einfach zwischen den Kanälen umzuschalten, kann man mit createXSPFplaylist.pl[8] eine XSPF[9] konforme Playlist erstellen, welche als Wiedergabeliste für VLC gelten kann.

Dazu mit

createXSPFplaylist.pl -d <vdrhost> -p <port> > playlist.xspf 

die Playlist erstellen und anschließend VLC starten, z.B. mit vlc --open playlist.xspf

Streaming von Radiokanälen

Für das Streaming von Radiokanälen muss man die URL (s.o.) in ein Streaming-Programm eingeben. Leider funktioniert das nicht mit allen Programmen, da viele wohl Video-Daten erwarten. Anders als bei TV-Streams sollte man den ES-Streamtyp verwenden, sonst tritt oft Knacken auf oder es bleibt ganz still.

Eine schnelle Übersicht der jeweiligen Adressen aller Radiosender bringt im Terminal ein:

cat /etc/vdr/channels.conf | egrep \
'^[^:]*\:[^:]*\:[^:]*\:[^:]*\:[^:]*\:0.*' | sed \
's/^\([^\;]*\)[^:]*\:\([^:]*\:[^:]*\)\:\([^:]*\)\:\([^:]*\:[^:]*\:[^:]*\:[^:]*\:[^:]*\:\)\([^:]*\)\:\([^:]*\)\:\([^:]*\)\:\(.*\)$/ \
http:\/\/192.168.1.200:3000\/ES\/\3-\6-\7-\5 #\1/g' 

Programme für Audio-Streams

Die Programme, die Videostreams wiedergeben können, können im allgemeinen auch Audio-Streams wiedergeben. Dazu gehören:

  • VLC
  • MPlayer
  • RealPlayer
  • Über einen mt-daap-Server (MacOSX)
  • Per Playliste und iTunes (MacOSX)
  • xmms (getestet mit V 1.2.10 unter Linux)

Streaming von Aufzeichnungen

Man kann über das streamdev-plugin keine Aufzeichnungen streamen, aber der Aufruf dürfte wegen des langen Dateinamens ohnehin ziemlich umständlich sein. Die einfachsten Lösungen beruhen daher auf Netzwerkfreigaben. Dies kann über eine Samba-Freigabe oder eine NFS-Freigabe erfolgen.

Da der VDR die Aufnahmen in mehrere Dateien anlegt, könnte man vor der Wiedergabe diese Dateien zu einer einzelnen Datei zusammenfassen, damit die Wiedergabe nicht für jede Datei separat gestartet werden muss. Diese Kopieraktion dauert aber ein paar Minuten, da in der Regel mehrere GB Dateien kopiert werden müssen.

cat 0*.vdr > all.vdr
# etwas schneller, weil das kopieren von 001.vdr gespart wird :
mv 001.vdr all.vdr
cat 0*.vdr >> all.vdr

Unter Linux

Als Alternative zum Zugriff über eine Netzwerkfreigabe und auch einfacher als der umständliche Aufruf eines Programmes mit dem langen Pfad einer Aufzeichnung dürfte es sein, auf dem Linux-Client ebenfalls einen VDR zu verwenden. Eine DVB-Karte ist für den Client nicht notwendig. Siehe dazu auch weiter unten im Abschnitt Streaming von Fernsehen und Aufzeichnungen

Unter OS X

Das Netzwerklaufwerk via SMB verbinden und den Ordner mit der Aufzeichnung auf das VLC-Icon ziehen. Die einzelnen Dateien der Aufnahme werden automatisch hintereinander abgespielt.

Unter Windows

Der einfachste Weg unter Windows geht über eine Netzwerkfreigabe per Samba. Sodann bietet es sich an, die Dateiendung *.vdr dem MPlayer zuzuordnen, und schon genügt ein Doppelklick auf die Datei, um die Wiedergabe per MPlayer zu starten. Man kann natürlich auch jedes andere Programm der Dateiendung zuordnen.

Streaming von Fernsehen und Aufzeichnungen

Für das Streaming von Fernsehsendungen und Aufzeichnungen in einer Umgebung stehen mehrere Möglichkeiten zur Verfügung.

Streamdev-client

Mit dem Streamdev-plugin ist eine klassische VDR-to-VDR-Lösung möglich, bei dem mehrere VDR ein Hausnetzwerk aufbauen können und über dieses Netzwerk Fernsehen und Aufzeichnungen teilen können. Da der Streamdev-server keine Aufnahmen streamen kann, muss der Zugriff auf ein zentrales Aufnahmeverzeichnis über Netzwerkfreigaben erfolgen. Dabei ist NFS gegenüber Samba vorzuziehen, da der Durchsatz deutlich höher ist. Der Client kann das zentrale Aufnahmeverzeichnis entweder direkt als /video einhängen (mounten) oder als Unterverzeichnis. Wie das einbinden erfolgen kann wurde im Artikel Aufzeichnungen am Client einbinden beschrieben.

Eine DVB-Karte ist im Client nicht erforderlich. Das Streamdev-clientPlugin fungiert als Eingabegerät. Als Ausgabegeräte können reine Software-Lösungen wie das Softdevice-plugin- oder Xine-Plugin zum Einsatz kommen. Als Hardware-Lösung bietet sich eine DXR3-Karte oder eine Full-featured-DVB-Karte an, wobei von letzterer nur der Decoder-Teil benötigt wird.

Xineliboutput

An das Xineliboutput-Plugin können sich ebenfalls Netzwerk-Clients verbinden. Während bei Streamdev alle Clients unabhängig voneinander agieren können, teilen sich bei Xineliboutput alle Clients den selben VDR. Alle Clients sehen also immer das selbe Programm und bedienen gemeinsam das OSD des Servers.

Xine-Player

Eine weitere einfache Lösung eines Streamclients stellt der Xine-Player dar.

Streaming zur DBOX2 und Dreambox

Es ist ebenfalls möglich eine DBOX2 und Dreambox als Streamclient zu verwenden. Erreicht wird dies über das ffnetdev-plugin des VDR und einem vdr-viewer-Plugin für die DBOX2.

Streaming zur XBOX

Die XBOX kann ebenfalls für VDR-Aufzeichnungen und Live-TV dienen. Da es viele Möglichkeiten gibt, soll beispielhaft für eine einfache Konfiguration an dieser Stelle auf das weit verbreitete XBMC [10] eingegangen werden. Es nutzt intern den Mplayer. Vorteilhaft ist die Bedienung über die originale Xbox-Fernbedienung.

Voraussetzung

a) für TV: ein lauffähiger VDR mit Streamdev-Plugin und eine generierte Playlist aus der channels.conf ähnlich wie beim vlc (s.o.). Alternativ (wie im Forum zu finden) kann man sich auch per http auf den Port des Streaming-Servers verbinden z.B. http://meine-vdr-ip:3000/ und die Senderliste mit "Seite speichern unter" temporär lokal ablegen. Nun kann diese "quick`n dirty" als VDR-Playliste generiert werden durch einen upload auf jarmes.de [11]. Man erhält einen individuellen Playlist-File z.B. vdr_playlist.m3u

b) für Aufnahmen: ein lauffähiger Samba-Server für den Zugriff auf das /video Verzeichnis da XBMC kein nfs kennt.

Installation

XBMC auf der XBOX installieren. [12] Kopieren der vdr_playlist.m3u nach ./XBMC/UserData/playlists/video, weil dort die Playlists für Videos abgelegt werden können für den TV-Einsatz.

Konfiguration

Eventuell je nach Anzahl der vorhandenen Karten im VDR-Server muss gegebenenfalls das Streamdev-Plugin angepasst werden wegen der Umschaltproblematik bei z.B. nur einer TV-Karte (getestet mit: Pausierverhalten = immer, Pausieren der Clients = ja). Im XBMC auf der XBOX unter Videos muss eine neue Quelle hinzugefügt werden durch drücken der Title-Taste auf der Xbox-Fernbedienung. Hier wird nach einem Namen gefragt z.B. VDR-records und einem Pfad z.B. smb://meine-vdr-ip/video den man auch über die Fernbedienung suchen kann. Sinnvoll ist ebenfalls für das Abspielen unter Einstellung/Videos/Allgemein im XBMC die Option "Gestapelte Dateien als eine Datei behandeln" zu aktivieren.

Bedienung

a) für TV: im XBMC einfach unter Videos/Playlists die kopierte Datei auswählen. Nun werden alle Programmnamen angezeigt. Programm auswählen und mit Select starten. Zappen kann man nun durch drücken der Display-Taste (Stream wird minimiert und Kanalliste eingeblendet) auf der Fernbedienung und wählen eines neuen Senders wieder per Select-Taste.

b) für Aufnahmen: im XBMC einfach unter Videos/VDR-records den Remote-Zugriff starten durch select. Alle Aufnahmen werden entsprechend angezeigt. Hier z.B. 001.vdr wählen. Über das Drücken der Menü-Taste auf der Fernbedienung gelangt man zum On Screen Display (OSD) [13], wo man über die Videoeinstellungen das Deinterlacing aktivieren kann z.B. Bob wie beim vlc und den Bild-Modus.

Streaming von ffnetdev-plugin zu VLC_media_player für Livebildausgabe und VNC für OSD-Darstellung

Das Livebild bekommt man durch Eingabe von tcp://<VDR IP>:<PORT> im VLC_media_player.

Bzw. auf der Kommandozeile (<PORT> kann geändert werden, siehe: ffnetdev-plugin#Parameter).

shell> vlc tcp://<VDR IP>:<PORT Standard 20002>

Für die OSD-Darstellung wird Tight-VNC verwendet, als VNC-Server muss dann folgendes Adresse eingegeben werden <VDR-IP>:<PORT>.

Bzw. auf der Kommandozeile (<PORT> kann geändert werden, siehe: ffnetdev-plugin#Parameter).

shell> vncviewer <IP>:<PORT Standard 20001>

Durch das kombinieren beider Programme hat man einen Streamingclient, inc OSD.

Es sei erwähnt, das es nicht zwangsläufig VLC_media_player für die Ausgabe sein muß.

Streaming der Livebildausgabe inklusive OSD-Darstellung

Mittels ffnetdev-plugin als Server kann seit VLC 0.9.x (VLC_media_player) das OSD über das Videobild überlagert dargestellt werden. Dazu muss VLC mit den folgenden Parametern gestartet werden:

shell> vlc --sub-filter="remoteosd"
           --rmtosd-host=<VDR IP>
           --rmtosd-port=<PORT Standard 20001> 
           --no-rmtosd-vnc-polling
           --no-rmtosd-mouse-events
           --rmtosd-key-events
           --rmtosd-alpha=255
           --tcp-caching=2000
           tcp://<VDR IP>:<PORT Standard 20002>

(Die beiden <PORT> Parameter können geändert werden, siehe: ffnetdev-plugin#Parameter).