Xine-plugin

Aus VDR Wiki
Wechseln zu: Navigation, Suche

Inhaltsverzeichnis

Beschreibung

Autor: Reinhard Nißl

Beschreibung:

Das Xine-Plugin ist dafür gedacht, mit einer Budget-DVB-Karte den VDR nutzen zu können. Normalerweise war mindestens eine Hardware-MPEG2-Dekoderkarte nötig (also eine DXR3-Karte oder eine fullfeatured DVB-Karte), wobei aber Budget-Karten als zusätzliche Karten zu einer solchen eingesetzt werden können um mehrere Aufnahmen gleichzeitig zu ermöglichen.

Mit dem Xine-Plugin ist es möglich, eine reine Software Dekodierung mit reinen Budget-Karten zu ermöglichen, entsprechend schnelle Hardware vorausgesetzt. Budget-Karten haben keinen MPEG2-Dekoder und demzufolge kein Device für einen Hardware Dekoder (Device = Zugriffspunkt im Dateisystem auf eine Hardwarekomponente). Für die regulären Medienspieler (XawTV und Co) benötigt man aber ein solches Demultiplexer-Device, von dem die Daten demultiplext abgenommen werden können. Mit einer DXR3 oder fullfeatured DVB-Karte ist das kein Problem, da diese so ein Gerät zur Verfügung stellen.

Das Xine-Plugin setzt hier an. Es holt den multiplexten MPEG2-Datenstrom von der Budget DVB-Karte und füllt die Daten in einen Zwischenspeicher, von dem der Xine-Medienspieler oder andere Programme, die DVB-Daten demultiplex können die Daten wieder abnehmen, in Software demultiplexen und als Video ausgeben.

Eine Alternative ist das Softdevice-plugin.

Auch eine Clientlösung ohne DVB (lokal) ist mit Hilfe des Streamdev-plugins möglich.
Clientlösung Skizze zum Verständnis: Link (leider falsch - auch beim Streamdev Server ist ein direktes abspielen möglich)


Bilder

Ausgabe ueber Kaffeine
Ausgabe ueber Xine-ui

Hardwareanforderungen

Hier sind einige Beispielkonfigurationen (bitte ergänzen):

CPU@MHz / RAM Grafikkarte Last Sonstiges
PIII@550 / 512 Matrox G550 mit vidix ruckelt bei OSD oder mit Deinterlaceing
PIII@933 / 512 nVidia GForce MX 5200 ~ 50% Xine-lib und Xine-Ui selber compiliert; xv; auch mit OSD immer ruckelfrei; Deinterlacing 70% Last
Athlon@800 / 512 ATI Radeon VE ruckelt bei hohen Auflösungen
PIII@700 / 256 ATI Radeon 7000 ~ 42% Xine über Netzwerk; xv; ruckelfrei @1280x1024x24, Deinterlacing ~60% Last
P4@2800 / 512 Matrox G550 ~ 50% ruckelt bei OSD, Deinterlaceing oder Fenstergröße
PII@400 / 256 NVIDIA Geforce 4 MX 480 XvmC nahezu ruckelfrei, leider kein OSD; xv: kann man sich nicht ansehen
PII@400 / 196 NVIDIA Geforce 4 MX 480 ~ 60% XvmC nahezu ruckelfrei, nur beim Ein- und Ausblenden ein kleines Stocken; Deinterlacing möglich
Athlon@1800 / 512 NV Gf Ti 4200 ~ 10% xv-Ausgabe: ruckelfrei für DVB
AMD64@32bit, 1800 / 512 NV Gf 6600 (PEG) ~ 35% Xv, tvtime wie in MANUAL vorgeschlagen. CPU läuft auf 1000 (Cool'n'Quiet). Nahezu perfekt
AMD Duron@1200 / 256 SIS740 (TV-Out) ~ 40% Xv, kein Ruckeln, Bild stockt kurz beim Umschalten
P4 Celeron (Northwood) 3.0GHz / 256MB ATI Radeon 9200 ~ 20% "neue" Nova-T PCI, kernel 2.6.15, gxine: ruckelfrei, Bild stockt kurz beim Umschalten
AMD Athlon@1200 / 768MB GeForce4 MX 440 ~7% Xvmc, keine OSD transparenz, ruckelfrei, ~20% mit OSD transparenz
AMD64@64bit, 3400@1000 / 2GB ATI Radeon 9600 XT 8% -
P4 3,14 GHz / 2 GB NVIDIA GeForce 7800 GS ~7% mit Deinterlacing, bei aktivem OSD ~25% Last
Pentium M 1,7 GHz / 2 GB GeForce FX 5200 ~3% XvMC mit HW-BOB deinterlacing, bei aktivem OSD ~8% Last
VIA C3 Nehemiah 1 GHz VIA CLE266 + interner MPG-2-Dek. ~15% XvMC über X11 und Xine-Plugin: völlig flüssig

Softwareanforderungen

  • xine-{lib,ui}, wobei Xine-ui nicht zwingend ist, normal sollte jedes Frontend welches auf Xine-lib aufsetzt funktionieren. (die anderen Frontends werden im Moment jedoch nicht die Option --enable-vdr-keys beherschen, ./configure --help weiß meistens mehr)
  • alternativ zum xine-ui lässt sich auch oxine als Frontend verwenden.

Installation

## laden der Sourcen
cd $SOURCEDIR
wget http://home.vr-web.de/~rnissl/xine-lib-cvs-<VERSION>.tar.bz2
wget http://home.vr-web.de/~rnissl/xine-ui-cvs-<VERSION>.tar.bz2
wget http://home.vr-web.de/~rnissl/vdr-xine-<VERSION>.tgz

## entpacken der Sourcen
tar xvzf vdr-xine-<VERSION>.tgz -C $(pwd)/VDR/PLUGINS/src
tar jxvf xine-lib-cvs-<VERSION>.tar.bz2
tar jxvf xine-ui-cvs-<VERSION>.tar.bz2

## setzen des Symlinks
cd VDR/PLUGINS/src
ln -s xine-<VERSION> xine

## Kopieren der "loops"
cd xine
mkdir -p /etc/vdr/plugins/xine
find . -name *.mpg -exec cp -v \{} /etc/vdr/plugins/xine \;

## link für den Player
ln -vs $(pwd)/xineplayer /usr/local/bin/xineplayer

## uebersetzen der xine-lib
cd ../../../../xine-lib
find $SOURCEDIR/VDR/ -name xine-lib.patch -exec patch -p1 -i \{} \;
./autogen.sh --prefix=/usr/local
make
make install
ldconfig

## uebersetzen des frontends
cd ../xine-ui
find $SOURCEDIR/VDR/ -name xine-ui.patch -exec patch -p1 -i \{} \;
./autogen.sh --prefix=/usr/local \
             --enable-vdr-keys
make
make install

Für 64-bit Prozessoren z.B. AMD64 ist das Makefile zu ändern

- #CXXFLAGS ?= -O2 -Wall -Woverloaded-virtual
+ #CXXFLAGS ?= -O2 -Wall -Woverloaded-virtual -fPIC

Danach wie gewohnt übersetzen:

cd $SOURCEDIR/VDR
make clean
make <OPTIONEN> all plugins

Nach dem ausführen der runvdr für X basiert:

xine "vdr:/tmp/vdr-xine/stream#demux:mpeg_pes"

Entgegen jeder Aussage, gehts natürlich auch "minimal" via Framebuffer:

fbxine "vdr:/tmp/vdr-xine/stream#demux:mpeg_pes"

Und übers Netz heißt es:

xine "netvdr://host:port#demux:mpeg_pes"

(:port ist dabei optional). Dazu muss man das Plugin mit dem zusätzlichen Parameter "-p" starten (siehe MANUAL), also:

-P 'xine -r -p'


Optionen

VDR_XINE_SET_VIDEO_WINDOW=1 für volle yaepg-plugin Unterstützung aktivieren


Konfiguration

In der aktuellen Version des Plugins befindet sich ein Player, mit welchen man andere Formate abspielen kann.

cp $SOURCEDIR/VDR/PLUGINS/src/mp3/examples/mplayer.sh.example /usr/local/bin/mplayer.sh

Anpassen

- MPLAYER="mplayer"
+ MPLAYER="/usr/local/bin/xineplayer"

Es sollte dazu gesagt werden, dass diese Geschichte im jetzigen Stadium nur mit Lirc funktioniert, somit auch nur im Modus TRADITIONAL des mplayer-plugins.

Parameter

Folgende Kommandozeilenparameter gibt es

Parameter Beschreibung
-i N instance number to append to FIFO directory
-q turn off debug messages on console
-r turn on remote (pressing keys in xine controls VDR)
-s switch to curses skin, while xine is disconnected

Die Parameter des Plugins können folgendermaßen übergeben werden.

vdr <VDR Parameter> -P'xine <parameter>' <weitere VDR Parameter>

Beispiel:

vdr -P'xine -r'

Sonstiges

Probleme

  • Prinzipiell auch Ausgabe des OSDs mit XVmC möglich, vereinzelt kann es zu Anzeigeschwierigkeiten kommen, die man aber über Xineeinstellungen umgehen kann [z. B. disable exact alpha blending und aktivieren von xvmc_nvidia_colorfix ]

SuSE spezifisch

Die Orginal Xine Packages von SuSE sind zu deinstallieren, da Sie für unseren Zweck vollkommen unbrauchbar sind.

echo xine-ui xine-lib xine-devel|xargs rpm -e --nodeps

Das dürfte im jetzigen Stadium bei jeder Distri aufs selbe hinaus laufen, da Sourcen benötigt werden.

Mit/Ab(?) SuSe 9.3 ist der Xine-Player bereits mit VDR ablauffähig. Jedoch ist das Stream-Verzeichnis nicht /tmp/vdr-xine. Siehe DOC´s. Nachteil ist aber eine hohe Prozessorlast bei den fertigen RPM Packages. Auf PIII@933 war VDR nur als teilweise Lauffähig (Ruckeln bei OSD und Timeshift). Das selber kompilieren von Xine-Lib, Xine-UI und des VDR brachte eine um 40-50% niedrigere Last (xv als Videotreiber, NVidia GForce FX5200).

Debian Sarge spezifisch

Debian kommt mit einer recht alten Version von automake(1.4). Diese muss auf min 1.5 upgedated werden. Ich habe 1.9 genommen. Also

apt-get install automake1.9

gefolgt von

update-alternatives --config automake

Dann sollte es gehen.

Tipps

Mplayer

Statt des xineplayers kann auch weiterhin der mplayer benutzt werden (sogar im SLAVE-Modus). Hier eine minimale mplayer.sh (fuer die Benutzung unter X11 und slave):

#!/bin/sh

CMDLINE="mplayer -fs -vo xv -ao oss -cache 4096 -slave -nolirc -quiet"
DISPLAY=:0.0 $CMDLINE "$1" 2>&1 | logger
exit

Xine mit VDR starten

Falls man Xine beim Start des VDR gleichzeitig mit öffnen möchte, müssen vor dem Kompilieren des Plugins noch folgende Zeilen im xine.c, Quellcode eingefügt werden:

bool cPluginXine::Start(void)
{
  // Start any background activities the plugin shall perform.
  if (!PluginXine::cXineDevice::Open())
  return false;
+ pid_t cpid;
+ switch (cpid = fork()){
+ case 0: SystemExec("xine -f --no-splash vdr:/tmp/vdr-xine/stream#demux:mpeg_pes");
+ }
  return true;
}

Stillpicture erzeugen

cat <BILD>.jpg \
    | jpegtopnm \
    | pnmscale -xsize=720 -ysize=576 \
    | ppmtoppm \
    | ppmtoy4m -F 25:1 -A 4:3 -I p -r -v 2 -n 1 \
    | mpeg2enc -f 0 -a 2 -q 1 -n p -T 120 -R 2 -g 12 -G 12 -o <NAME>.mpg


Befehl für kanotix/Debian Sid

png2yuv -j <file>.png -f 25 -I p -n 2 | mpeg2enc -f 3 -a 2 -b 7500 -o <file>.mpg


Links

  1. Xine Projekt Homepage
  2. Homepage des Plugins
  3. Xine-Plugin über Netzwerk nutzen
  4. Kanotix - Streaming-Server mit Xine-Plugin für Client mit Xine-Player
  5. XvMC
  6. Linvdr mit fbxine und vidix
In anderen Sprachen