Ziel des Projektes war eine Linux-basierte PVR/Timeshifting box mit EPG, die aber nicht schon am Rand der Belastbarkeit läuft, also auch noch Hintergrundtätigkeiten übernehmen kann. Die Ausgabe sollte wahlfrei auf TV, CRT oder beidem möglich sein.
Ich habe mich für folgende Hardwareausstattung entschieden:
Auf der Softwareseite fällt die Wahl schon schwerer: Während ich das schreibe (2004-04-09) steckt die Linux-Treiberentwicklung für den verbauten VIA Chipsatz nämlich noch ein wenig in den Kinderschuhen. Nach einigem Suchen habe ich mich dann aber doch für folgende Software entschieden:
Das Ergebnis:
Das Morex kommt solide verbaut daher, ich habe mich (Premiere) beim Einbau der Komponenten nirgendwo schneiden können; der Platz im Innenraum ist recht knapp bemessen, aber ausreichend. Man muss sich halt überlegen, in welcher Reihenfolge man das Gehäuse bestückt. Auch das Mainboard war recht schnell angeschraubt: Das Gehäuse ist ja genau für Mini-ITX Mainboards designed. In Rekordzeit war auch die Festplatte im Festplattenkäfig und der Speicher auf dem Mainboard fixiert, aber dann ging das Gefrickel los: Es galt, PCI-Karte, PCI-Riser und die Fixierklammer für PCI-Karten gleichzeitig einzubauen, wobei sich immer jeweils 2 der 3 Komponenten gegenseitig im Weg waren. Schlussendlich habe ich einfach die Slotblende von der PCI-Karte geschraubt und nach dem Einbau wieder angebaut. Das war's dann aber auch schon zum Thema Hardware gewesen. Deckel draufschieben und mit 3 Schrauben fixieren - fertig.
Der CPU Lüfter summt jetzt allerdings trotz 7V Lüfter deutlich hörbar - an der Stelle besteht also noch dringender Verbesserungsbedarf.
...der schwierigere Part. Zumindest, wenn man nicht weiss, welche der unzähligen Kernelpatches sich denn vertragen und woran's hängt, wenn die Performance nicht stimmt. Nachdem zum Zeitpunkt, zu dem ich das hier schreibe, noch kein HOWTO für 2.6er Kernels aufzutreiben war, musste ich eben nach "try and error" vorgehen.
Los geht's also: Die Basis bildet - wie schon gesagt - Debian unstable. Meine sources.list hat deshalb zwei Einträge: Für Debian "sid" und für Codecs. Will man auf Hardware-MPEG-Decoding verzichten funktionierten die Pakete der auskommentierten Source hervorragend. Man spart sich dann das Kompilieren von MythTV, die EPIA-Patches für den Kernel, die libddmpeg und den gepatchten VIA-Treiber für X. Timeshifting mit MPEG2-Streams von mehr als 480x480 2000kbps zeigte in Tests dann allerdings Aussetzer.
deb http://ftp.de.debian.org/debian unstable main contrib non-free deb http://marillat.free.fr/ unstable main #deb http://dijkstra.csh.rit.edu/~mdz/debian unstable mythtv
Zuallererst gilt es, einen Kernel mit LIRC-Support und (für Hardware-MPEG-Decoding) Video4Linux' CLE266 Unterstützung zu compilieren. Ich habe mir dazu zwei Patches geholt: Einen für LIRC und einen für EPIA+LIRC. Die LIRC-Treiber von zweiterem lassen sich nämlich nicht einpatchen, deshalb noch ein extra Patch dafür. Beim zweiten Patch sollte man also alle LIRC-spezifischen Teile nicht mit einpatchen.
cd /usr/src wget "http://www.de.kernel.org/pub/linux/kernel/v2.6/linux-2.6.5.tar.bz2" wget "http://www.clarkmania.com/~jclark/lirc-26.patch" wget "http://epia.kalf.org/epia_kernel/testing/patch-2.6.4-epia1.bz2" tar -xjf linux-2.6.5.tar.bz2 cd linux-2.6.5 patch -p1 -i ../lirc-26.patch bzcat ../patch-2.6.4-epia1.bz2 | patch -p1 make menuconfig && make && make install_modules
Die LIRC-Module brauchen natürlich geladene IVTV-Module, also bekommt modprobe (apt-get install module-init-tools) einen neuen Eintrag (danach ein "update-modules" nicht vergessen):
install lirc_i2c /sbin/modprobe ivtv; /sbin/modprobe --ignore-install lirc_i2c
Als Bindeglied zwischen X' Anwendungen und Hardware-MPEG-Decoder läuft die libddmpeg.so von Ivor Hewitt:
cd /usr/src wget "http://www.ivor.it/cle266/libddmpeg-1.6.tar.gz" tar -xzf libddmpeg-1.6.tar.gz cd libddmpeg-1.6 make && make install
Schliesslich habe ich mir noch das brandneue XFree86-4.4.0, das mit VIA-Unterstützung kommt, geholt. Der VESA-Treiber aus Debian "sid" lässt nämlich kein schnelles Schreiben zu, was zu Frameraten um die 2fps führen würde. Mein Vorgehen war dabei, zuerst ein laufendes X-System per apt-get aufzusetzen und das dann mit den neuesten Binaries zu überschreiben - danger ahead :-). Es sollte aber auch irgendwie mit einer frischen Installation der Binaries klappen.
cd /usr/src mkdir xfree86-4.4.0-binaries cd xfree86-4.4.0-binaries wget -rL "http://ftp.xfree86.org/pub/XFree86/4.4.0/binaries/Linux-ix86-glibc23/" cd... chmod a+x extract ./Xinstall.sh
Dazu eine funktionierende XF86Config-4:
Section "ServerLayout" Identifier "XFree86 Configured" Screen 0 "Screen0" 0 0 InputDevice "Mouse0" "CorePointer" InputDevice "Keyboard0" "CoreKeyboard" EndSection Section "Files" RgbPath "/usr/X11R6/lib/X11/rgb" ModulePath "/usr/X11R6/lib/modules" FontPath "/usr/X11R6/lib/X11/fonts/misc/" FontPath "/usr/X11R6/lib/X11/fonts/TTF/" FontPath "/usr/X11R6/lib/X11/fonts/Speedo/" FontPath "/usr/X11R6/lib/X11/fonts/Type1/" FontPath "/usr/X11R6/lib/X11/fonts/CID/" FontPath "/usr/X11R6/lib/X11/fonts/75dpi/" FontPath "/usr/X11R6/lib/X11/fonts/100dpi/" EndSection Section "Module" Load "extmod" Load "dbe" Load "dri" Load "glx" Load "record" Load "xtrap" Load "speedo" Load "type1" EndSection Section "InputDevice" Identifier "Keyboard0" Driver "keyboard" Option "XkbLayout" "de" Option "XkbVariant" "nodeadkeys" Option "XkbRules" "xfree86" Option "XkbModel" "pc106" EndSection Section "InputDevice" Identifier "Mouse0" Driver "mouse" Option "Protocol" "auto" Option "Device" "/dev/mouse" EndSection Section "Monitor" Identifier "Monitor0" VendorName "Monitor Vendor" ModelName "Monitor Model" HorizSync 31.5 - 57.0 VertRefresh 40-150 Option "DPMS" EndSection Section "Device" Option "ActiveDevice" "CRT" # or "CRT,TV" Option "PanelSize" "800x600" Option "TVType" "PAL" Option "TVOutput" "S-Video" Identifier "Card0" Driver "via" VendorName "Unknown Vendor" BoardName "Unknown Board" BusID "PCI:1:0:0" EndSection Section "Screen" Identifier "Screen0" Device "Card0" Monitor "Monitor0" DefaultDepth 24 SubSection "Display" Viewport 0 0 Depth 24 Modes "800x600" EndSubSection EndSection
Damit die libddmpeg läuft, braucht's jetzt aber noch einen gepatchten VIA-Treiber für X, der irgendeine undurchsichtige Initialisierung vornimmt:
cd /usr/X11R6/lib/modules/drivers mv via_drv.o via_drv.o-original wget "http://www.courville.org/debian/xfree/nehemiah/via_drv.o"
Für die PVR-250 laufen die IvyTV-Treiber erfreulicherweise out-of-the box:
cd /usr/src wget "http://ivtv.sf.net/CVS-LATEST.tar.gz" mv CVS-LATEST.tar.gz ivtv-0.1.10pre2.tar.gz tar -xzf ivtv-0.1.10pre2.tar.gz mv ivtv ivtv-0.1.10pre2 cd ivtv-0.1.10pre2/driver make && make install
Der dazu passende Eintrag für modprobe sieht bei mir so aus (danach ein "update-modules" nicht vergessen):
alias char-major-81 videodev alias char-major-81-0 ivtv options ivtv ivtv_debug=1 ivtv_pal=1 tuner=29 options tuner type=29 options msp3400 once=1 simple=1 install ivtv /sbin/modprobe msp3400; /sbin/modprobe saa7115; /sbin/modprobe tuner; /sbin/modprobe --ignore-install ivtv remove ivtv /sbin/modprobe -r --ignore-remove ivtv; /sbin/modprobe -r msp3400; /sbin/modprobe -r saa7115; /sbin/modprobe -r tuner install bttv echo disabled
MythTV will für Unterstützung von Hardware-MPEG-Decoding neu compiliert werden, also passt man die settings.pro an (arch=i586 und Kommentarzeichen vor entsprechenden Teile der Konfiguration für CLE266 entfernen) und compiliert. Die Mitgelieferte HOWTO beschreibt die Einrichtung recht genau, also hier nur die nötigen Schritte zum Compilieren:
apt-get install libqt3-dev libqt3-mt-dev libasound2-dev liblame-dev joe settings.pro --> arch=586, cle266 enable qmake mythtv.pro make && make install
Das automatische Starten von MythTV übernimmt eine modifizierte inittab mit rungetty (apt-get rungetty)
... #6:23:respawn:/sbin/getty 38400 tty6 6:2345:respawn:/sbin/rungetty tty6 -u root -g root /bin/startx-mythtv.sh ...
Zusammen mit einem kurzen Startup-Script:
#! /bin/bash PATH=/bin/bash/usr/local/bin:/usr/bin:/bin:/usr/bin/X11:/usr/games:/sbin HOME=/root cd modprobe via modprobe via_v4l_drv startx #/bin/bash
Und einer .xinitrc
irexec& xset -dpms xset s off /usr/local/mythtv-0.14/bin/mythfrontend -l /var/log/mythtv/frontend.log
Was fehlt an dieser Seite noch? Meines Wissens nach das Aufsetzen von XMLTV (sollte aber einfach sein), und eine lauffähige .config für den Kernel. Auf jeden Fall aber Feedback - also: MUA anfeuern und Kommentar tippen :-)
Edit: Nachdem tvtoday seit kurzem hinter alle Episoden einer Serie "xx. Teil" hängt habe ich tv_grab_de_tvtoday behelfsmäßig gepatcht:
*************** *** 494,497 **** --- 494,501 ---- if (ref($span) eq "") { $span =~ s/\s*\([^\(]+\)\s*$//; + + #Christoph: Remove "xx. Teil" + $span =~ s/\s*\d+\.\sTeil//gi; + $show{title} = [[ $span, $lang ]]; } *************** *** 504,507 **** --- 508,515 ---- my $title = ($tag->content_list())[0]; $title =~ s/\s*\([^\(]+\)\s*$//; + + #Christoph: Remove "xx. Teil" + $title =~ s/\s*\d+\.\sTeil//gi; + $show{title} = [[ $title, $lang ]]; }
Edit: Stefan Siegl hat den Patch mittlerweile in tv_grab_de_tvtoday übernommen.