Gute DVB-T-Hardware gibt es schon fürs kleine Geld. Sie unter Linux zum Funktionieren zu bringen, setzt aber sportlichen Ehrgeiz voraus.
In meinem PC werkelt seit Jahren eine analoge PCI-TV-Karte, mit der ich so zufrieden bin, dass sie sogar auf das kürzlich neu erworbene Board samt AMD64-X2-Prozessor wandern durfte. Die eingeschränkte Programmvielfalt im Kabelnetz allerdings rief nach einer neuen Lösung: Den lokalen Sender RBB hat der Kabelnetzbetreiber trotz vieler interessante Sendungen aus seinem analogen Angebot verbannt. Seit kurzem gibt jedoch es auch in Dresden die Alternative DVB-T.
Tuchfühlung
Ein neues Kleidungsstück muss zunächst unter Daumen und Zeigefinger beweisen, wie sich der Stoff anfühlt. Für jeden ernsthaften Linuxer heißt das, vor jedem Hardwarekauf das Internet zu befragen, wie sich die geplante Neuanschaffung im Dienst des Pinguins anstellt. Für mich galten neben der Linuxtauglichkeit zwei Prämissen: Das Gerät sollte im Laden sofort verfügbar sein (denn der erste Termin für eine geplante Aufnahme lag nicht allzuweit in der Zukunft) und es sollte möglichst wenig kosten.
Die erste Grundsatzentscheidung fiel in Richtung USB-Stick, um meine analoge Karte nicht zu verdrängen und den Einsatz auch am Notebook zu ermöglichen. Dann surfte ich auf die Website der nächstgelegenen Händler und sortierte nach aufsteigendem Preis. Erfreulicherweise fand sich dabei gleich ein Gerät mit externer Antenne: Die kommen mit schwieriger Empfangsbedingungen besser klar und bieten obendrein die Möglichkeit, mehr Distanz wischen die Empfangseinrichtung und das elektromagnetischen Feld des eigenen PCs zu bringen.
Damit kam der Intuix S810 [1] in die engere Auswahl. In einem einschlägigen Forum [2] fand sich die hoffnungsvolle Bestätigung, dieser USB-Stick würde unter Linux gut funktionieren. Der aktuelle Ladenpreis von 26,90 Euro lag erfreulich niedrig. Keine halbe Stunde später hatte ich das Teil eingeschweißt in einen Blister in meinen Händen.
Harte Ware
Der S810 (Abbildung 1) fällt etwas dicker aus als die zurzeit marktüblichen Speicher-Sticks. Sinnvollerweise hat der Hersteller den Stecker etwas asymmetrisch angelegt, so dass das Gerät einen nebenliegenden USB-Steckplatz möglichst wenig behindert (Abbildung 2). Lüftungsöffnungen sorgen für die Kühlung des sich beim Betrieb erwärmenden Sticks, der zur optimalen Kühlung eine vertikale Luftzufuhr voraussetzt.

Abbildung 2: Dank asymmetrischer Steckeranordnung behindert der Intuix S810 den nebenliegenden Steckplatz weniger.
Die Antenne (Abbildung 3) bringt reichlich Kabel mit, um genug Abstand zum Empfänger zu halten. Ihr Magnetfuß hält sich an metallischen Unterlagen kräftig fest und gewährleistet somit auf Wunsch auch eine vertikale Ausrichtung. Versuchsweises Anbringen an der Zentralheizung allerdings wurde mit starken Bild- und Tonstörungen bestraft.
Weichteile
Grundvoraussetzung für den DVB-T-Betrieb stellt die Kernelunterstützung dar. Alle größeren Distributionen bringen die erforderlichen Module mit, ein grep DVB /boot/config-$(uname -r) liefert eine Liste der unterstützten Module (Listing 1). Wer einen Vanilla-Kernel übersetzt, muss auf die Auswahl der entsprechenden Komponenten achten [3].
$ grep DVB /boot/config-$(uname -r) CONFIG_DVB_CORE=m CONFIG_DVB_CORE_ATTACH=y CONFIG_DVB_CAPTURE_DRIVERS=y CONFIG_DVB_USB=m CONFIG_DVB_USB_DIBUSB_MC=m CONFIG_DVB_DIB3000MC=m …
Weiterhin benötigt man die Udev-Pakete aus dem Distributionsfundus, über deren Funktionsfähigkeit ein Aufruf von ps Aufschluss gibt (Listing 2). Darüber hinaus sollte man seiner Distribution einige wichtige Multimediapakete entlocken, wie etwa Ffmpeg, Mencoder, Dvb-utils (Debian) oder Dvb (Suse), (g)MPlayer, Xine, Vdr-plugin-xine und Vdr-plugin-mplayer (Debian) respektive Vdr-plugins (Suse) und Kaffeine.
$ps -ef | grep udev root 1220 1016 0 21:47 pts/8 00:00:00 grep udev root 13831 1 0 Oct27 ? 00:00:03 udevd --daemon
Die Firmware für den Intuix S810 besorgt man von LinuxTV.org [4] und spielt sie nach /usr/lib/hotplug/firmware/ beziehungsweise /usr/lib/firmware/ ein. Für den konkreten Fall reicht dvb-usb-dibusb-6.0.0.8.fw – wer mehr nimmt, müllt sich die Platte zu oder bereitet schon spätere Anschaffungen anderer DVB-T-Decoder vor.
Es spielt!
Gut gerüstet durch diese Vorarbeiten kann der erste Test beginnen: einfach anstecken, und es spielt – vielleicht. Vielleicht aber auch nicht. Mein erster Versuch verlief glücklich, da ich den Stick ansteckte und wegen der Kernel-Änderung bei angestecktem Stick neu startete. Später stellte sich heraus, dass dies die einzige sichere Variante darstellt, mit den Standardeinstellungen den DVB-T-Stick zur Arbeit zu bewegen. Das USB-Gerät wird nämlich erst nach einem Warmstart richtig initialisiert, sofern es beim Herunterfahren schon angeschlossen war. Zu diesem Problem gibt es im Internet die wüstesten Hinweise – so schrieb etwa jemand, er müsste erst unter Windows auf sein Gerät zugegriffen haben und dann Linux starten.
Die Initialisierung per Neustart erscheint freilich nicht gerade Linux-like. Also habe ich weiter gesucht und gefunden: Die Ladereihenfolge (respektive das Timing beim Laden) der Module spielt eine wesentliche Rolle für die Verwendbarkeit. Auch dazu gibt es Vorschläge im Internet, die das Problem etwas entschärfen. Das Benutzen von insmod statt modprobe umschifft teilweise die Zeitprobleme, da das System nicht sofort überprüft, ob die vorausgesetzten Umgebungsbedingungen stimmen. Das ist aber auch nicht ganz die feine Art.
Die von mir favorisierte Variante nutzt eine Schleife, die man nach dem Anstecken als root startet (Listing 3). Dieses Skript speichert man unter /root/dvb_reinstall und macht es über chmod 700 /root/dvb_reinstall ausführbar.
#!/bin/bash
# Skript zum Initialisieren des Inutix S810 DVB-T USB
let runde=0
if [ -d /dev/dvb/adapter0 ] ; then
while [ ! -c /dev/dvb/adapter0/frontend0 ]
do
echo $runde
rmmod dvb_usb_dibusb_mc dvb_usb_dibusb_common dvb_usb
modprobe dvb_usb
modprobe dvb_usb_dibusb_common
modprobe dvb-usb-dibusb-mc
runde=$[$runde+1]
done
fi
Die Zeilen mit der Variablen runde (Zeilen 3, 7, 12) dienen nur zum Nachweis der Funktionsweise. Oft führt schon Runde 0 zum Erfolg, manchmal aber auch erst Runde 1 oder 2. Ich habe das Skript gleich in die Udev-Rules eingebaut. Dazu ergänzte ich die Datei /etc/udev/rules.d/010-meine.rules mit der Zeile:
KERNEL=="dvb*", SYSFS{idVendor}=="04ca",SYSFS{idProduct}=="f001" RUN+="/root/dvb_reinstall"
Damit ist das Hotplug komplett, frontend0 wird in jedem Fall ordentlich angelegt.
DVB-Konfiguration
Noch erscheint aber beim Start von MPlayer die Fehlermeldung DVB CONFIGURATION IS EMPTY, exit: Bevor wir uns ein Bildnis machen können, benötigen wir die Senderliste. Für die altgedienten DVB-T-Sendegebiete finden sich unter /usr/share/doc/dvb-utils/examples/scan/dvb-t/ (Debian) respektive /usr/share/dvb/dvb-t/ (Suse) Kanallisten, aus denen man per
$ scan Pfad_zum_Verzeichnis/Gebietsname > channels.conf
für Xine und MPlayer lesbare Angaben erzeugt. Die channels.conf kopiert man dann noch ins Verzeichnis ~/.xine/ beziehungsweise ~/,mplayer/. Aufgrund der geografischen Nähe probierte ich es zunächst mit den Vorgaben von de-Leipzig – keine Sender gefunden. Ein Versuch mit de-Rostock erbrachte immerhin vier Sender – aber nur, wie sich später herausstellte, da zufällig eine Frequenz in beiden Sendegebieten identisch ist.
Es folgte ein Lernprozess, in dem ich Scanaid [5] installierte und damit den gesamten Frequenzraum untersuchen ließ. Das dauerte zwar eine Weile, lieferte aber brav alle 12 eingespeisten Sender. Nun war endlich das erste zappelnde Bild samt Ton verfügbar, gmplayer dvb://Sendername und xine dvb://Sendername zeigten den Erfolg. Falls der Sendername Leerzeichen enthält, muss man ihn in Hochkomma (einfache oder doppelte) setzen. Der Doppelbezeichnung Doku/KiKa kommt man so trotzdem nicht bei. Editieren der Angabe in channels.conf zu DokuKika löste auch dieses Problem.
Kaffeine allerdings goutiert die so erstellte channels.conf nicht, sondern verlangt nach einem eigenen Format für seine ~/.kde/share/apps/kaffeine/channels.dvb. Zwar gibt es ein Tool [6] für die Umwandlung, das aber aufgrund von Versionsunterschieden nicht vollständig befriedigt. Es arbeitet nur dann, wenn zuvor ein anderes Programm den Empfänger auf Deutschland eingestellt hat, und selbst dann bleibt die Programmzeitung unbrauchbar.
Doch es gibt eine elegantere Lösung: Eine Website [7] verrät die nötigen Angaben zu den ausstrahlenden Sendetürmen in meinem Sendegebiet, ähnliche Listen gibt es sicher auch für andere Regionen Deutschlands. Die Daten habe ich entsprechend Listing 4 verarbeitet und als de-Dresden unter ~/.kde/share/apps/kaffeine/dvb-t/ abgespeichert. Daraufhin konnte ich direkt aus Kaffeine heraus den Sendersuchlauf ausführen.
# DVB-T Dresden # T freq bw fec_hi fec_lo mod transmission-mode guard-interval hierarchy T 618000000 8MHz 2/3 NONE QAM64 8k 1/4 NONE # ard / arte / phoenix / EinsFestival T 594000000 8MHz 2/3 NONE QAM16 8k 1/4 NONE # zdf /3sat / ZDF-Doku / Ki.Ka T 538000000 8MHz 2/3 NONE QAM64 8k 1/4 NONE # mdr / rbb / WDR / BR
Ist bereits ein Sender aktiv, findet Kaffeine nur die anderen Sender auf der gleichen Frequenz. Man müsste in diesem Fall den Scan drei Mal wiederholen – jeweils mit einem anderen aktiven Sender, aus jeder Zeile einen. Alternativ könnte man vor dem Start von Kaffeine die channels.dvb wieder löschen und so einen jungfräulichen Zustand herstellen.
Videotext
Wer zusätzlich noch Videotext haben möchte, liest die nötigen Angaben aus den Kanaleinstellungen von Kaffeine aus (Abbildung 4). Auch in der channels.dvb findet sich der Wert: Er steht direkt hinter dem einzigen Komma. Es muss ein Sender der gleichen Frequenz laufen (siehe Listing 3) – bei Videotext für MDR also entweder MDR, RBB, WDR oder BR. Dann kann man mit
alevt -vbi /dev/dvb/adapter0/demux0 -pid 1559 100
das Programm starten. Der Wert 1559 entspricht der Teletext-PID des Senders. Bei der 100 handelt es sich um die Seitennummer im Videotext, die zuerst angezeigt werden soll. Man kann auch andere oder gar mehrere Seitennummern (sie würden dann in unterschiedlichen Fenstern geöffnet) angeben.
Ich habe die Zeile in /usr/bin/videotext-MDR abgespeichert und die Datei ausführbar gemacht. Dann bekam sie von mir einen Eintrag K-Menü mitsamt einem Tastenkürzel, das man aus dem laufenden Kaffeine heraus aufrufen kann. Analog verfuhr ich mit den andern Sendern.
Nun muss man sich nur noch merken, welche Sender einen Frequenzplatz teilen – oder eben immer nur den Videotext des gerade angeschauten Senders benutzen. Theoretisch lassen sich Videotexte von vier unterschiedlichen Sendern gleichzeitig verwenden. Erwischt man einen nicht aktiven Kanal, bleibt allerdings das Fenster von Alevt schwarz und lässt sich auch bei einem Wechsel in diese Frequenz nicht wieder aktivieren.
Achtung, Aufnahme!
Spätestens, wenn man Werbung ausschneiden will oder die Sendetermine ungünstig liegen, kommt der Ruf nach der Aufnahme. Mit einem Befehl wie beispielsweise
$ mencoder "dvb://rbb Brandenburg" -o rbb.avi -oac copy -ovc copy -frames $((25*60*120))
zeichnet man problemlos 120 Minuten TV auf. Das klappt auch über die Crontab wunderbar. Dabei hilfreich ein kleines Skript, dem man Sendernamen, Aufnahmedauer und Dateinamen zum Speichern übergibt (Listing 5).
# ~/dvb_aufnahme # Aufruf mit # ~/dvb_aufnahme sender_in_doppelten_Hochkommas dateiname_ohne_.avi Dauer_in_Minuten mencoder "dvb://$1" -o Speicherpfad$2.avi -af resample=44100:0:0 -lavcopts abitrate=192 -oac lavc -ovc copy -frames $((25*60*$3)) >/dev/null 2>/dev/null
Bei Abspielen der so gewonnenen Filme kommt aber eventuell nur wenig Freude auf, da innerhalb der Aufnahmen der Ton plötzlich viel zu hoch – scheinbar zu schnell, aber trotzdem synchron – erscheint. Die Ursache: Die Aufnahme erfolgt mit 48000 Hz erfolgte, die Soundkarte kann aber nur CD-Qualität von 44100 Hz verarbeiten. Mit tcprobe -i Dateiname lassen sich die Werte ein sehen. Um Abhilfe zu schaffen, wandelt man das Material mit Mencoder um:
$ mencoder -af resample=44100:0:0 -lavcopts abitrate=192 -oac lavc -ovc copy rbb.avi -o rbb1.avi
So lange muss man aber eigentlich gar nicht warten, sondern kann den ärgerlichen Fehler gleich bei der Aufnahme vermeiden. Auch hier hilft Mencoder:
$ mencoder "dvb://rbb Brandenburg" -o rbb.avi -af resample=44100:0:0 -lavcopts abitrate=192 -oac lavc -ovc copy -frames $((25*60*120))
Das Ergebnis ist in keiner der obigen Varianten indiziert. Avidemux fragt denn auch beim Laden, ob es das nachholen soll. Dem muss man zustimmen, da sonst keine Verschiebung auf der Zeitschiene möglich ist. Nach der Indizierung kann man das Material mit Avidemux schneiden. Man sollte allerdings nicht bis ans Ende spulen, da sich das Programm sonst verklemmt (zumindest in Version 2.3.0). Beim Schneiden müssen die letzten Bilder (zirka 4 Sekunden, dass heißt etwa 100 Frames) stehen bleiben, um einen Programmabsturz beim Speichern oder Laden der geschnittenen und gespeicherten AVI-Datei zu vermeiden. Werbefreie Sendungen benötigen nur einen Schnitt am Anfang und einen am Ende. Dazu braucht es nach der Indizierung keine weitere Hilfe von Avidemux, allein die Zeitwerte für die Schnitte muss man notieren.
Alles auf DVD
Zum Brennen einer Video-DVD braucht man eine MPEG-Datei. Hier kommt Ffmpeg ins Spiel, dass auch einen eventuellen Versatz in der Tonspur bei der Umwandlung wieder gerade biegt. Der Aufruf
ffmpeg -i rbb1.avi -target dvd -b 6000k -aspect 4:3 rbb1.mpg
zurrt auch gleich das Seitenverhältnis mit fest und begrenzt die Bitraten, sodass ein 90-Minuten-Film auf eine DVD passt. Das Ergebnis lässt sich beispielsweise mit DVDStyler auf eine Scheibe brennen.
Fazit
Schon für wenig Geld bekommt man eine leistungsfähige DVB-T-Ausrüstung, die kaum Wünsche offen lässt. Allerdings muss man schon vor dem Kauf die Linux-Tauglichkeit klären und bei der Installation dann so manche Klippe umschiffen. Am Ende steht der Erfolg: Fernsehen, Programmvorschau, Videotext, Sendungen aufnehmen, schneiden, DVD brennen – alles in einem Guss ohne jegliche Softwarekosten.
Glossar
-
Vanilla-Kernel
-
Bezeichnung für Kernel, die aus den unveränderten Quellen von Kernel.org übersetzt worden sind. Im Gegensatz dazu verwenden viele Distributionen modifizierte Kernel-Varianten.
[1] Intuix-Homepage: http://www.intuix.net/de/accueil.php
[2] DVB-T mit dem INTUIX S810 USB Tuner: http://linuxforen.de/forums/showthread.php?p=1569830
[3] DVB-T unter Linux: http://www.johannes-bauer.com/dvbt/
[4] Firmware für DVB-T: http://www.linuxtv.org/downloads/firmware
[5] Kanalliste erstellen: http://www.johannes-bauer.com/dvbt/dvbt-scanaid-0.03.tar.bz2
[6] Umwandeln der Kanalliste für Kaffeine (alte Version!): http://lab.infodatei.de/conf2dvb/
[7] Angaben zu Sendestationen: http://www.dvbt-mitteldeutschland.de/index.php?content=Programme&menu=Technische®ion=dd








