Fernsehen und Videotext mit Linux

Aus LinuxUser 08/2003

Fernsehen und Videotext mit Linux

Blick in die Ferne

Wer mit Linux fernsehen, Videotext anzeigen oder das Fernseh-Programm aufnehmen will, ist bei Xawtv genau richtig. Darüber hinaus kann dieses Softwarepaket Bilder von Webcams anzeigen und überzeugt durch Stabilität und Performance.

Was einst als Frontend für einen einzelnen TV-Karten-Treiber begann, entwickelte sich im Laufe der Zeit zu einer umfangreichen Programm-Suite. Das Xawtv-Paket sorgt für vollen Video-Genuss unter Linux. Der damalige Bttv-Treiber fand als Video4linux seinen Weg in den Kernel und Xawtv spricht nun jedes Stück Hardware an, das vom Video4linux-API unterstützt wird. Die Suite enthält die TV-Programme xawtv, motv, fbtv und ttv. mtt und alevtd sorgen für Videotext und webcam bringt die Bilder der heimischen Web-Kamera ins Netz.

Dank der Openmotif-Bibliothek mutet das Benutzer-Interface von motv moderner an als das von xawtv, und es bietet auch ein paar mehr Features. fbtv läuft auf der Linux-Framebuffer-Konsole; mit diesem Programm lässt es sich auch ohne X prima fernsehen.

Abbildung 1: motv bietet dem Anwender eine modernere Oberfläche und mehr Funktionen als xawtv

Abbildung 1: motv bietet dem Anwender eine modernere Oberfläche und mehr Funktionen als xawtv

ttv ist ein etwas ungewöhnliches Programm. Es erlaubt das Fernsehen auf der Konsole und stellt zu diesem Zweck die Bilder mit Hilfe von ASCII-Zeichen dar [4]. So kann man per SSH die Webcam an einem Web-Server überprüfen, ohne dafür extra einen X-Server starten zu müssen.

Die Installation

Xawtv gehört bei den meisten Linux-Distributionen zur Standardausstattung. Üblicherweise verteilen sich die einzelnen Programme über mehrere Pakete. Es reicht daher nicht aus, einfach nur das Paket xawtv einzuspielen, um alle Funktionen, die in diesem Artikel besprochen werden, zu nutzen.

Bei einer aktuellen SuSE installiert folgender YaST2-Aufruf alles Nötige:

yast2 -i xawtv motv alevtd v4l-tools

Debian splittet die Pakete noch etwas feiner auf, so dass Apt ein paar mehr Paketnamen braucht:

apt-get install xawtv motv fbtv ttv radio xawtv-tools webcam alevtd
tv-fonts

motv und Openmotif befinden sich in den Kategorien non-free contrib, die in der /etc/apt/sources.list aufgelistet sein müssen. Die aktuelle stabile Version von Debian enthält das Paket tv-fonts leider noch nicht, was zu Problemen bei der Darstellung von Videotext-Seiten führen kann.

Wer sich lieber den neuesten Tarball selber kompilieren will, installiert Xawtv mit dem üblichen make && make install. Damit auch motv, mtt, scantv und alevtd kompilieren, sollten auf jeden Fall Zvbi [2] und Openmotif [3] installiert sein. RPM-Nutzer erstellen sich ein RPM-Paket aus dem Tarball, indem sie diesen direkt an rpm übergeben:

rpm -ta xawtv_3.88.tar.gz

Das fertige Paket installieren sie dann wie üblich mit rpm -i.

Fernsehen

Einfach nur fernsehen ist nach wie vor der Haupteinsatzzweck für Xawtv, auch wenn es inzwischen weit mehr Hardware als nur TV-Karten unterstützt. Beispielsweise zaubert es auch das Bild einer USB-Webcam auf den Bildschirm.

Für die ersten Schritte empfiehlt es sich, zu xawtv oder motv zu greifen. fbtv und ttv haben eine recht eingeschränkte Oberfläche und sind nur mit einer vorher erstellten Konfigurationsdatei so richtig alltagstauglich.

Mit xawtv -hwscan oder motv -hwscan verschafft man sich erst einmal einen Überblick über die vorhandene Hardware. Das ist vor allem bei mehreren angeschlossenen Geräten nützlich, beispielsweise einer USB-Webcam und einer TV-Karte wie in Listing 1. Je nach Gerät steuert xawtv/motv die Hardware über Ports mit Hilfe des X-Servers oder direkt über die Gerätedatei an.

Bei dem dort aufgelisteten Port 53 handelt es sich um einen Xvideo-Port. Als Vermittler zwischen diesem und dem Bttv-Treiber arbeitet das V4l-Modul des X-Servers. Für Besitzer von ATI-Grafikkarten entwickelt das GATOS-Projekt [5] spezielle Treiber, um die TV-Hardware dieser Karten über einen Xvideo-Port anzusteuern.

Über den Xvideo-Port 54 können X11-Anwendungen Bilder von der Grafikkarte skalieren lassen. Vor allem Media Player wie Xine oder Mplayer überlassen so beim Abspielen von Videos einen Teil der Arbeit der Grafikkarte und entlasten dadurch die CPU. Auch Xawtv kann diesen Port zum Anzeigen der Frames im Grabdisplay-Modus (s. Kasten 1) nutzen.

Das erste Video4linux-Gerät – in diesem Fall eine USB-Webcam – wird über die Datei /dev/video0 angesprochen. Mit /dev/video1 steuern Applikationen das zweite Gerät an, in Listing 1 eine Bttv-Karte von Pinnacle. Diese Karte erreichen Programme auch über den Xvideo-Port 53, allerdings nutzt Xawtv in diesem Fall den Bttv-Treiber direkt, ohne dass der X-Server dazwischen hängt.

Listing 1

Xawtv listet alle Video-Geräte im Rechner auf

$ xawtv -hwscan
This is xawtv-3.88, running on Linux/i686 (2.4.20-0611-suse)
looking for available devices
port 53-53                              [ -xvport 53 ]
    type : Xvideo, video overlay
    name : video4linux
port 54-54
    type : Xvideo, image scaler
    name : Matrox G-Series Backend Scaler
/dev/video0: OK                         [ -device /dev/video0 ]
    type : v4l
    name : Logitech USB Camera
    flags:  capture
/dev/video1: OK                         [ -device /dev/video1 ]
    type : v4l
    name : BT878(Pinnacle PCTV Studio/Ra)
    flags: overlay capture tuner

Standardmäßig greift xawtv auf den ersten Eintrag in der Hardware-Liste zurück. Um ein anderes Gerät zu benutzen, teilt man das dem Programm beim Start über die Option -device mit. Den nötigen Parameter verrät xawtv -hwlist in eckigen Klammern. Folgender Aufruf lässt xawtv auf die USB-Kamera aus Listing 1 zugreifen:

xawtv -device /dev/video0

Nach dem ersten Start zeigen xawtv oder motv lediglich ein verrauschtes Fernsehbild. Die rechte Maustaste fördert ein zweites Fenster mit diversen Einstellungsmöglichkeiten zutage. Viele Funktionen lassen sich auch mit der Tastatur steuern. Beispielsweise steuern die Cursortasten den Tuner und suchen nach Fernsehsendern. In den Menüeinträgen stehen die Tastaturkürzel immer hinter den Namen, eine Übersicht liefert auch die Manpage.

Da die Sendersuche mit den Cursortasten nicht wirklich Spaß macht, hat motv einen automatischen Sendersuchlauf eingebaut, den Options / Channel scan startet. Mit Options / Save configuration speichert motv die Sender in einer Konfigurationsdatei, die auch xawtv nutzt. Wer das lieber von Hand macht, benutzt scantv. Dieses Programm sucht automatisch nach Sendern und speichert sie in der Datei $HOME/.xawtv. Um Änderungen an der Senderliste vorzunehmen, bearbeitet man einfach die Konfigurationsdatei mit einem Editor. [Bild auf] und [Bild ab] oder die Leertaste zappen in xawtv/motv von einem Sender zum nächsten. Das Scrollrad der Maus eignet sich übrigens auch dafür.

Kasten 1: Wie das Bild auf den Bildschirm kommt

Es gibt zwei Wege, die Daten von der Fernsehkarte auf dem Monitor darzustellen. Entweder schreibt die Karte diese per PCI-PCI-Transfer über den PCI-Bus direkt in den Speicher der Grafikkarte, was die CPU entlastet. Hierbei steuert der X-Server oder Xawtv selbst die TV-Karte an. Alternativ holt das Programm einzelne Frames von der Fernsehkarte und gibt diese genau wie beim Abspielen von Filmen über die Grafikkarte auf dem Bildschirm aus. Aus diesen Optionen ergeben sich drei verschiedene Operationsmodi:

Bei Overlay mit Xvideo-Extension steuert der X-Server die Fernsehkarte an. Dadurch “weiß” der X-Server, dass da ein Videobild ist. Wenn sich der sichtbare Teil des Fensters ändert (durch Verschieben, Vergrößern, teilweises Verdecken etc.), koordiniert er Fernsehkarte und Grafikkarte entsprechend und vermeidet, dass das Bild in einem falschen Fenster landet. Spielen Treiber und Grafikkarte mit, lässt der X-Server das Fernsehbild von der Grafikkarte auf die volle Bildschirmgröße hochskalieren. Leider funkioniert das nicht mit allen Grafikkarten. Außerdem kann Xawtv in diesem Modus derzeit keine Bilder oder Filme speichern.

Bei Overlay ohne Xvideo-Extension steuert Xawtv die Fernsehkarte direkt an. Diese schiebt das Videobild per PCI-PCI-DMA zur Grafikkarte, ohne dass der X-Server etwas davon mitbekommt. Das Fernsehbild landet dabei gelegentlich in Bildschirmbereichen, in denen es nichts verloren hat. Dieses Problem umgeht Xawtv durch einen erzwungenen Refresh, was zu einem störenden Flackern des ganzen Bildschirms führt.

Im Grabdisplay-Modus holt sich Xawtv die Bilder von der TV-Karte und gibt sie aus, was tendentiell weniger Hardwareprobleme macht (manche Motherboards kommen mit dem PCI-PCI-DMA-Transfers der Overlay-Modi nicht klar). In diesem Modus ist es möglich, das Bild mit Softwarefiltern (beispielsweise zum Deinterlacing) zu bearbeiten. Allerdings verbraucht Grabdisplay mehr Ressourcen. Wer im Vollbild fernsehen und nebenbei einen Kernel kompilieren oder MP3s erstellen will, braucht einen schnellen Rechner.

Zwischen Overlay ohne Xvideo und Grabdisplay schaltet xawtv per Menü hin- und her. Die USB-Webcam aus Listing 1 (-device /dev/video0) unterstützt übrigens kein Overlay, daher steht mit ihr nur Grabdisplay zur Verfügung.

Einzelbilder auf die Festplatte

xawtv, motv und fbtv können alle auf Knopfdruck Einzelbilder auf der Platte speichern. Ein Druck auf die Taste [G] speichert ein Bild im PPM-Format und [J] ein Jpeg. Die Dateien liege anschließend nach dem Schema “snap-SenderZeitstempel.jpeg” im aktuellen Verzeichnis. Auf der Kommandozeile holt sich v4lctl Einzelbilder von Video-Geräten:

v4lctl snap jpeg

Anders als xawtv gehört motv neben Kview aus KDE 3.1 zu den wenigen Programme, die Cut&Paste unterstützen. Man startet motv, stellt den Sender ein und drückt im passenden Moment [Strg-C]. In Kview fügt [Strg-V] das Bild dann ein.

Filme aufzeichnen…

Sowohl xawtv als auch motv bieten die Möglichkeit, Filme inklusive Ton aufzuzeichnen. Ein Druck auf die Taste [R] fördert die entsprechende Dialogbox zutage, in der der Benutzer die Parameter einstellt und die Aufnahme startet. Als erstes sollte er ganz oben das Dateiformat festlegen. Davon hängt ab, welche Video- und Audioformate zur Verfügung stehen. Üblicherweise wird man entweder ein AVI oder ein Quicktime-Movie aufnehmen. xawtv kann aber auch unkomprimierte Rohdaten schreiben, aus denen dann zum Beispiel mpeg2enc[6] Mpeg-2-Dateien erzeugt.

Wer die Kommandozeile benutzen möchte, sollte einen Blick auf streamer werfen. Dieses Programm kann grundsätzlich das gleiche wie xawtv oder motv, benötigt aber keine grafische Oberfläche. streamer -h gibt eine Liste der vorhandenen Optionen mit den Defaulteinstellungen und ein paar Beispielen aus.

Für Tonaufnahmen müssen die Mixereinstellungen stimmen. Das, was aus den Lautsprechern kommt, ist nicht zwangsläufig identisch mit dem, was aufgezeichnet wird. Bei der Aufnahme gibt es zwei häufige Fehlerquellen: Da viele Treiber als Quelle den Mikrofoneingang einstellen, stimmt die Aufnahmequelle nicht, da die TV-Karte am Line-In hängt. Manchmal ist auch der Igain-Regler einiger Soundkarten nicht aufgedreht.

Zum Einstellen des Mixers eignet sich ein beliebiges Mixerprogramm wie zum Beispiel aumix. Auch motv hat eine Pegelanzeige (Tools / Record Level Monitor) eingebaut, mit der der Anwender prima die richtigen Mixereinstellungen findet und den Aufnahmepegel justiert.

…und abspielen

Das Xawtv-Paket bringt einen eigenen, simplen Movie-Player mit, der alle mit xawtv, motv oder Streamer aufgezeichneten AVI- und Quicktime-Filme abspielt. pia übernimmt eine als Argument übergebene Datei und spielt sie ab – fertig. Die Taste [Q] beendet pia vorzeitig, weitere Eingriffsmöglichkeiten gibt es nicht. Ein Start des Programms aus xawtv oder motv heraus ist über den playback-Button möglich.

Mplayer und Xine sollten keine Probleme damit haben, die von xawtv aufgezeichneten Filme abzuspielen. Windows legt dem Anwender da schon mehr Steine in den Weg, da es keinen Quicktime-Player mitbringt und bei älteren Versionen auch ein Mjpeg-Codec nicht zum Lieferumfang gehört.

Videotext

Fernsehstationen liefern nicht nur Bild und Ton, sondern auch Informationen wie Videotext. Einige Sender übertragen auch eine Sender-ID und VPS-Informationen. Dafür nutzen sie die Austastlücke des Fernsehsignals (engl.: Vertical blank interval, VBI). Unter Linux sind diese Daten über die Datei /dev/vbi abrufbar.

Um Videotext zu nutzen, empfiehlt es sich, das Paket tv-fonts zu installieren, das allerdings bei Debian Woody (3.0) nicht dabei ist. Wer in diesem Fall also in den Genuss von Videotext kommen will, muss entweder tv-fonts aus der Testing-Distribution installieren oder xawtv aus den Quellen kompilieren. tv-fonts enthält die Schriften, die mtt zur Darstellung von Videotext-Seiten benötigt. Ohne diese Schriften stellt das Programm die Blockgrafiken (beispielsweise Senderlogos) nicht dar. Wer sich diese Zeichen ansehen will, tut das mit folgendem Aufruf:

xfd -fn "-*-teletext-*-r-*--20-*-*-*-c-*-iso10646-1"
Abbildung 2: Dank Unicode können Videotext-Seiten direkt aus dem Browser mtt in andere Programme kopiert werden

Abbildung 2: Dank Unicode können Videotext-Seiten direkt aus dem Browser mtt in andere Programme kopiert werden

Die Teletext-Blockgrafikzeichen sind im Unicode-Zeichensatz enthalten. Das erleichtert den Umgang mit Videotext-Seiten. Der User benutzt einfach ein Unicode-Encoding wie UTF-8 und kopiert die Seiten direkt in ein anderes Programm.

Xawtv enthält gleich zwei Programme für Videotext: mtt und alevtd. Abbildung 2 zeigt Mtt in Aktion. Alle Seiten erreicht der Benutzer per Mausklick auf die Seitenzahl oder Eingabe einer Zahl über die Tastatur.

Wenn kein X-Server läuft, startet mtt automatisch im Terminal-Modus, den ansonsten die Kommandozeilen-Option -tty erzwingt. Mit einer Teletext-Schrift und UTF-8 sieht das richtig schön aus.

alevtd ist ein Webserver für Videotext: Er läuft als Daemon im Hintergrund und liefert HTML-Seiten als reinen Text in UTF-8 kodiert. Gute CSS- und Unicode-Unterstützung im Browser ist gefragt; mit dem guten, alten 4-er Netscape kommt man nicht weit. Außerdem ist es eine gute Idee, auch auf dem Client das tv-fonts-Paket zu installieren. Abbildung 3 zeigt Konqueror mit einer Videotext-Seite.

Der Name “Alevtd” hat historische Gründe, ältere Versionen benutzten den VBI-Decoder des Videotext-Programms Alevt [7]. Heute kommt statt dessen die Zvbi-Bibliothek [2] zum Einsatz.

Abbildung 3: Konqueror zeigt eine Videotext-Seite, die alevtd ausgeliefert hat

Abbildung 3: Konqueror zeigt eine Videotext-Seite, die alevtd ausgeliefert hat

Lauter kleine Werkzeuge

Außer den zuvor beschriebenen TV- und Videotext-Programmen enthält der Xawtv-Tarball eine Sammlung kleiner Kommandozeilen-Tools.

v4lctl steuert Video4linux-Geräte von der Kommandozeile. Es dient beispielsweise dazu, einen Sender einzustellen oder den Fernsehton einzuschalten, etwa um die Nachrichten nur zu hören:

v4lctl -c /dev/video1 setstation cnn
v4lctl -c /dev/video1 volume mute off

Die Manpage listet jede Menge weitere Möglichkeiten auf.

xawtv-remote kennt ähnliche Parameter wie v4lctl, greift allerdings nicht direkt auf ein Video4linux-Gerät zu, sondern reicht das Kommando an ein gerade laufendes xawtv (oder motv) weiter. So ermöglicht xawtv-remote unter anderem ein Skript-basiertes Umschalten des Senders.

Das Programm record nimmt Sound auf und speichert ihn als Wav-File. Es hat eine Pegelanzeige eingebaut und kann sowohl interaktiv als auch per Kommandozeile gesteuert werden. record -h zeigt die Optionen in einer Übersicht.

webcam schnappt sich Bilder von einer Kamera, versieht sie mit einem optionalen Text und Zeitstempel und kopiert sie per FTP oder SSH auf einen anderen Rechner.

Viele TV-Karten haben einen Radio-Tuner eingebaut, den das Programm radio anspricht und so auch den Radio-Genuss unter Linux garantiert.

Zukunftspläne

Bislang musste der Anwender xawtv immer neu starten, um zwischen verschiedenen Video4linux-Geräten und Betriebsmodi (mit/ohne Xvideo) hin- und herzuschalten. Das soll sich in Version 4.0 ändern. Diese neue Version wird auch DVB (digitales Fernsehen) unterstützen. Xawtv steuert dann DVB-Tuner und dekodiert Mpeg-2, so dass auch die billigen Karten ohne Hardwaredecoder laufen.

Da der Umbau einige größere interne Umstellungen erfordert und viel Code aufgeräumt werden muss, wird die neue Version noch etwas auf sich warten lassen. Für die Ungeduldigen gibt es Snapshots [8] aus dem Entwicklungszweig, die allerdings die Gefahr bergen, dass sie nicht funktionieren.

Glossar

API

“Application Programming Interface”, hier: Schnittstelle zwischen den Programmen und dem Linux-Kernel. Ein Programm greift über die API-Funktionen des Linux-Kernels auf Hardware-Treiber zu.

Xvideo

Eine Erweiterung des X-Servers für Video, die X11-Programmen zwei zusätzliche Möglichkeiten bietet: die Ansteuerung von Video-Hardware und Farbraum-Konvertierung von YUV nach RGB, welche Skalierung von Video-Frames ermöglicht.

PCI-PCI-Transfer

PCI-Geräte können die Kontrolle über den PCI-Bus übernehmen (Busmaster) und selbstständig Datentransfers initiieren. Meistens transferieren sie die Daten vom oder zum Hauptspeicher (DMA – Direct Memory Access), was jeder moderne Festplatten-Controller auch macht. Um Daten direkt von einem PCI-Gerät zum anderen zu schicken, gibt es den PCI-PCI-Transfer. Der Umweg über den Hauptspeicher entfällt dann.

Frames

Ein Einzelbild in einem Videofilm bezeichnet man als Frame. Nach europäischer PAL-Norm sendet ein Fernsehsender 25 Bilder pro Sekunde. xawtv muss beim TV-Empfang also 25 Einzelbilder pro Sekunde von der Karte holen und diese über die Grafikkarte auf den Bildschirm bringen.

Der Autor

Gerd Knorr ist langjähriger Linux-Hacker und kümmert sich derzeit vorwiegend um Video4linux (Xawtv, Kernel, Bttv und Saa7134-Treiber).

LinuxUser 08/2003 KAUFEN
EINZELNE AUSGABE
ABONNEMENTS
TABLET & SMARTPHONE APPS
E-Mail Benachrichtigung
Benachrichtige mich zu:

Hinweis: Dieser Artikel ist älter als ein Jahr, enthaltene Informationen sind möglicherweise veraltet.

0 Kommentare
Älteste
Neuste Beste Bewertung
Inline Feedbacks
Alle Kommentare anzeigen
Nach oben