Dies ist ein Plugin für "Video Disk Recorder (VDR)".

Geschrieben von:		Andreas Kool <akool@gmx.de>

Homepage des Projektes:	        http://akool.bei.t-online.de/vdr

Die aktuellste Version ist verfügbar auf: http://akool.bei.t-online.de/vdr/analogtv/download

Lizenzinformationen stehen in der Datei COPYING.

Beschreibung:
------------

Intern ist die Plugin ein Realzeit MPEG-1 - Encoder.

Mit der Hilfe dieses Plugins kann man folgendes analoges Equipment mit VDR verbinden:

 - bttv - kompatible analoge TV-Karten (z.B. Hauppauge WinTV ...) um TV-Känale
   anzusehen, die nur analog verfügbar sind.

 - Video-Grabber-Karten oder der S-Video-Eingang der TV-Karte um den guten alten
   VHS-Videorekorder anzuschließen und alte Aufnahmen in *.vdr Dateien umzuwandeln.

 - Camcorder um Urlaubsvideos auf dem Fernseher zu anzusehen

 - Webcams (z.B. via USB) um sich selbst fernsehen zu sehen ;-)

 - Plattenspieler um Platten mit VDR aufzunehmen


Vorraussetzungen:
-------------

 - Ein Realzeit-MPEG-Encoder, "mp1e" (http://zapping.sf.net) ist bevorzugt, 
   "ffmpeg" (http://ffmpeg.org) funktioniert auch gut
   oder ein Hardware-MPEG-Encoder (wie die Hauppauge PVR-250/-350)
 - die LIBDVB (http://www.metzlerbros.org/dvb/libdvb-0.5.5.tar.gz)
 - Video for Linux *Zwei* (V4L2) wird dringend empfohlen (http://www.bytesex.org/snapshot)
 - ALSA 0.9.3 (oder besser) wird dringend empfohlen (http://alsa-project.org)
 - optional Nextview EPG ("http://nxtvepg.sourceforge.net")
 - optional hoerzu2vdr (http://www.wontorra.net/filemgmt/index.php)


Installation:
-------------

Dieses Plugin wurde für VDR 1.1.x und VDR 1.2.x geschrieben.

Falls Du dieses Plugin als primäres Device benutzen willst (z.B. falls du
keine DVB- oder DXR3-Karte besitzt), solltest du mindestens VDR 1.2.1 benutzen.
(oder VDR 1.2.0 + ftp://ftp.cadsoft.de/vdr/vdr-1.2.0-fix-noosd.diff)

Im Moment wird ein Patch für VDR gebraucht, damit es funktioniert.

Vermutlich ist es möglich, dieses Plugin mit anderen Versionen von VDR 
zu benutzen, verlasse dich aber nicht darauf.

Schritte:

Wie gewohnt, entpacke das Plugin und erstelle einen Link:

  cd /usr/src/dvb/VDR/PLUGINS/src
  tar xjf /tmp/vdr-analogtv-x.x.x.tar.bz2
  ln -sf analogtv-x.x.x analogtv

Nun sollte die LIBDVB installiert werden:

dazu http://www.metzlerbros.org/dvb/libdvb-0.5.5.tar.gz downloaden,
_parallel_ zum DVB Verzeichnis auspacken, patchen

  cd /usr/src/dvb
  patch -p1 < VDR/PLUGINS/src/analogtv/patches/libdvb-0.5.4.patch

(
beim Einsatz von dvb-kernel könnte nun ein

  ln -sf dvb-kernel/linux/include include

hilfreich sein ...
)

und installieren

  cd libdvb-0.5.5
  make
  make install


Bei Einsatz einer PVR-Karte kann das folgende Kapitel "mp1e" übersprungen
werden:

Jetzt "mp1e" auschecken:

  cd /usr/src/dvb/VDR/PLUGINS/src/analogtv
  cvs -d:pserver:anonymous@cvs.zapping.sf.net:/cvsroot/zapping login

(Wenn nach dem Passwort für "anonymous" gefragt wird, einfach Enter drücken)

  cvs -z3 -d:pserver:anonymous@cvs.zapping.sf.net:/cvsroot/zapping co rte/mp1e
  cvs -z3 -d:pserver:anonymous@cvs.zapping.sf.net:/cvsroot/zapping co rte/src

[
  Oder benutze meinen letzten Checkout (vom april, 10. 2003) von

    "http://akool.bei.t-online.de/vdr/analogtv/download/rte-10mar03.tar.bz2"

  und entpacke es:

    tar xjf rte-10mar03.tar.bz2
]


Jetzt muss mp1e gepatcht werden:

  patch -p0 < patches/mp1e.patch

und kompiliert werden:

  cd rte/mp1e
  ./configure
  make
  make install


Jetzt muss VDR gepatcht werden:


  cd ...../vdr-1.x.xx

nur wenn VDR Version 1.2.2 oder kleiner benutzt wird:

  patch -p1 < PLUGINS/src/analogtv/patches/vdr.patch

wenn der autopid-Patch benutzt wird:

  patch -p0 < PLUGINS/src/analogtv/patches/vdr-1.2.4-autopid.patch

_oder_ wenn der autopid-Patch _nicht_ benutzt wird:

  patch -p0 < PLUGINS/src/analogtv/patches/vdr-1.2.4.patch

_oder_ wenn VDR Version 1.3.x benutzt wird:

  patch -p1 < PLUGINS/src/analogtv/patches/vdr-1.3.0.patch

schließlich kompilieren:

  make
  make plugins

und installieren.


Jetzt sollte VDR mit "-Panalogtv" gestartet werden können.


Vielleicht willst du auch "ffmpeg" ausprobieren:

  cvs -d:pserver:anonymous@mplayerhq.hu:/cvsroot/ffmpeg login

(Wenn nach dem Passwort für "anonymous" gefragt wird, einfach Enter drücken)

  cvs -z9 -d:pserver:anonymous@mplayerhq.hu:/cvsroot/ffmpeg co ffmpeg

[
  Oder benutze meinen letzten Checkout (vom april, 1. 2003) von
  "http://akool.bei.t-online.de/vdr/analogtv/download/ffmpeg.tar.bz2"

  und entpacke es:

    tar xjf ffmpeg.tar.bz2
]

und kompiliere:

  cd ffmpeg
  ./configure --disable-altivec --disable-audio-beos --disable-dv1394 --disable-network --disable-zlib --disable-a52 --disable-vhook --disable-ffserver
  make install


Dieses Plugin benötigt die gewünschten Fernsehkanäle resp. analogen Geräte
in der Datei "channels.conf".
Die beiliegende "examples/channels.conf.analogue.IESY" kann direkt an die
"channels.conf" angehängt werden, wobei die Frequenzen so nur für das
Hessische Kabelnetz von IESY gelten.


Die einzelnen Felder der channel definition:

-> "RTL:210250:B6C0D0:C:0:160:80:0:32001:12003:0:0:0"

Name       - Sendername
Frequency  - Frequenz, siehe z.b. "europe-west.list"
	     Geräte/Eingänge, die _keinen_ Tuner besitzen
	     (wie der S-Video- oder Composite-Eingang) müssen hier
             mit der Frequenz 1 definiert werden (vdr-1.2.6 und höher
             akzeptiert leider eine Frequenz 0 nicht mehr)
Parameters - Norm:
	     B6 = PAL
	     B7 = NTSC
             B8 = SECAM

             Capture device:
             C0  = /dev/video0
             C12 = /dev/video1
             C23 = /dev/video2
             C34 = /dev/video3
             C45 = /dev/video4

             Video source:
             D0  = Television
             D12 = Composite1
             D23 = Composite2
             D34 = S-Video

Source     - fix "C"
Srate      - fix "0"
VPID       - die gewünschte Video PID (beliebig)
APID       - die gewünschte Audio PID (beliebig), optional Mixer-Input-Device
TPID       - die gewünschte Teletext PID (beliebig)
CA         - fix "32001"
SID        - Service ID (siehe z.b. beiliegende "ChannelMap.h")
NID        - for future use, currently always 0
TID        - for future use, currently always 0
RID        - fix "0" (oder beliebige Werte, um doppelte Einträge zu ermöglichen)


ACHTUNG: Mit analogTV-0.9.11 wurde die Syntax der "channels.conf" geändert:

	 Die Video source (0 = Television, 1 = Composite1, 2 = S-Video, ...)
         wurde früher in die Spalte Srate eingetragen, nun in die Spalte
         Parameters hinter dem "D"

	 Die capture device (10 = /dev/video0, 11 = /dev/video1 ...)
         wurde früher in die Spalte SID eingetragen, nun in die Spalte
         Parameters hinter dem "C"

	 ALT:  RTL:210250:M64:C:0:160:80:0:32001:10:0:0:0
	 -----------------^^^
	 -----------------------^ Video source
	 ----------------------------------------^^ Capture device + 10

	 NEU:  RTL:210250:B6C0D0:C:0:160:80:0:32001:12003:0:0:0
	 -----------------^^^^^^ "C=0" -> Capture device 0, "D0" -> Television
	 -------------------------------------------^^^^^ SID von RTL

         Bedingt durch diese Änderung verschwinden leider alle analogen
         EPG-Einträge sowie das Finetuning!


In die Spalte SID sollte mit Hilfe der beiliegenden "ChannelMap.h"
die Service ID des jeweiligen Senders eingetragen werden. Dadurch
wird es problemlos möglich, auch analoge Sender mit Hilfe des
tvtv-Plugins zu programmieren.


In der "channels.conf.analogue.IESY" befinden sich bereits drei
Beispieleinträge für alternative analoge Geräte:

-> WEBCam:1:B6C23D0:C:0:160:80:0:32001:65002:0:0:0

Eine WEBCam, die via USB (als "/dev/video2") angeschlossen ist. Damit kann
man sich selber im Fernsehen sehen oder aufnehmen ;-)

-> Composite:1:B6C0D12:C:0:160:80,6:0:32001:65003:0:0:0

Der Composite-Eingang der TV-Karte.
Bei diesem Eintrag sieht man via "Apid2=6", wie ein alternativer
Mixer-Eingang angegeben werden kann, sprich: normalerweise kommt der
Ton aus dem Eingang, der im OSD-Setup eingetragen wurde. Wird jedoch
vom Composite1 Eingang abgespielt, soll das OSS-Device "6" ("Line")
verwandt werden.

-> S-Video:1:B6C0D23:C:0:160:80:0:32001:65004:0:0:1

Der S-Video-Eingang der TV-Karte. Damit kann man prima alte VHS-Video
Kassetten in .vdr Dateien umwandeln ;-)


Nochmals zusammengefasst (aufgrund diverser Nachfragen ;-):

Entscheidend sind die Spalten

  Frequency
    Die jeweilige Senderfrequenz (siehe xawtv)

  Parameters
    Aus welchem Device kommt das Videosignal des bttv-Treibers?
    Hierbei ist entscheidend, in welcher Reihenfolge die diversen
    Video4Linux-Treiber geladen wurden.

    Falls zuerst der bttv-Treiber geladen wird, und dann der DVB-Treiber,
    und dann eine USB-WebCam, sieht das so aus:

      /dev/video0 - bttv (analog-TV-Karte) => "C0"
      /dev/video1 - DVB-Treiber 	   => "C12"
      /dev/video2 - USB-WebCam		   => "C23"

    Ergo muß in die Spalte Parameters "C0" für die TV-Karte, und
    "C23" für die WebCam eingetragen werden.

    Wo kommt das Video-Signal her? (siehe auch hier xawtv), bei einer
    Hauppauge WinTV ist das:
      0 = Television  => "D0"
      1 = Composite1  => "D12"
      2 = Composite2  => "D23"
      3 = S-Video     => "D34"

    Bei einer PVR siehst das hingegen so aus:
      0 = Composite 0              => "D0"
      4 = Tuner 0                  => "D45"
      5 = Composite 4 (via Chinch) => "D56"
      9 = S-Video     	   	   => "D89" 


Bedienung:
----------

Einfach auf den gewünschten Sender wechseln und gucken oder aufnehmen ;-)

Da dieses Plugin für den VDR eine vollständige DVB-Karte darstellt, sind
alle VDR-Features (wie Timeshift, Timergesteuerte Aufnahmen usw.) ganz
normal nutzbar.

Besser ausgedrückt entspricht dieses Plugin einer budget-DVB-Karte, was
bedeutet, daß man den VDR zwar durchaus nur mit einer analogen TV-Karte
und diesem Plugin verwenden kann, aber *sehen* kann man nichts!

Um das Fernsehprogramm auch zu sehen, benötigt man *auf*jeden*Fall* eine
Karte mit einem Hardware-MPEG-Decoder (full featured DVB-, DXR3- oder
Hollywood-Plus-Karte). Diese TV-Out-Karte muß sich nicht in dem Rechner
mit der Analog-TV-Karte befinden, sondern kann Dank des streamdev-Plugin
auch in irgend einem anderen (über LAN erreichbaren) Rechner stecken!


Über das Hauptmenü des VDR ("Setup AnalogTV") oder über
"Setup->Plugins->analogtv" kommt man in die Einstellungen für den
analogTV-Plugin. Z.Zt. werden die Einstellungen nur abgespeichert, wenn
das Menu via Setup->Plugins->analogtv aufgerufen wird!


Dieses Setup ist in mehrere Kapitel unterteilt:

Im Kapitel "Picture Properties" (das nur erscheint, wenn man sich gerade auf
einem analogen Sender befindet) können Kontrast, Helligkeit, Farbton,
Sättigung sowie die Senderfrequenz verstellt werden.
Jeder Druck auf [Links] oder [Rechts] auf einem der 5 Felder führt sofort
zu einer Änderung, die im laufenden Fernsehprogramm beobachtet werden kann.
Dies funktioniert allerdings *nur* mit V4L2! Mit V4L1 muß, um die
Änderungen wirksam werden zu lassen, erst auf einen anderen analogen Sender
umgeschaltet werden!

Tip: Bildstörungen können äußerst wirksam durch _reduzieren_ des Kontrast
     vermieden werden!


Im Kapitel "EPG" kann das analoge EPG in den VDR übernommen werden.
Dazu muß Nextview EPG von "http://nxtvepg.sourceforge.net" installiert sein.

Mittels "Load EPG now" kann das EPG ad hoc übernommen werden.

Unter "EPG from" wird eingestellt, ob das EPG direkt von nxtvepg
übernommen ("pipe"), oder aus mehreren ASCII-Dateien ("file") geladen
werden soll. Der "file" Modus ist zum einen für Debugging-Zwecke, zum anderen
für Installationen, bei denen sich die analoge-TV-Karte nicht im Rechner
befindet gedacht.

Die vom "file" Modus benötigten Dateien werden folgendermaßen erzeugt:
  nxtvepg -dump pi -prov FF > /tmp/pi.txt
  nxtvepg -dump ai -prov FF > /tmp/ai.txt
  nxtvepg -dump pdc -prov FF > /tmp/pdc.txt

Unter "External programm" kann ein Programm eingetragen werden, daß direkt
vor dem eigentlichen übernehmen der EPG-Daten aufgerufen werden soll.
Ich persönlich habe hier

  "ssh tv nxtvepg -dump pi -prov %s > /tmp/pi.txt"

stehen, d.h. bei der automatischen EPG-Übernahme holt sich analogTV mittels
ssh von meinem Rechner "tv" die EPG-Daten.
Ein evtl. "%s" wird durch den weiter unten beschriebenen "EPG provider"
ersetzt.

Unter "EPG provider" muß eingetragen werden, welchen EPG-Anbieter nxtvepg
übergeben soll.
Hier in Deutschland gibt es z.Zt. 3 EPG-Provider:

  9001 TRT
  0dc7 3sat
  0d92 Kabel 1

Sinnvoller ist es jedoch, in nxtvepg unter "Configure->Merge providers..."
die Provider 3sat und Kabel 1 zu einer "merged database" zu verbinden,
und als "EPG provider" "FF" anzugeben.

Unter "Autoupdate (hours)" kann eingestellt werden, in welchem Zeitrhythmus
das EPG vollautomatisch übernommen werden soll.

Wird hier "0" eingetragen, führt analogTV *keinen* automatischen Update
durch - ansonsten sollte hier z.b. "24" für "ein mal am Tag" eingetragen
werden.

Unter "Theme language" kann eingestellt werden, ob analogTV in den Subtitle
das Genre der jeweiligen Sendung stellen soll.

Z.Zt. wird das Genre in 3 verschiedenen Sprachen übermittelt:

  eng - Englisch
  ger - Deutsch
  fra - Französisch

Wird eine dieser drei Sprachen gewählt, füllt analogTV den Subtitle mit
dem oder auch den Genre(s), gefolgt von eventuellen Zusatzinformationen wie

  Mono
  2-chan
  Stereo
  Surround
  Wide
  PAL+
  Digital
  Encrypted
  Live
  Repeat
  Subtitles
  Rating x (of 1..7)
  age: x and up

Ein Subtitle kann dann beispielsweise so

  Soziales/Politik/Wirtschaft Nachrichtenmagazin/Berichte [Stereo, Wide]

aussehen.

Wird unter "Theme language" hingegen "none" eingestellt, füllt analogTV
den Subtitle nicht.

Da die Sendernamen in nxtvepg häufig anders lauten, als in der
"channels.conf" des VDR, kann analogTV mit einer Zuordnungstabelle
bei der Übernahme geholfen werden.
Diese Zuordnungstabelle heißt "epg.conf", und gehört in das
Plugin-Config-Verzeichnis, also etwa "/video/plugins".

Diese Datei "epg.conf" darf beliebig viele Zeilen der Form:

  VDR-Name : nxtvepg-Name : Modus

enthalten.

Wenn analogTV die Sendernamen vergleicht, achtet es _nicht_ auf
Groß/Kleinschreibung.

Der Modus definiert, ob alle (0), oder nur Einträge, die x * 12 Stunden
in der Zukunft liegen, übernommen werden sollen.

Beispiel:

  Das Erste:ARD:1

Dies bedeutet: Im VDR gibt es einen Sender "Das Erste". In diesen sollen
alle EPG-Einträge des nxtvepg-Senders "ARD" übernommen werden, aber nur
Sendungen, die ab _jetzt_ betrachtet erst in 12 Stunden laufen.

Über diesen Mechanismus ist es durchaus möglich, analoge EPG-Daten in
digitale Sender zu übernehmen! Hier im Hessischen Kabelnetz ist es so,
daß das digitale EPG zwar von viel besserer Qualität ist, jedoch maximal
1 Tag in die Zukunft reicht. Das analoge EPG hingegen ist zwar von
schlechterer Qualität, reicht jedoch ca. 8 Tage in die Zukunft.

Ergo erreiche ich über obigen Eintrag, daß das EPG von "heute" aus dem
digitalen EPG stammt, die Einträge der kommenden 8 Tage jedoch aus dem
analogen EPG.

Die beiliegende "examples/epg.conf.IESY" kann direkt übernommen werden,
sollte jedoch evtl. noch angepaßt werden.

Während der EPG-Übernahme schreibt analogTV ein Protokoll in die Datei
"/tmp/epg.err", die nach der ersten EPG-Übernahme auf evtl. Fehler
überprüft werden sollte! Besondere Aufmerksamkeit sollte ganz unten
dem Abschnitt

  Unknown channels are:
  Name=TRT - 131 event(s)
  Name=Tele5 - 57 event(s)
  Name=ORF2 - 110 event(s)

gewidmet werden.

Obiges Beispiel besagt, das analogTV für die nxtvepg-Sender "TRT", "Tele5"
sowie "ORF2" diverse EPG-Einträge hat, diese aber nicht an den VDR
übergeben konnte, da nicht bekannt ist, in welche VDR-Sender die Daten
übernommen werden sollen.

In meinem Fall ist das übrigens in Ordnung, da ich keinen dieser Sender
empfangen kann.

Leider erkennt nxtvepg unter V4L2 nicht, ob gerade analogTV läuft.
Daher beendet analogTV einen evtl. laufenden nxtvepg vor dem Umschalten
auf einen analogen Sender, und startet nxtvepg nach einem längeren
Verweilen auf einem digitalen Sender wieder neu (im "-daemon" Modus).

Leider arbeitet nxtvepg _nicht_ mit einer PVR Karte zusammen, da laut
Hauppauge die PVR-Karte kein vbi unterstützt.

Daher ist es möglich, das EPG auch mittels des Tools hoerzu2vdr
(http://www.wontorra.net/filemgmt/index.php) aus dem Internet
zu übernehmen.

Hierzu sind folgende Einstellungen vorzunehmen:

  1. http://www.wontorra.net/filemgmt/visit.php?id=7 downloaden,
     und zum Beispiel unter /video/hoerzu2vdr auspacken. 

  2. Lt. beiliegendem README konfigurieren, unter "examples/hoerzu2vdr"
     befindet sich meine (für IESY, Hessen gültige) Konfiguration.
     Für newbies: "chmod +x start.sh" nicht vergessen ;-)

  3. Im OSD-Setup des analogTV-Plugin folgendes einstellen:
       EPG aus:                     hoerzu2vdr 
       Externes Programm:           cd /video/hoerzu2vdr && ./start.sh &
       Automatisch laden (Stunden): 72

Ab sofort wird nun alle 3 Tage vollautomatisch das analoge EPG für 7 Tage
im voraus aus dem Internet beschafft.


Im Kapitel "MPEG Encoder" können diverse Parameter des MPEG-Encoders
beeinflußt werden. Experts only ;-)
Wichtig hierbei: Die meisten Änderungen werden erst wirksam, wenn der
"Restart" Button betätigt wird, da dadurch der MPEG-Encoder neu
gestartet wird!

Unter Encoder kann der gewünschte MPEG-Encoder ausgewählt werden.
Zur Zeit (18. November 2003) sieht die Unterstützung für die
einzelnen Encoder folgendermaßen aus:

 - mp1e       - funktioniert, zur Zeit die beste Wahl

 - ffmpeg TS  - funktioniert NICHT (TS wird erst ab ffmpeg-0.4.7 unterstützt)

 - ffmpeg PES - funktioniert, mein Athlon 1200 hat jedoch nicht genug
   	      	Power, um ein ruckelfreies Bild hinzubekommen.

 - fame	      - funktioniert NICHT - es fehlt noch ein Muxer, der Audio
   	      	und Video zusammenpackt.

 - test	      - nur für Debuggingzwecke, dont use

 - lavrec     -	funktioniert NICHT - das ausgegebene .avi muß noch nach
   	      	MPEG-1 konvertiert werden.

 - mencoder   -	funktioniert NICHT - z.Zt. kann der mencoder (noch?)
   	      	kein MPEG-1/2 Layer II Audio ausgeben

 - PVR TS     -	nicht zu empfehlen, Ton stottert
       	      	bitte PVR PES verwenden 

 - PVR PES    - siehe dazu das Kapitel PVR

 - nvrec TS   - funktioniert NICHT, da nvrec-20030316 nur ffmpeg-0.4.6 
   	      	unterstützt, TS jedoch erst ab ffmpeg-0.4.7 verfügbar wird

 - nvrec PES  - funktioniert, sollte nur mit der GOP Sequenz "I" 
   	      	(nur I-Frames) betrieben werden (sonst kommt es ständig
                zu Farbfehlern), nur in "Mono" kommt Ton
 		A/V ist meistens (von Anfang an) asynchron,
                nach 2 .. 4 Minuten Laufzeit kommt es zu ring buffer 
                overflows im VDR, aber im Gegensatz zum mp1e *keine* 
                Bildruckler!

Der Eintrag "Video bit rate" ist das wichtigste Stellrad überhaupt!
Hier muß jeder selbst den optimalen Kompromiss zwischen CPU-Belastung
und Bildqualität finden.
Ab etwa 2,3 Mbit/s wird die Bildqualität akzeptabel, allerdings gibt es
noch Bildstörungen bei schnellen Szenenwechseln oder Actionszenen.
Ab etwa 5 MBit/s würde ich mal von DVD-Qualität sprechen (ich persönlich
verwende 5 MBit/s).
Sehr wichtig ist, die CPU-Belastung *unter* 90% zu halten, da sonst durch
die notwendigen Framedrops sehr bald eine A/V-Asynchronität eintritt.

Unter "Image size" kann die vom MPEG-Encoder zu enkodierende Bildgröße
eingestellt werden. Hier gilt die Grundregel: Je größer, desto bessere
Bildqualität, und auch höhere CPU-Belastung.
Alle hier angebotenen Bildgrößen kann die DVB-Karte per Hardware auf
720x576 hochskalieren.

Mit "Clipping" erreicht man, das der Encoder links und rechts 16 Pixel
nicht encodieren muß.

Wer wissen möchte, was GOP-Sequenz bedeutet, sollte sich ein Buch über
MPEG zulegen ... Ganz allgemein ist "I" am wenigsten CPU-belastend, und
"IBBPBBPBBPBBP" produziert kleinere Dateien (beim Aufnehmen).
Außerdem funktioniert _nur_ bei der GOP-Sequenz "IBBPBBPBBPBBP" das
schnelle Vor-/Zurückspulen des VDR!

Auch eine Erklärung von "Filter" würde dieses README bei weitem sprengen,
grundsätzlich gilt:
"1 YUV 4:2:0 fastest" ist am schnellsten, und "8 YUV 4:2:0 v-decimation"
erzeugt die beste Bildqualität.

"Motion compensation" ist der zweitgrößte CPU-Fresser, und sollte am
besten auf "0" bleiben (disabled) - wer möchte, kann jedoch mit Werten
zwischen 4 und 64 herumexperimentieren.

Deinterlacing ermöglicht, das Zeilensprungverfahren herauszurechnen.
Dazu sollte parallel der Filter "9 YUYV 4:2:2 h-decimation" gewählt werden.

Alle obigen Parameter sind auch in der manual-page des MPEG-Encoders "mp1e"
beschrieben ("man mp1e")

Mit "Profile" lassen sich einige sinnvolle Encoder-Optionen voreinstellen:

 - "fastest (weakly CPU)"  - für ganz schwache CPUs (VIA Eden ...)
 - "medium (like akool)"   - so betreibe ich den Plugin
 - "best (strong CPU)"	   - optimale Bildqualität (ab Pentium 4/3000 :-)
 - "low filesize"	   - ganz schlechte Bildqualität, und sehr
   			     geringe Dateigröße für Aufnahmen
			     ohne bleibenden Wert
 - "PVR"      		   - optimale Settings für eine PVR-Karte
 - "Automatic"		   - automatische Anpassung auf PVR/medium 


Im Kapitel "Audiodevice" kann eingestellt werden, woher der analogTV-Plugin
den Ton bekommt. (Bekanntermaßen wurde ja ein Klinke-Kabel zwischen der
TV-Karte und der Soundkarte angeschlossen ...)

Bei Einsatz des OSS-Soundtreibers (egal, ob native oder ALSA-Emulation)
gehört hier

PCM device      : /dev/dsp
OSS Mixer device: /dev/mixer
OSS Mixer input : Line, Line1, CD ... je nach verwendetem Anschluß

hinein, bei Einsatz des ALSA-Soundtreibers

PCM device      : alsa/default

hinein.

Unter "Audio mode" kann zwischen Mono und Stereo gewechselt werden.
Hier ist auch "Dual channel" (für Sendungen in 2 Sprachen) möglich,
jedoch muß der dann gewünschte Kanal am A/V-Receiver ausgewählt werden.


Im Kapitel "Various" gibt es folgendes:

Der Eintrag "Debug level" definiert, wie viel Debug-Output der Plugin
ausgeben soll. Achtung: bei > 2 wird enorm viel
(bis hin zum vollständigen Dump der MPEG-Frames) Output erzeugt!
Wer mir einen Bug-Report zuschickt, sollte *bitte* den Debug-level auf 3
stellen, und der Mail beilegen!

Mit "Hide Mainmenu Entry" läßt sich der Eintrag in VDRs Hauptmenü
unterdrücken, und mit "Encoder always running" ist es möglich, den
MPEG-Encoder immer - d.h. auch über Senderwechsel hinweg durchlaufen
zu lassen, wodurch das Umschalten zwischen analogen Sendern wesentlich
schneller wird. Auch dies ist jedoch _nur_ mit V4L2 möglich!
Wenn sich der VDR einige Minuten lang nicht mehr auf einem analogen
Sender befindet, wird der Encoder trotz dieser Einstellung automatisch
beendet.


Im Kapitel "Interna" sind (Read only) einige interne Variablen einsehbar.


PVR:
----

Seit analogTV-0.9.15 werden die Hauppauge PVR-Karten (mit on-Board MPEG-2
_Encoder_) unterstützt.

Der MPEG-Dekoder der PVR-350 wird _nicht_ unterstützt!

Dafür müssen die folgenden Schritte unternommen werden:

1. Der entsprechende Kartentreiber muß von "http://ivtv.sf.net" gesaugt
   werden:
     cvs -d:pserver:anonymous@cvs.sourceforge.net:/cvsroot/ivtv login
     cvs -z3 -d:pserver:anonymous@cvs.sourceforge.net:/cvsroot/ivtv co ivtv
     
     patch < patches/ivtv-0.1.9.diff

     cd ivtv/ivtv/driver
     cp ../utils/videodev2.h .
     make

2. Die PVR Firmware muß installiert werden:
     cd ../utils 
     ./ivtvfwextract.pl

3. Dieser Treiber muß geladen sein:
     cd /usr/src/dvb/ivtv/ivtv/driver
     modprobe i2c-algo-bit
     modprobe tuner type=5 # für einen PAL-Tuner
     insmod ./msp3400.o once=1 simple=1 debug=2
     modprobe videodev
     insmod ./saa7115.o
     insmod ./ivtv.o debug=1 mpg_buffers=100 video_nr=0
     # insmod ./tveeprom.o
     # ../utils/test_ioctl -u 0xff -p 4 -f width=480,height=576

   Wichtig: Der ivtv-Treiber sollte als _erster_ V4L-Treiber geladen werden! 
   	    Mit der Modul-Option "video_nr=X" kann angegeben werden, unter
            welcher Minor Device Nummer ("/dev/videoX") der Treiber
            auftauchen soll.

4. Im OSD-Setup des analogTV-Plugins sollten folgende Einstellungen
   vorgenommen werden:
     Encoder:                 PVR PES
     Video Bitrate: 	      18
     Audio Bitrate: 	      192
     Bildgröße: 	      480x576
     Encoder läuft immer:     Ja

     Es sind natürlich andere Parameter wie z.b.:
     Video Bitrate: 	      55
     Audio Bitrate: 	      224
     Bildgröße: 	      720x576
     möglich, diese führen jedoch primär zu gigantischen Aufnahmen!


@TRANSLATE_BEGIN
Sky/NTL/Telewest Digibox:
-------------------------

From 0.9.30 onwards, the plugin supports control of Sky, NTL and Telewest
digiboxes using a redremote IR blaster (http://www.redremote.co.uk/serial),
only Sky mode has been tested as of yet. Red dot killing is also supported
- enable backup hack in the options.

Channel lines in channels.conf should be defined with the digibox 
channel number in the frequency field - a sample channel file is supplied 
in examples/channels.conf.analogue.sky.
@TRANSLATE_END


Performance:
------------

Viele fragen mich, welche CPU-Leistung für den MPEG-Encoder benötigt wird.
Bislang kann ich dazu folgendes sagen:

 - hier auf meinem P4 2400 braucht der Encoder ca. 3% CPU
 - hier auf meinem Athlon 1200 interessanterweise ca. 50% CPU
 - auf Saschas Duron 800 braucht der Encoder ca. 20% CPU
 - auf Stefan Preuss Duron 1100 braucht der Encoder ca. 15 .. 30% CPU
 - auf Renes Duron 1200 braucht der Encoder ca. 20 .. 30% CPU
 - auf Tobias VIA C3 1 GHz braucht der Encoder ca. 50% CPU
 - Andre Neumann betreibt den Encoder mit voller (720x576) Auflösung,
   8 MBit Video Bitrate, 160 KBit Audio Bitrate auf einem Athlon XP 1800+,
   der auf eine Load von ca. 30% kommt


Tipps und Tricks:
-----------------

 - Wer SuSE-8.1 oder SuSE-8.2 einsetzt, kommt durch ein schlichtes

     modprobe bttv09

   in den Genuß von Video4Linux 2 - was _einiges_ an Performance und
   Stabilität bringt!

 - Das bttv(09) Modul sollte mit der Option "gbuffers=24" geladen
   werden, um die Anzahl der internen Grabbing-Buffer zu erhöhen.
   (24 ist der optimale Wert für die Standard-GOP-Sequenz "IBBPBBPBBPBBP")

     modprobe bttv09 gbuffers=24 gbufsize=1000000

   (Das kann wahlweise auch in der "/etc/modules.conf" erfolgen)

 - Das Modul msp3400 sollte mit der Option "once=1" geladen werden

 - Während das AnalogTV-Plugin benutzt wird, sollten keine externen
   Prozesse die Systemuhr verstellen, da diese für die A/V-Synchronisation
   extrem wichtig ist!

   Also weg mit

     - ntp
     - netdate

   und ähnlichen Programmen!

 - Wer eine TV-Karte mit Bt878-Chip einsetzt ... ein "lspci" zeigt etwa
   so etwas an:
     [ ... ]
     00:0a.0 Multimedia video controller: Brooktree Corporation Bt878 (rev 02)
     00:0a.1 Multimedia controller: Brooktree Corporation Bt878 (rev 02)
     [ ... ]
   (also _zwei_ Bt878 Einträge), benötigt häufig *keine* Soundkarte!

   Es genügt vollkommen, das Modul "btaudio" zu laden

     modprobe btaudio

   und die dadurch neu entstehenden "/dev/dspX" zu verwenden.
   (Siehe dazu auch "/usr/src/linux/Documentation/sound/btaudio")

   Falls der btaudio-Treiber zwar mit xawtv, aber nicht mit mp1e funktioniert,
   hilft evtl. der "patches/mp1e_btaudio.diff" Patch.

   Leider ist bei der Pinnacle Systems Studio PCTV pro
   (meine Karte :-( der MSP34xx nicht korrekt an den BT868 Chip angeschlossen,
   daher funktioniert der btaudio-Treiber z.b. mit dieser Karte nicht.

 - Bei besonders schwachen Rechnern ist es evtl. hilfreich, die
   grabbing-Buffer innerhalb von "mp1e" zu erhöhen. Siehe dazu
   "patches/mp1e.buffer.patch". Leider funktioniert nach Anwendung dieses
   Patches der Ton _nur_ noch in "Mono", bei Einstellung "Stereo" kommt
   gar kein Ton mehr!


Probleme:
---------

Alle mir bekannten stehen in PROBLEMS. Bitte diese Datei *vor* Mails
an mich oder die Mailingliste lesen - Danke!
Weitere Tipps finden sich übrigens in der "FAQ" ;-)

Ausserdem gibt es unter http://www.phonedation.de/VDR/AnalogHowTo.txt
ein HOWTO!

Zum leidigen Thema A/V-asynchron hier nochmals zusammengefaßt die
wichtigsten Dinge (hier bei mir ist es seit der Plugin-Version 0.8.8
absolut synchron, und das auch _über_ Stunden hinweg!)

 - wenn _direkt_ nach dem zappen auf einen analogen Sender A/V-Asynchronität
   auftritt, und dabei der Ton ca. 1 Sekunde vor dem Bild kommt, dann
   kommt der Ton *nicht* aus dem analogTV-Plugin, sondern direkt aus der
   Sound-/TV-Karte! Dann stimmt etwas nicht mit den Mixer-Einstellungen!
 - V4L2
 - ALSA (0.9.6 oder besser)
 - immer meine neueste Plugin-Version verwenden
 - bei einem Update des Plugin auch immer den mp1e _komplett_ neu
   mit dem jeweils beiliegenden Patch erstellen und installieren
   (d.h. "rte-10mar03.tar.bz2" downloaden, auspacken, lt. obiger Anleitung
    patchen, make sowie make install!)
 - die Video bit rate solange _runterdrehen_, bis die "system load"
   weit unter 90% sinkt.
 - die Default-Einstellungen des Plugin verwenden (dazu am besten das
   Profil "medium (like A.Kool)" im OSD-Setup einstellen
 - darauf achten, das der Empfang so gut wie irgend möglich ist, und
   evtl. via Finetuning optimieren
   (total verrauschte Sender führen zu massivem Frame-drop)
 - Prozesse, die die Systemuhr verstellen (ntp, netdate ...) abstellen


Wenn sich der Encoder mp1e nicht kompilieren/linken läßt, hängt das
meistens mit kaputten Sound-Treiber-Installationen zusammen.
Als schnelle Abhilfe kann (nach dem ./configure) in der Datei
"rte/mp1e/config.h"

  #define HAVE_ALSA
  #define HAVE_ESD

oder

  #define HAVE_OSS

entfernt werden.

Falls der Compiler bei:

make[3]: *** [mpeg2.lo] Error 1

stehen bleibt (ein Zeichen für einen zu alten gcc), kann in der Datei
"rte/mp1e/video/mpeg2.c" die Zeile 44 von

  #if 1 // def OPTIONS_M2I

in

  #if 0 // def OPTIONS_M2I

abgeändert werden - danach sollte sich mp1e compilieren lassen.


Wenn sich das Modul "memcpy.c" nicht compilieren läßt,

gcc version 2.95.4 z.b. meldet

memcpy.c:220: parse error before `::'

kann durch _löschen_ der Zeile

HAVE_FAST_MEMCPY = 1

im "Makefile" der MMX enhanced memcpy() deaktivert werden.


Wenn sich der mp1e sofort mit der Meldung

mp1e:mmx.c:172: Failed to identify CPU (2, No such file or directory)

verabschiedet, sollte man über die Anschaffung einer etwas aktuelleren
CPU nachdenken ;-)

Wenn gar nix geht:
Den vdr im _Vordergrund_ starten, d.h. auf einer Linux-Console
"vdr -Panalogtv" eingeben. Dann in das OSD-Setup von analogTV
gehen, und dort "Debug level" mindestens auf 1, besser auf 3,
sowie "Debug output" auf "stdout" stellen.
Nun kann beim Umschalten auf einen analogen Kanal in der Console genau
beobachtet werden, was passiert - oder eben schief geht.

Für wen das alles nur böhmische Dörfer sind, sollte "Debug output" auf
"file" stellen, 1 .. 2 mal zwischen analogen Sendern umschalten, und mir
dann die Datei "/tmp/analogTV.log" an akool@gmx.de schicken.

Final noch zwei Bitten: Zum einen freue ich mich über jede (funktionierende)
zugeschickte "channels.conf" und auch "epg.conf", damit ich die anderen
Usern zur Verfügung stellen kann.
Zum anderen freue ich mich über "/tmp/analogTV.rep" Report-Dateien!
Wenn eine zufriedenstellende Konfiguration des analogTV-Setups zustande
gekommen ist, bitte im OSD-Setup "Report" auf "Ja" stellen,
auf einen analogen Sender zappen, und mindestens 5 Minuten laufen lassen.
Dann auf einen anderen Sender umschalten (egal ob analog oder digital),
und nun die Datei "/tmp/analogTV.rep" an akool@gmx.de schicken.
Diese Dateien helfen mir dabei, eines Tages eine vollautomatische - von
der jeweils eingesetzten CPU abhängige optimale Einstellung des MPEG-
Encoders vornehmen zu können!


Wer den VDR _ohne_ DVB-Karte betreibt, d.h. das analogTV-Plugin als
primary device verwendet, kommt durch _aktivieren_ der Zeile

# NEED_OWN_SIP = 1

im "Makefile" in den Genuß des EPG.


Verwendete Dateien:
-------------------

/usr/local/bin/mp1e
  Der MPEG-Encoder

/tmp/.analogtv.avi
  Named pipe - der MPEG-Datenkanal zwischen dem Encoder und dem Plugin

/tmp/mp1e.log
  Statistiken des MPEG-Encoders

/tmp/analogTV.log
  Sämtliche Debug-/Fehlermeldungen des Plugin, falls im OSD-Setup
  "Debug output" auf "file" steht.

/tmp/analogTV.rep
  Report aller verfügbaren Parameter, falls im OSD-Setup "Report" auf "Ja"
  steht

/video/plugins/epg.conf
  Konfiguration der EPG-Übernahme

/tmp/epg.out
  Zwischenprodukt der EPG-Übernahme

/tmp/epg.err
  Fehlerprotokoll der EPG-Übernahme

/tmp/pi.txt
/tmp/ai.txt
/tmp/pdc.txt
  Zwischenprodukte der EPG-Übernahme


Danksagungen:
-------------

Dieser Plugin basiert auf der Arbeit von

 - Michael H. Schimek <mschimek@users.sourceforge.net> (MPEG Encoder)
 - Dr. Marcus Metzler <mocm@metzlerbros.de> (PES->TS Remuxer)
 - Rene Bredlau <murray@blubber.de> (besserer PES->TS sowie TS->PES Remuxer)
 - Tom Zoerner <tomzo@users.sourceforge.net> (Nextview EPG)

ohne deren Vorarbeit dieser Plugin nicht existieren könnte.

Weiterhin möchte ich mich bei

 - Klaus Schmidinger <kls@cadsoft.de> für den VDR und viele hilfreiche
     Tipps

 - Sascha Volkenandt <mailbot1@wat.willz.de> für viele hilfreiche Tipps

 - Rene Bredlau <murray@blubber.de> für diverse Patches und vor allem einen
   funktionierenden PES->TS sowie TS->PES Remuxer

 - meiner Frau Claudia-Louise <clw@akool.de> für die meistens vorhandene
   Geduld, wenn ich mal wieder bis spät in die Nacht programmiert habe

 - Tobias Bratfisch <bratfisc@informatik.tu-muenchen.de> für die VIA C3
   Unterstützung sowie das englische README

 - Alexander Damhuis <ad@phonedation.de> für das HOWTO

 - Guido Fiala <gfiala@s.netic.de> für die
   "channels.conf.analogue.BaWue-Boeblingen" und viele hilfreiche Tipps

 - Karsten Jaschultowski <hell@wurstgurke.de> für die
   "channels.conf.analogue.ish-NRW"

 - Andre Neumann <chef@andre-neumann.de> für die
   "channels.conf.analogue.ish-NRW-Breitbandausgebaut"

 - Petric Frank <pfrank@gmx.de> für die
   "channels.conf.analogue.Kabel-Baden-Wuerttemberg"

 - Nikolai Zhubr <s001@hotbox.ru> für den aiw-patch

 - Lars Altenhain <lars@altenhain.de> für die Anpassung an die
   Hauppauge PVR-x50 Karten

 - Karsten Mueller <kmu@ratio.de> für die
   "channels.conf.analogue.Hamburg"

 - Jan Wagner <skywalker@wh2.tu-dresden.de> für die
   "channels.conf.analogue.Dresden"

 - Uwe Ortner <uwe.ortner@classic-net.de> für die
   "channels.conf.analogue.Muenchen"

 - Wolfram Pienkoss <wp@bszh.de> für die
   "channels.conf.analogue.Stadtroda(like-Jena)" und die
   "channels.conf.analogue.Stadtroda(like-Jena)-PVR"

 - Christian Kopmann <christian@kopmann.com> für die
   "channels.conf.analogue.DITRA(Großraum_Karlsruhe)"

 - Dominik Strasser <dominik@die-strassers.de> für Siemens-analog-Modul
   Erweiterungen

 - Javier Marcet <lists@marcet.info> für die Audio sample rate
   Erweiterung 

 - K.S.Herrmann <pddrksh@t-online.de> für die
   "channels.conf.analogue.KabelBW"

 - Dominic Morris <dom@suborbital.org.uk> für die Sky Digibox
   Unterstützung mit dem Redremote IR blaster 
   (http://www.redremote.co.uk/serial/index.html) sowie der
   "channels.conf.analogue.sky"

 - Andre Puschmann <apuschmann@apucs.com> für die
   "channels.conf.analogue.Erfurt"
 
 - Michael Koehler <mkoehler@psr.de> für die
   "channels.conf.analogue.DTKabel-Leipzig"

 - Nicolas Gerlach <nicolas.gerlach@gmx.de> für die
   "channels.conf.analogue.Bremen"

 - Petric Frank <pfrank@gmx.de> für die
   "channels.conf.analogue.KabelBW-Ludwigsburg"

 - Thomas Nau <thomas.nau@kiz.uni-ulm.de> für die
   "channels.conf.analogue.KabelBW-Ulm_Laupheim"
 
 - Martin Brodbeck <Martin.Brodbeck@gmx.de> für die
   "channels.conf.analogue.KabelBW.DettingenErms"

 - Andreas Fey <andreas@andreas-fey.com> für die
   "channels.conf.analogue.Telecolumbus-Sachsen-Thüringen.Jena,Landgrafen-Damenviertel"

 - Winfried Köhler <handygewinnspiel@gmx.de> für die
   "channels.conf.analogue.Berlin-Bosch"
 
 - Angelo Lambiasi <a.lambiasi@radiomarelli.com> für eine Fehlerkorrektur.

bedanken.


vdr-1.3.x:
----------

Seit dem 4. Januar 2004 unterstützt das analogTV-Plugin die neue
Developer-Version 1.3.x des VDR.

Folgende Änderungen gegenüber dem oben gesagten ergeben sich:

  1. In die 9. Spalte (CA) der "channels.conf" ist nun nicht mehr
     "32001", sondern "A0" einzutragen.


have fun

Andreas Kool <akool@gmx.de>

Version Information: $Id: README.de,v 1.47 2005/01/13 20:04:09 akool Exp $
Release Information: $Name:  $
