Configurazione di una scheda TV su Etch

Questi sono appunti sulla configurazione di una scheda TV Pinncale 310i (chip saa7133, drivers per saa7134) che supporta sia analogico che digitale terrestre. Questi appunti possono essere adattati anche ad altre schede supportate. Per ulteriori informazioni visita il sito http://www.linuxtv.org/.

Installazione dei drivers nel kernel

Siccome Etch usa un kernel 2.6.18, che e` troppo vecchio per la mia scheda, ho dovuto installare i drivers dal sito di linuxtv.

Se la scheda viene riconosciuta, dovreste vedere in dmesg qualcosa come:

Linux video capture interface: v2.00
saa7130/34: v4l2 driver version 0.2.14 loaded
GSI 22 sharing vector 0x42 and IRQ 22
ACPI: PCI Interrupt 0000:05:00.0[A] -> GSI 21 (level, low) -> IRQ 66
saa7133[0]: found at 0000:05:00.0, rev: 209, irq: 66, latency: 32, mmio: 0x88050000
saa7133[0]: subsystem: 11bd:002f, board: Pinnacle PCTV 310i [card=101,autodetected]
saa7133[0]: board init: gpio is 600e000
input: Pinnacle PCTV as /class/input/input3
ir-kbd-i2c: Pinnacle PCTV detected at i2c-1/1-0047/ir0 [saa7133[0]]
saa7133[0]: i2c eeprom 00: bd 11 2f 00 54 20 1c 00 43 43 a9 1c 55 d2 b2 92
saa7133[0]: i2c eeprom 10: ff e0 60 06 ff 20 ff ff 00 30 8d 2f 8a 0e ff ff
saa7133[0]: i2c eeprom 20: 01 2c 01 23 23 01 04 30 98 ff 00 e7 ff 21 00 c2
saa7133[0]: i2c eeprom 30: 96 10 03 32 15 20 ff 15 0e 6c a3 eb 04 38 5c fe
saa7133[0]: i2c eeprom 40: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
saa7133[0]: i2c eeprom 50: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
saa7133[0]: i2c eeprom 60: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
saa7133[0]: i2c eeprom 70: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
tuner 1-004b: chip found @ 0x96 (saa7133[0])
tuner 1-004b: setting tuner address to 61
tuner 1-004b: type set to tda8290+75a
saa7133[0]: registered device video0 [v4l2]
saa7133[0]: registered device vbi0
saa7133[0]: registered device radio0
DVB: registering new adapter (saa7133[0]).
DVB: registering frontend 0 (Philips TDA10046H DVB-T)...
tda1004x: setting up plls for 48MHz sampling clock
tda1004x: found firmware revision 0 -- invalid
tda1004x: trying to boot from eeprom
tda1004x: timeout waiting for DSP ready
tda1004x: found firmware revision 0 -- invalid
tda1004x: waiting for firmware upload...
tda1004x: found firmware revision 20 -- ok
saa7134 ALSA driver for DMA sound loaded
saa7133[0]/alsa: saa7133[0] at 0x88050000 irq 66 registered as card -1
tda1004x: setting up plls for 48MHz sampling clock
tda1004x: found firmware revision 20 -- ok
tda1004x: setting up plls for 48MHz sampling clock
tda1004x: found firmware revision 20 -- ok
tda1004x: setting up plls for 48MHz sampling clock
tda1004x: found firmware revision 20 -- ok

Se tutto e` a posto, potete aggiungere a /etc/modules il modulo saa7134-alsa. I moduli che vengono autocaricati dovrebbero essere saa7134 e saa7134-dvb, oltre a tutti i moduli di contorno di video4linux.

Installazione di mplayer e mencoder

Per fare le mie prove (e per registrare la TV analogica) ho usato mplayer e mencoder. Avrei potuto usare tvtime, xawtv o altri programmi, ma la mia VGA non supporta il video overlay, quindi mplayer e` l'unico player che funziona (male, tra l'altro). Siccome il mio scopo e` registrare, poco importa.

Ho installato mplayer e mencoder dal repository unofficial di linuxmultimedia. Per farlo, basta aggiungere al file /etc/apt/sources.list una riga che dice:

# mencoder e mplayer
deb http://www.debian-multimedia.org etch main

Poi eseguire:

apt-get update
apt-get install  debian-multimedia-keyring  (Accettare il download non digitally signed!)
apt-get update
apt-get install mencoder mplayer

Installazione di alcune utility utili

Per vedere se ricevete qualche canale TV, potete installare "scantv", sempre con apt-get. Per vedere se ricevete qualche canale digitale, vi serve invece il pacchetto "dvb-utils" (sempre apt-get).

Configurazione dei permessi

Se volete operare (registrare, fare scansione canali, vedere la TV) come utente normale e non come root, dovete assicurarvi che l'utente che volete usare sia nei gruppi "video" e "audio". Io ho sempre operato come utente se non per installare il kernel e i drivers e i pacchetti usati.

Scansione canali TV

Da questo momento ho eseguito tutte le operazioni come utente e non come root,

Attaccate l'antenna, e tentate una scansione dei canali TV, cosi`:

scantv -C /dev/vbi0

Rispondete alle domande sullo standard (0-PAL) e sul paese (7-italy) e vedete se trovate qualche canale. Potete anche ridirigere l'output su un file di testo, che sara` utile in seguito.

Scansione canali TV DVB

Se si vede qualcosa in analogico, vediamo cosa si vede in digitale. (il file it-Bologna) lo potete sostituire con quello della vostra citta`. Se non c'e` un file per la vostra citta`, occorre crearlo scoprendo su quali frequenze sono i MUX nella vostra citta`. O usate il file standard di Debian come indicato, oppure potete cercare su internet l'elenco dei MUX della vostra citta`.

scan /usr/share/doc/dvb-utils/examples/scan/dvb-t/it-Bologna

Se nell'output si vedono nomi di canali, molto bene, potete salvare anche questo output su un file di testo. Consiglio di salvarlo nella propria home con il nome .tzap/channels.conf

Qui di seguito c'e` un file per Bologna (da usare al posto di /usr/share/doc/dvb-utils/examples/scan/dvb-t/it-Bologna) aggiornato da me. Contiene quattro MUX in piu` rispetto a quello di Debian.

# T freq bw fec_hi fec_lo mod transmission-mode guard-interval hierarchy
#RaiA
T 203500000 7MHz 2/3 2/3 QAM64 8k 1/32 NONE
#Sestarete / Rete 7
T 212500000 7MHz 2/3 2/3 QAM64 8k 1/32 NONE
#Modena
T 219500000 7MHz 2/3 2/3 QAM64 8k 1/32 NONE
#Allmusic
T 594000000 8MHz 2/3 2/3 QAM64 8k 1/32 NONE
#Sestarete / Rete 7
T 610000000 8MHz 2/3 2/3 QAM64 8k 1/32 NONE
#DFree
T 634000000 8MHz 2/3 2/3 QAM64 8k 1/32 NONE
#Mediaset Mux-B
T 698000000 8MHz 2/3 2/3 QAM64 8k 1/32 NONE
#La7
T 714000000 8MHz 2/3 2/3 QAM64 8k 1/32 NONE
#RaiB
T 722000000 8MHz 2/3 2/3 QAM64 8k 1/32 NONE
#Mediaset Mux-A
T 794000000 8MHz 2/3 2/3 QAM64 8k 1/32 NONE
# Dfree
T 770000000 8MHz 2/3 2/3 QAM64 8k 1/32 NONE
# Telesanterno
T 802000000 8MHz 2/3 2/3 QAM64 8k 1/32 NONE
# Rete7
T 682000000 8MHz 2/3 2/3 QAM64 8k 1/32 NONE

cd ~
mkdir .tzap
scan /usr/share/doc/dvb-utils/examples/scan/dvb-t/it-Bologna > .tzap/channels.conf

Vedere la TV analogica

Per vedere la TV analogica, una cosa cosi` dovrebbe funzionare con qualsiasi scheda video (sotto X, non in testo!)

mplayer tv:// -tv driver=v4l2:chanlist=europe-west:normid=0:channel=28:input=0 -vo x11

Mettete come "channel" un canale che trasmette qualcosa. Se manca l'audio, occorre collegare l'output della scheda TV (interno) all'input della scheda audio e poi alzare il canale giusto nel mixer.

Vedere la TV digitale

Per vedere la TV digitale io ho provato Xine (apt-get install gxine se avete gnome) che funziona ma a causa della la mia maledetta VGA devo lanciare xine -V XSHm che e` pateticamente lento nell'update del video. Probabilmente voi sarete piu` fortunati! Per configurarlo basta creare dentro a ~/.xine/ il file channels.conf usando scan come indicato prima, poi lanciare gxine, poi dal menu` "File" scegliere "DVB" e scegliere il canale con i tasti avanti e indietro.

Un altro metodo e` usare il meraviglioso mplayer, che mi stupisce perche` e` in grado di vedere TUTTO. Dopo aver copiato il file "channels.conf" dentro a ~/.mplayer e` sufficiente lanciare:

mplayer dvb://"Canale 5" -tv driver=v4l2 -vo x11 -ao sdl

per vedere Canale 5. (se e` nel vostro file dei canali, ovviamente)

I parametri "-ao sdl" e "-vo x11" si riferiscono ai metodi di output dell'audio (oss in questo caso) e del video (x11 in questo caso) a causa della mia solita maledetta VGA.

Registrare la TV digitale

Per registrare la TV digitale si puo` usare dvbstream, che consente anche di mandarla in stream a un altro (o piu` di un altro) pc sulla rete.

Dvbstream non e` comodo come mplayer (o mencoder) che riescono a leggere il file di configurazione dei canali prodotto da scan. Qui occorre inserire i valori presi dal file a mano.

Per esempio, se apriamo il file channels.conf prodotto da scan, possiamo cercare Canale 5. Lo trovo (qui a Bologna) in una riga che dice:

Canale 5:698000000:INVERSION_AUTO:BANDWIDTH_8_MHZ:FEC_2_3:FEC_2_3:QAM_64:TRANSMISSION_MODE_8K:GUARD_INTERVAL_1_32:HIERARCHY_NONE:512:650:21

Per registrare Canale 5 con Dvbstream su un file, scrivero`:

dvbstream -f 698000000  -tm 8 -ps -n 10 512 650 -o > test.mpeg

I parametri sono:

Per vedere se il file registrato contiene qualcosa, si puo` rivedere al volo con

mplayer test.mprg -vo x11

Il vantaggio di usare dvbstream e` che ottieni una copia esatta senza transcoding dello stream entrante, quindi non c'e` alcuna perdita di qualita` rispetto alla visione in diretta. Lo svantaggio e` che la compressione e` mpeg2, e non divx o altro, quindi consuma veramente un casino di spazio su disco (15 Mbit/sec per il video e 384 Kbit/sec per l'audio). Un minuto di registrazione prende 40 mega (2,4 Gbytes/ora).

Alternativamente, e` possibile usare mencoder, come per la TV analogica.

Qualcosa tipo:

mencoder  -ffourcc "divx" dvb://"Canale 5" -tv driver=v4l2:buffersize=256 -ovc lavc -lavcopts vcodec=mpeg4:vbitrate=2500 -vf pp=lb/h1:a/v1:a  -oac mp3lame -o test2.avi

Poi, come per l'esempio che segue della TV analogica, si puo` fare lo splitting del file avi.

E` anche possibile usare dvbstream e poi ricodificare con mencoder, questo e` un esempio buttato li`, che comprime video e audio, e fa anche filtraggio per deinterlacciare:

mencoder -ffourcc "divx" test.mpeg -ovc lavc -lavcopts vcodec=mpeg4:vbitrate=2500 -vf pp=lb/h1:a/v1:a -oac mp3lame -o test3.avi

Registrare la TV analogica

Per registrare la TV analogica, uso mencoder. Le opzioni sono cosi` tante che c'e` da impazzire. Comunque in linea di massima questa e` l'impostazione che sto provando per registrare in un formato che puo` essere letto dal Kiss.

# Tvrecord, uno scriptino semplice per registrare dalla TV usando mencoder.

# Questo script, lanciato da Cron o in console, registra un dato canale per tot tempo
# e salva un file con un nome composto da un parametro dato in ingresso e data e ora di inizio
# della registrazione.

# I parametri sono:
#  Nome del file
#  canale TV
#  Durata della registrazione in formato HH:MM

NOME=$1
CANALE=$2
DURATA=$3
DATA=`date +%F`

if [[ $# != 3 ]]
then
        echo "Numero errato di parametri";
        echo "Uso: tvrecord <nome file> <canale> <durata>"
else

        echo $NOME, $CANALE, $DURATA, $DATA;

# Registrazione
        echo .
        echo Registrazione
        echo .

# questo funziona, e` in sincro, usa l'audio della Pinnacle, va in stereo.
# pero` consuma un pacco di banda per l'audio.


#       mencoder  -endpos $DURATA:00 -ffourcc "divx" -audio-density 25 tv:// -tv driver=v4l2:channel=$CANALE:chanlist=eu
rope-west:normid=0:input=0:width=720:height=576:device=/dev/video0:buffersize=256:fps=25:alsa:adevice=hw.1,0:audiorate=3
2000:amode=1 -ovc lavc -lavcopts vcodec=mpeg4:vbitrate=2500 -vf pp=lb/h1:a/v1:a -oac pcm   -o /ud2/video/$NOME$DATA.temp
.avi

# proviamo a ridurre la banda dell'audio

        mencoder  -endpos $DURATA:00 -ffourcc "divx" -audio-density 25 tv:// -tv driver=v4l2:channel=$CANALE:chanlist=eu
rope-west:normid=0:input=0:width=720:height=576:device=/dev/video0:buffersize=256:fps=25:alsa:adevice=hw.1,0:audiorate=3
2000:amode=1 -ovc lavc -lavcopts vcodec=mpeg4:vbitrate=2500 -vf pp=lb/h1:a/v1:a -oac mp3lame -o /ud2/video/$NOME$DATA.te
mp.avi

# Transcoding, splitting
        echo .
        echo Transcoding and splitting
        echo .
#        transcode -i /ud2/video/$NOME$DATA.temp.avi  -P1 -q0 -y raw -o /ud2/video/$NOME$DATA.avi && \
        avisplit -s 1000 -i /ud2/video/$NOME$DATA.temp.avi -o /ud2/video/$NOME$DATA 2> /dev/null && \
        ls  /ud2/video/$NOME$DATA.temp.avi && echo Successo
fi

LinuxDebian/TvPinnacle (last edited 2009-04-12 17:33:25 by localhost)