Videotext für Pinguine
Dezember 2000

Zum Fernsehen unter Linux setze ich das Paket xawtv ein, das auf den bttv-Treiber aufsetzt. Mit der Dekodierung von Videotext hatte ich jedoch einige Probleme, weshalb ich versucht habe, den vbidecode-Treiber zu verbessern. Außerdem möchte ich hier einige meiner Skripte vorstellen.

Videotext-Dekoder

Die Videotext-Dekodierung erfolgt inzwischen nicht mehr mit einem speziellen Videotextdekoder-Chip, sondern wird von der CPU selbst erledigt. Hierzu wird der Video-Datenstrom in der Austastlücke (Vertical Blanking Interval) vom TV-Treiber bttv an den Videotext-Treiber weitergereicht, in meinem Fall vbidecode aus dem bttv Paket. vbidecode extrahiert durch passende Abtastung daraus die Videotextdaten und speichert kontinuierlich alle Seiten der gerade empfangenen Fernsehstation in vorbereitete Verzeichnisse. Dort können sich dann andere Programme bedienen, um Seiten anzuzeigen oder auszuwerten.

Aus der Kopfzeile der Videotextseiten wird der Stationsname extrahiert. Wenn ein hierzu passendes Verzeichnis existiert, wird die Seite abgespeichert. Der Dateiname setzt sich aus Seitennummer und gegebenenfalls Unterseitennummer zusammen. Es handelt sich um Rohdaten, die auch noch Formatierungs- und Farbinformationen enthalten, mit vtx2ascii kann hieraus eine ASCII- oder HTML-Version erstellt werden. Neben Videotext gibt es noch eine Menge anderer Daten, die sich in der Austastlücke eines Fernsehbildes tummeln. ZDF und DSF liefern Intercast-Daten, das sind HTML-Seiten, die so nach und nach die Festplatte füllen. VPS haben inzwischen fast alle Stationen, auf n-tv werden gerüchteweise auch die verschlüsselten Realtime-Aktienkurse von b.i.s. übertragen (nein, ich hab es nicht entschlüsselt :-} ).

"Advanced" vbidecode

Leider führte vbidecode (V1.1.2) bei mir sehr häufig zu Rechner-Abstürzen, auch war die Dekodierung von Videotextseiten bei einigen Sendern sehr schlecht. Da der Autor auf E-Mails nicht reagierte, hab ich mich selbst in die Materie eingearbeitet, um die Probleme zu beseitigen.

Die Ursache für die Computer-Abstürze liegt meiner Meinung nach irgendwo im bttv-Treiber (damals V0.5.22), konnte von mir aber noch nicht gefunden werden. Aus unerfindlichen Gründen geht z.B. die CPU-Last von ca. 0% auf ca. 25% hoch, vbidecode erhält dabei fehlerhafte Frame-Nummern. Durch Senderwechsel oder Neustart von vbidecode kann dies meist wieder auf Normalwerte gebracht werden. Die Abstürze konnte ich dadurch zuverlässig verhindern, daß ich das Hochsetzen der Priorität von vbidecode nicht mehr erlaubt habe. Außerdem öffne ich das vbi-Device neu, falls bttv nicht fortlaufende Framenummern liefert.

Die Dekodierung erfolgt durch Sampling der Videodaten mit einer zu Videotext passenden Abtastrate. Das Problem bestand darin, den Startzeitpunkt und die Abtastzeitpunkte für die einzelnen Bits korrekt festzulegen. Ich experimentierte erfolgreich mit verschiedenen Verfahren, um das Timing adaptiv an die nicht immer optimalen Daten anzupassen. Schließlich entdeckte ich alevt , das ebenfalls ein solches Verfahren einsetzt. Dessen Dekodierungs-Funktionalität habe ich dann, entsprechend angepaßt, in vbidecode eingebaut.

Mit dieser Version von vbidecode hab ich nun keine Abstürze mehr und nur noch sehr selten Dekodierungsprobleme, während zuvor bei manchen Sendern so gut wie keine Seite zu dekodieren war. Mit dem neuen Video4Linux läuft es noch nicht, das wird sich hoffentlich ändern, wenn ich irgendwann mal update...

Videotextseiten einsammeln

Voraussetzung ist ein funktionierender bttv-Treiber, dessen Installation wird unter anderem bei xawtv beschrieben. vbidecode befindet sich in einem Unterverzeichnis von bttv, z.B. /src/video/xawtv/bttv/vbidecode/. Mit make und make install wird vbidecode kompiliert und in /usr/X11R6/bin installiert.

Ich starte es mit vbidecode -v > /dev/null 2>&1, damit die Meldungen z.B. über fehlende Verzeichnisse von uninteressanten Sendern ins Nirvana umgeleitet werden. vbidecode muß im Verzeichnis /var/spool/vtx gestartet werden. Darunter müssen die gewünschten Unterverzeichnisse für die einzelnen Stationen zum Abspeichern der Videotextseiten angelegt werden. Damit die Zuordnung funktioniert, muß der Name ein Teil der Senderkennung im Titel der Videotextseite enthalten. Sonderzeichen werden durch "_" ersetzt.

  /var/spool/vtx/3sat         3satText
  /var/spool/vtx/ARD          ARD-Text
  /var/spool/vtx/ARTE
  /var/spool/vtx/BAYERN       BAYERNTEXT
  /var/spool/vtx/BBC          BBC World
  /var/spool/vtx/Berlin       BerlinText
  /var/spool/vtx/CNN          CNNTEXT
  ...
  /var/spool/vtx/IC           für Intercast (ZDF/DSF)
  ...
Pro Station kommen etwa 600kB bis 1.4MB zusammen, das Intercast-Verzeichnis kann recht groß werden. Ich bereinige die Daten, indem ich per crontab die alten Seiten wegschmeiße.

Sender wechseln

Läuft z.B. xawtv zum Fernsehschauen, so wird hierdurch logischerweise (bei nur eine TV-Karte im Rechner) auch der Sender für Videotext festgelegt. Ändern kann man ihn entweder direkt, oder über xawtv-remote, bei mir geht das auch mit einer IR-Fernbedienung, dem Web-Browser oder dem Scrollrad der Maus.

Läuft kein Fernsehen, so kann der Sender mit set-tv umgeschaltet werden, damit kann auch eine Automatisierung über Shell- oder Perl-Skripte erfolgen. Mein Skript collvtx sammelt nacheinander die Videotextseiten der meisten Fernsehstationen ein. So hat man dann immer alle Fernsehprogramme, den Wetterbericht, oder sonstige Informationen auf dem Rechner parat. In dem Archiv befinden sich auch meine Skripte, um vbidecode zu starten und alte Videotextseiten zu löschen. Vorteilhaft ist eine zweite WinTV-Karte im Server, so ist der Videotext unabhängig vom gerade angeschauten Sender.

Videotextseiten anzeigen

Wie oben bereits erwähnt, liegen die Seiten in nicht lesbarer Form vor. Sie können mit vtx2ascii (im vtx-Verzeichnis von xawtv) in lesbare Form (ASCII oder HTML) gewandelt werden.

xawtv lieferte auch ein Script mit, um Videotextseiten im Browser anzuzeigen. Dieses CGI-Skript vtx.cgi wurde von mir ebenfalls erweitert. Um auf weiterführende Seiten zu gelangen, kann man nun direkt auf die Seitenzahl in der Videotextseite klicken und muß sie nicht mühsam im Header suchen.

Aktienkurse im Browser

Das CGI-Skript shares.cgi zeigt eine Zusammenstellung verschiedener Aktienkurse im Browser an. Die Daten stammen aus dem Videotext des Senders n-tv . Sind CSS vorhanden, so wird die Kursänderung farblich hervorgehoben. Zudem erfolgt ein Hinweis auf Adhoc-Meldungen ausgewählter Firmen.

Phantasie ist gefragt...

Analog zu den Aktienkursen kann man natürlich auch beliebige andere Auswertungen machen. Etwas Kenntnisse in Perl schaden da nicht. Beim Programmieren sollte man berücksichtigen, daß die Videotextseiten von den Redaktionen manchmal recht unzuverlässig upgedatet werden und bei manchen Seiten das Format häufig verändert wird.

Da mein Rechner nicht immer läuft (der Server schon), zeige ich ausgewählte Daten auf einem kleinen LCD-Display an. Über eine vorbereitete HTML-Seite kann ich im Browser schnell auf die wichtigsten Videotext-Seiten (z.B. TV-Programme, Wetter) zugreifen und durch einen Klick auch die Sender umschalten, bzw. den Ton stummschalten. Das gleiche geht natürlich auch mittels der IR-Fernbedienung. Auch für den IR-Empfänger der WinTV gibt es inzwischen einen Treiber, auch bei den aktuellen Versionen von xawtv steht was von LIRC-Unterstützung. Da ich mit meinem Empfänger aber vollauf zufrieden bin und die WinTV-Fernbedienung sowieso zuwenig Tasten hat, hab ich mir das noch nicht angeschaut.

Line
Document Revision:   23 Jul 2007
(c) 2007 Rolf Bleher
e-mail
Valid HTML 4.01! Prev Home Next