Nextview

Aus VDR Wiki

Wechseln zu: Navigation, Suche

Inhaltsverzeichnis

Einführung

Um auch in einem reinen Analog-VDR den elektronischen Programmführer (EPG) nutzen zu können, bietet sich prinzipiell das Nextview-EPG-System geradezu an. Über spezielle Seiten, die im Rahmen des normalen Videotextes übertragen werden, wird digital nach einem europaweit einheitlichen Standard ein solcher Führer ebenfalls übertragen. Aktuell werden in Deutschland solche Dienste über den Sender Kabel.1 ausgestrahlt (RTL 2 hat den Dienst leider Anfang 2006 eingestellt). Mit nexTView EPG (nxtvepg) steht ein Open-Source-Programm für Linux und Windows zur Verfügung, das diese Daten auswerten und auf verschiedenste Arten darstellen und verarbeiten kann. Auf der nexTView EPG-Homepage findet sich neben Downloadlinks auch eine gute deutsche Einführung in die Hintergründe von nexTView.

Ein paar interessante Hintergrundinfos finden sich auch im VDR-Portal in dem Thread nxtvepg und DVB.

Einbindung in VDR

Analogtv-Plugin

Das analogtv-plugin unterstützt nexTView direkt. Näheres dazu siehe die Dokumentation dieses Plugins.

manueller Weg ohne analogtv-Plugin

Möchte man das analogtv-Plugin aus irgendeinem Grund nicht nutzen, so kann man die EPG-Daten mit ein wenig Basteln auch wie folgt manuell in den VDR schaufeln.

Einrichtung

Hier mal meine momentane Lösung dazu:

  • VDR 1.3.36 + pvrinput 0.0.8 + pvr350 (reines Analog-TV-System)
  • Nxtvepg 2.7.5
  • (alles unter SUSE 10.0 mit einer Hauppauge PVR350)
  • XMLTV2VDR 1.0.6

Zum Einrichten von NextViewEPG muss anfänglich eine grafische Oberfläche (X11) verfügbar sein (zur Not auch über Netz), im laufenden Betrieb ist das dann später aber nicht mehr notwendig. Weitere Voraussetzung ist, dass der VDR bereits mit AnalogTV läuft.

Die folgende Anleitung beschreibt, wie man mehrere EPG-Quellen in nexTView einbindet. Leider ist in Deutschland momentan nur noch eine Quelle verfügbar (Kabel 1). Durch die Merge-Funktion von NextViewEPG kann man mehrere Quellen kombinieren.

  1. Zunächst stellt man am VDR den ersten Sender mit EPG ein, beendet dann den VDR komplett, um freien Zugang auf das Video-Device zu haben.
  2. Nun ruft man unter X11 nxtvepg -acqpassive auf - das sorgt dafür, dass nexTView nicht versucht, selbst den Sender umzuschalten. Wenn alles richtig funktioniert, sollte das Programm spätestens nach ein paar Minuten erkennen (Statuszeile), dass ein Sender mit EPG empfangen wird und beginnen, die EPG-Daten aufzuzeichnen. Das sollte komplett abgewartet werden, was durchaus eine halbe Stunde oder länger dauern kann.
  3. Anschließend beendet man nexTView wieder, startet den VDR und fängt wieder bei Schritt eins an. Für alle EPG-Sender wiederholen.
  4. Nun kann man die Datenquellen "mergen": dazu "Configure/Merge Providers" auswählen, mit "OK" bestätigen (ggf. kann noch angepasst werden, welchem der Sender man bei sich widersprechenden Daten jeweils den Vorzug gibt - siehe dazu den Abschnitt "MERGED DATABASES" in der nexTView-Manpage).
  5. Manchmal scheint es nötig zu sein, nexTView zu beenden und neu zu starten - erst dann erscheint manchmal ein Dialog zur Zuordnung der jeweils gleichen Sender in den Quellen, den man ebenfalls wieder mit OK bestätigen kann.
  6. Nun sollte man noch einmal die EPG-Daten im XML-Dateiformat exportieren, um die passenden Einstellungen in die Config-Datei zu übernehmen. Dazu wählt man "Control/Export as XMLTV". Dort muss zwingend das Datenformat 0.5 und die Speicherung in Lokalzeit gewählt werden. Dateiname angeben, OK.

Am Ende dieser zugegeben etwas umständlichen Prozedur sollte man folgende Ergebnisse haben:

  1. Die EPG-Daten für alle Sender (für Kabel 1 beispielsweise bei mir abgelegt unter /var/tmp/nxtvdb/nxtvdb-0d92)
  2. Eine Konfigurationsdatei für nexTView EPG (~/.nxtvepgrc).

Läuft der VDR unter einer anderen Benutzerkennung als man gerade gearbeitet hat, muss die zuletzt genannte Konfigurationsdatei noch in das Homeverzeichnis des VDR-Users übernommen werden.

Nun muss man sich noch das Tool xmltv2vdr besorgen. Eigentlich ist es für einen anderen Zweck gedacht (siehe README), aber ein Perl-Skript daraus (xmltv2vdr.pl) lässt sich für unsere Zwecke hervorragend "missbrauchen". Davor muss man sich jedoch wie im README beschrieben, eine eigene channels.conf für xmltv2vdr bauen. Dazu schaut man in die vorhin von nexTView generierte XML-Datei und fügt wie beschrieben jeweils am Ende jeder Zeile die Channel-ID an. Im Gegensatz zu den Beispielen im README verwendet nexTView aber 8-stellige Buchstaben-Ziffern-Kombinationen als Channel-IDs.

Wichtig: Damit xmltv2vdr.pl korrekt funktioniert, dürfen die letzten drei Zahlen in der channels.conf nicht :0:0:0 sein. Es scheint egal zu sein, was dort steht - wichtig ist nur, dass die vorletzte und vorvorletzte Zahl ungleich Null sind, sonst klappt die EPG-Übernahme für diese Sender nicht richtig. Gegebenenfalls muss also channels.conf vom VDR passend geändert werden (nicht vergessen, die Änderungen auch in der xmltv2vdr-channels.conf korrekt nachzuziehen!).

Aktualisierung der Daten und Einbindung in den VDR

Mit den folgenden Schritten kann man nun die Daten der Datenquellen aktualisieren:

  1. VDR auf ersten Sender stellen, beenden
  2. nxtvepg -daemon -acqpassive -acqonce full -nodetach (dauert durchaus bis zu einer halben Stunde oder länger, bite abwarten, bis das Kommando zurückkehrt)
  3. VDR starten, weiter bei Schritt eins, bis alle Sender durch sind
  4. nxtvepg -noacq -provider merged -dump xml > output.xml
  5. VDR wieder starten
  6. xmltv2vdr.pl -c channels.conf -x output.xml (dauert ca. 2 Minuten)

Als Lohn dieser Mühe sollten nach dem Durchlaufen von xmltv2vdr EPG-Daten für die nächsten Tage und alle wichtigen Sender im VDR zur Verfügung stehen.

Getestete Vorschläge für die dauerhafte Einbindung in den VDR habe ich noch nicht, man kann hier aber über Cron-Jobs oder gar die native Einbindung in Plugins wie pvrinput nachdenken. Einen ersten kleinen Versuch in die letztgenannte Richtung (absolut nocht nicht praxistauglich!) findet man in meinem VDR-Portal Post . Stay tuned...

semi-automatischer Weg mit pvrinput-Plugin

Hintergrund

Warnung: Es handelt sich hier um eine ziemliche Bastellösung, auch wenn sie für mich recht gut funktioniert. Ich stelle sie hier explizit nicht als fertige Lösung, sondern als Anregung für Bastler ins Netz! Leider fehlt mir die Zeit, das ganze Enduser-tauglich abzurunden... Die Realisierung sei also nur empfohlen, wenn man einige Erfahrung mit der manuellen Einrichtung des VDR, der Fehlersuche und dem Patchen und Neukompilieren von Plugins hat. Die Beschreibung hier ist recht grob gehalten - im Zweifelsfall muss man sich selbst durch Lesen der Sourcen oder anderweitige Informationsquellen weiterhelfen, sorry.

Diejenigen, die das ganze unter SUSE zum Laufen bringen wollen, finden fertige RPMs und eine Schnell-Anleitung auch hier: [1].

Hinweis: Bevor man sich an das hier beschrieben Verfahren macht, bitte den Abschnitt über den manuellen Weg durchlesen. Die dort beschriebene Einrichtung muss durchgeführt werden, bevor der Automatismus eingesetzt werden kann!

Im Wesentlichen besteht meine Lösung für eine automatische EPG-Aktualisierung darin, die im letzten Abschnitt unter "Aktualisierung der Daten" beschriebenen Schritte in das pvrinput-Plugin so einzubauen, dass der VDR für eine Aktualisierung nicht manuell beendet werden muss. Dazu wird der Kanal passend gewechselt, der VDR vorübergehend komplett von der TV-Karte abgeklemmt und nextviewepg sowie xmltv2vdr automatisch gestartet. Für die Zeit der Daten-Akquisition liegt damit der VDR brach und NextViewEPG hat den nötigen, exklusiven Zugriff auf die TV-Karte. Ich habe mich bemüht, das Abtrennen vom Datenstrom möglichst sauber durchzuführen (und für mich funktioniert es auch reibungslos), möchte und kann aber trotzdem nicht garantieren, dass sich die Lösung nicht negativ auf die Stabilität des VDR - jetzt oder in neueren Versionen - auswirkt. Damit kann über das VDR-Menü jederzeit eine EPG-Aktualisierung angestoßen werden. Während die Akquisition läuft, ist der VDR jedoch nicht nutzbar und sollte möglichst auch in Ruhe gelassen werden.

Da das relativ lange dauert, habe ich mir noch einen Weg ausgedacht, das EPG-Update beim Herunterfahren des VDR automatisch zu erledigen. Näheres dazu weiter unten.

Realisierung

Zunächst wird, wie bereits erwähnt, die Einrichtung wie oben beschrieben manuell durchgeführt (einmalige manuelle Datenakquisition).

Anschließend muss das pvrinput-Plugin gepatcht und wie in der pvrinput-Dokumentation beschrieben, aus den Quellen neu gebaut und installiert werden. Die aktuellste Version meines Patches findet sich hier: [2]. Im Patch selbst sind einige Pfade hart kodiert (z.B. zu nextviewepg und xmltv2vdr), die ggf. geändert werden müssen!

Im Setup-Menü des Plugins findet sich nun ein neuer Menüpunkt zum Konfigurieren der Sender, über die EPG-Daten abgerufen werden sollen (bitte nur Sender einstellen, für die wie oben beschrieben manuell bereits NextviewEPG eingerichtet wurde!). Ist dies erledigt, so findet sich im selben Menü auch der Punkt "Load EPG data now". Wählt man diesen aus, sollte die Akquisition automatisch gestartet werden und der VDR sollte gelegentlich über einen Info-Balken mitteilen, dass die Akquisition gerade erfolgt. Nach Abschluss sollte der VDR wieder zu neuem Leben erwachen und die aktualisierten EPG-Daten zur Verfügung stehen.

Automatische Updates

Um das Aktualisieren nicht immer manuell anstoßen zu müssen, habe ich in pvrinput auch einen SVDRP-Befehl eingebaut, mit dessen Hilfe die Aktualisierung auch von extern angestoßen werden kann. Die Idee ist jetzt, dieses SVDRP-Kommando im Shutdown-Skript von VDR aufzurufen, bevor der VDR beendet wird. Dies kann z.B. mit Hilfe von vdr-svdrpsend.pl erfolgen. Damit kann man also künftig einfach die EPG-Aktualisierung durch Beenden des VDR anstoßen, wenn man ihn nicht mehr benötigt. Nach dem erfolten EPG-Empfang kann sich dann der VDR-PC selbst ausschalten und man muss diese Zeitspanne nicht mehr abwarten.

Ein Beispiel, wie ein solcher Aufruf eingebunden werden kann, findet sich in den beiden folgenden Shell-Skripten (für VDR 1.3.36): vdr13shutdown und vdr13shutdown.epg. Dabei handelt es sich bei vdr13shutdown um das Shutdown-Skript des VDR, hier aus dem NVRAM-Wakeup-Paket. vdr13shutdown.epg wird davon aufgerufen und kümmert sich um das Senden des SVDRP-Befehls und wartet auf die erfolgreiche Beendigung des EPG-Updates.