VDR mit DVI/VGA

Aus VDR Wiki
(Unterschied zwischen Versionen)
Wechseln zu: Navigation, Suche
(Closed Source nvidia-Treiber)
(Installation)
Zeile 99: Zeile 99:
 
chmod +x NVIDIA-Linux-x86-1.0-9755-pkg1.run
 
chmod +x NVIDIA-Linux-x86-1.0-9755-pkg1.run
 
./NVIDIA-Linux-x86-1.0-9755-pkg1.run</pre>
 
./NVIDIA-Linux-x86-1.0-9755-pkg1.run</pre>
Die Modifikation der xorg.conf kann man getrost dem Installer überlassen.
+
Die Modifikation der xorg.conf kann man getrost dem Installer überlassen, der Installer erstellt aber zur Sicherheit zuvor auch noch eine xorg.conf.backup.
  
 
=== Vereinfachtes Einstellen der Bildschirmauflösung ===
 
=== Vereinfachtes Einstellen der Bildschirmauflösung ===

Version vom 17. Mai 2007, 20:42 Uhr

Bei Röhren-TVs erfolgt(e) die Bildausgabe zumeist über FBAS bzw. SCART. Diese Art der Übertragung ist bei modernen Ausgabegeräten mit DVI-Anschluss (LCD/Plasma/Beamer) jedoch nicht optimal. Dieser Artikel beschreibt die notwendigen Schritte um einen VDR über DVI betreiben. Als Softwarebasis dient dabei exemplarisch c't VDR 6, es sollte aber auch mit anderen Distribution auf ähnlich Weise machbar sein.

Nach einer erfolgreichen Grundinstallation von c't VDR 6 installiert man auf der Konsole als root folgende Software (entfällt bei einer Server/Client-Lösung auf dem Server):

apt-get install xorg xineliboutput-sxfe

Wenn man sich bei Auswahl des Grafikkartentreibers nicht sicher ist, gibt man vesa an, ansonsten den Treiber der dem Grafikchip entspricht (z.B. nv = nVidia Open Source Treiber). Bei der Auswahl der möglichen Bildschirmauflösungen ist zumeist die native Auflösung nicht auswählbar (z.B. 1366x768), deshalb sollte man dort zunächst nur konservative Modi wie 800x600 oder 1024x768 auswählen, mit Hilfe von neuen Modelines in der /etc/X11/xorg.conf lässt sich dies aber beheben:

Beispiel-Auszug aus xorg.conf

Section "Monitor"
[...]
  modeline  "800x600@60" 40.0 800 840 968 1056 600 601 605 628 +hsync +vsync
  modeline  "1360x768@60" 80.69 1360 1400 1504 1688 768 768 770 796
  modeline  "1366x768@60" 80.73 1366 1408 1504 1688 768 768 770 796
EndSection

Section "Screen"
[...]
  SubSection "Display"
    depth 24
    virtual 1366 768
    modes "1366x768@60" "1360x768@60" "800x600@60"
  EndSubSection
EndSection

Inhaltsverzeichnis

Standalone-Lösung: ein VDR mit FF/Budget-Karte(n)

Nach der Eingabe von

xinit -e vdr-sxfe -f xvdr:tcp://localhost

sollte man am DVI-Eingang das gewohnte Fernsehbild haben.

Server/Client-Lösung: ein VDR mit FF/Budget-Karte(n) + Client(s)

Am Server muss der streamdev-client installiert & konfiguriert sein bzw. werden:

apt-get install vdr-plugin-streamdev-server

Wichtig ist dabei besonders die Freigabe der IP des Client in der streamdevhosts.conf.

Beispiel-Auszug in der setup.conf

streamdev-server.AllowSuspend = 1
streamdev-server.HTTPBindIP = 0.0.0.0
streamdev-server.HTTPServerPort = 3000
streamdev-server.HTTPStreamType = 1
streamdev-server.MaxClients = 5
streamdev-server.ServerPort = 2004
streamdev-server.StartHTTPServer = 1
streamdev-server.StartServer = 1
streamdev-server.SuspendMode = 1
streamdev-server.VTPBindIP = 0.0.0.0

Am Client muss wie oben beschrieben xorg und xineliboutput-sxfe installiert und konfiguriert werden. Ausserdem benötigt man den Streamdev-client:

apt-get install vdr-plugin-streamdev-client

Beispiel-Auszug aus der setup.conf

streamdev-client.RemoteIp = <IP-des-VDR-Servers>
streamdev-client.RemotePort = 2004
streamdev-client.StartClient = 1
streamdev-client.StreamFilters = 1
streamdev-client.SyncEPG = 1

Auch die Installation des epgsync-Plugins ist empfehlenswert. Danach kopiert man die channels.conf des Servers ins gleiche Verzeichnis des Client und restartet mit

/etc/init.d/vdr restart

Nach der Eingabe von

xinit -e vdr-sxfe -f xvdr:tcp://localhost

sollte einem dann ebenfalls ein Fernsehbild zur Verfügung stehen.


TODO

  • video-Verzeichnis mit Aufnahmen vom Server einbinden

Tipps

Deinterlacing mit Hilfe von TVTime

In den VDR-Plugin-Einstellungen von xineliboutput wählt man als Methode TVTime. Es empfehlen sich 2 verschiedene Filter: Greedy 2 Frame bestes Ergebnis, aber selbst auf schnellen Rechnern Ruckler bei abrupten Szenenwechseln Linear Interpolation ebenfalls sehr gutes Bild, aber weniger empfindlich bei Bildwechseln als Greedy 2 Frame Wenn es die CPU zulässt sollte man den Cheap Mode deaktivieren. Das Aktivieren der Judder Correction bringt zumeist nur Tonstörungen. Chroma Filter bringt ausser erhöhter CPU-Last in normaler Entfernung zum TV keine sichtbare Bildverbesserung. Das FFMpeg Processing ist normalerweise nur auf Sendern mit extrem niedriger Bitrate sinnvoll (Glättung der Klötzchen ähnlich dem Postprocessing in VLC).

Automatischer Start von xinit/vdr-sxfe

Quick & Dirty Lösung: Nach der Eingabe von crontab -e folgende Zeile einfügen

@reboot xinit -e vdr-sxfe -f xvdr:tcp://localhost

und die Datei abspeichern, danach startet die Ausgabe bei jedem Bootup. Wer eine elegantere Lösung zum gleichzeitigen Start von vdr und vdr-sxfe hat, bitte einpflegen.

Closed Source nvidia-Treiber

Es gibt zwei verschiedene Treiber: einmal die Open-Source-Variante nv und den Closed-Source-Treiber nvidia. Der CS-Treiber empfiehlt sich, wenn man das Display möglichst pixelgenau und/oder mit 50 Hz Bildwiederholfrequenz betrieben werden soll. Ausserdem erleichtern die CS-Variante die Einstellung der Auflösung ohne umständliche Berechnungen von Modelines.

Installation

Zunächst benötigen wir etwas Entwicklungssoftware zum Einbinden des Treibers:

apt-get install linux-headers-2.6-486 build-essential xorg-dev

Nun muss ein Binär-Paket von NVIDIA heruntergeladen werden. Diese findet man unter [1], dementsprechend sollte man den wget-Aufruf auf die jeweils aktuelle Version anpassen. Danach muss die Datei noch ausführbar gemacht werden bevor man sie aufruft:

wget ftp://download.nvidia.com/XFree86/Linux-x86/1.0-9755/NVIDIA-Linux-x86-1.0-9755-pkg1.run
chmod +x NVIDIA-Linux-x86-1.0-9755-pkg1.run
./NVIDIA-Linux-x86-1.0-9755-pkg1.run

Die Modifikation der xorg.conf kann man getrost dem Installer überlassen, der Installer erstellt aber zur Sicherheit zuvor auch noch eine xorg.conf.backup.

Vereinfachtes Einstellen der Bildschirmauflösung

Normalerweise muss man umständlich Modelines berechnen und unter Section Monitor einfügen, bei den Closed-Source-Treibern entfällt dieses nervige Prozedere jedoch. Es reicht die Angabe von Modes im Formate $HOEHEx$BREITE_$HZ": Beispielauszug aus /etc/X11/xorg.conf

<small>Section "Screen"
[...]
    DefaultDepth    24
    Option "NoLogo" "True" # Wollen wir immer das Logo sehen? Nicht wirklich...
    SubSection     "Display"
        Depth       24
        Modes       "1368x768_60" # 1368x768 bei 60 Hz
    EndSubSection
EndSection</small>

Bitte beachten, dass der nvidia-Treiber nur Werte akzeptiert die durch 8 teilbar (wie 1360 oder 1368). 1366 wie mit den nvidia-Treibern unter Windows geht zur Zeit noch nicht, ist aber angeblich für zukünftige Treiberversionen in der Planung.

50 Hz Problematik

Mehr Information samt einer Gerädatenbank findet man unter [2] Achtung: nur wenn man sich sicher ist, dass das Display auch 50 Hz kann sollte man dies ausprobieren! Nur der CS-Treiber ist momentan in der Lage 50 Hz fähige Displays auch mit 50 Hz anzusteuern. Dazu muss in der xorg.conf etwas ändern und hinzufügen

<small>
Section "Monitor"
[...]
    HorizSync       31.5 - 91.1 # exemplarisch, auf Herstellerangabe des Displays ändern!
    VertRefresh     50.0 - 75.0 # exemplarisch, auf Herstellerangabe des Displays ändern!
  Option       "ExactModeTimingsDVI" "True"
[...]
EndSection

Section "Screen"
[...]
    Option "ModeValidation" "AllowNon60HzDFPModes, NoDFPNativeResolutionCheck"
[...]
EndSection</small>

Danach sollte man über Modes "1368x768_50" auch in der Lage sein das Display mit 50 Hz zu betreiben.


Schwarze Ränder mit trotz nativer X-Auflösung

Im Gegensatz zum nv-Treiber hat der nvidia-Treiber im Zusammenspiel mit Xine offenbar Schwierigkeiten bei der Berechnung des richtigen Seitenverhältnisses auf 16:9/16:10. Hier hilft die Angabe von --aspect=16:9 oder --aspect=16:10:

xinit -e vdr-sxfe --aspect=16:9 -f xvdr:tcp://localhost

Die zusätzliche Angabe der Auflösung in Form von --width=$BREITE --height=$HÖHE kann ebenfalls hilfreich sein.