
Guarda la TV digitale terrestre con il PC
Dalla configurazione della scheda TV, alla registrazione dei programmi sull’hard disk, fino alla trasmissione dei canali verso gli altri PC della rete
(pagina 2 di 3)
Le schede Tv
 |
Nome: Pinnacle PCTV DVB-T Stick Ultimate • Tipo: scheda DVB-T • Interfaccia: USB 2.0 • Ingressi: antenna • Supporto HDTV: assente • Formato di registrazione: MPEG-1/2, DivX • Produttore: Pinnacle Systems • Sito web: www.pinnaclesys.com/PublicSite/it/Home |
In genere, ogni scheda TV digitale è composta
da un tuner che riceve il segnale di trasmissione
su una particolare frequenza; un
demodulatore che estrae l'informazione dal
segnale ricevuto; un demultiplexer (o demux)
che separa i vari canali e/o i segnali audio/video;
un chip di cattura dei dati che fa anche da interfaccia
verso il bus utilizzato per la connessione
al PC: USB, PCI o PCMCIA. A differenza
delle schede per la TV analogica, quelle
digitali non necessitano del convertitore
A/D poiché i dati trasmessi sono già in formato
digitale. Il demux, infatti, produce direttamente
i dati per il flusso digitale da immettere
sul bus. Purtroppo non esistono i driver
GNU/Linux per tutte le schede sul mercato,
per cui, l'analisi dei vari componenti di
base e dei relativi chip contenuti sulla scheda
TV, spesso è indispensabile per capire se questa
è ben supportata dal sistema e poter scegliere,
di conseguenza, come intervenire. In genere
sono da preferire le schede di tipo PCI,
in quanto quelle USB sono meno supportate
e quando lo sono necessitano di una procedura
di installazione molto più articolata. In
particolare, comunque, nel caso si riscontri
qualche problema durante l'installazione è necessario
individuare il cosiddetto frontend,
che rappresenta l'insieme del tuner e del demodulatore,
e il chip di cattura dei dati. Nel
nostro caso ci siamo serviti di una AVerTV
DVB-T 771(una cosiddetta budget card, cioè
una scheda a basso costo con componenti
elettronici di base). Ben supportato (il produttore
la rilascia come GNU/Linux compatibile) è anche il nuovo modello AverTV DVB-T
777,che permette la ricezione di canali in alta
definizione (1080i/720p). In pratica, queste
due schede sono riconosiute dal sistema in
automatico e il dispositivo risulta immediatamente
funzionante. Diverso è il caso di alcune schede
USB, per le quali sono necessarie operazioni
abbastanza complesse, come, ad esempio,
accade per la nuova Pinnacle PCTV DVBT
Stick Ultimate, che utilizza il nuovo chipset
72e, per la quale è necessario seguire la procedura
riportata di seguito:
wget http://www.barbak.org/
v4l_for_72e_dongle.tar.bz2
tar xvjf v4l_for_72e
_dongle.tar.bz2
cd v4l-dvb
cp firmware/dvb-usb-dib0700-
1.10.fw /lib/firmware/
make
make install
Tutto qui, a questo punto, non resta che riavviare
il sistema. Ricordate solo di eseguire la
procedura da root, quindi diventatelo con su
sudo -s, e posizionatevi, magari, nella directory
/tmp: cd /tmp. Per il resto, generalmente,
dopo aver collegato la scheda al PC, per verificare
se questa è stata riconosciuta, basta
accertarsi che sia presente la directory
/dev/dvb/adapter0 con all'interno i device
(file di dispositivo) per l'accesso alla scheda TV.
I più importanti sono /dev/dvb/adapter0
/frontend0, utilizzato per la sintonizzazione del
tuner, e /dev/dvb/adapter0/dvr0, mediante
il quale è possibile leggere il flusso MPEG2 del
canale sintonizzato. Attenzione ai permessi
dei file per rendere possibile l'accesso ai device
da parte degli utenti diversi da root. Per
essere ancora più sicuri dell'avvenuto riconoscimento,
eseguiamo il comando dmesg
| grep dvb e controlliamo che siano presenti stringhe simili a quelle seguenti (alcuni parametri dipendono dalla scheda utilizzata):
bttv0: detected: AVermedia
AverTV DVB-T 771 [card=123],
PCI subsystem ID is 1461:0771
...
DVB: registering new adapter
(bttv0).
DVB: registering frontend 0
(Zarlink MT352 DVB-T)...
Per approfondimenti sulla gestione di questo tipo di periferiche il sito è www.linuxtv.org.
I programmi necessari
Per capire bene come funziona la TV digitale
terrestre, inizieremo utilizzando programmi
a riga di comando. Tutti gli strumenti necessari
sono disponibili nella suite dvb-apps
prelevabile sempre dal sito LinuxTV
(www.linuxtv.org). Per chi usa Debian GNU/Linux
il pacchetto da installare è dvb-utils: apt-get
install dvb-utils. Dopo aver appreso le basi
con questi programmi, tratteremo anche l'utilizzo
di Kaffeine ( http://kaffeine.sourceforge.net), ormai
diventato il player multimediale predefinito
all'interno delle distribuzioni che utilizzano
KDE. Ma useremo, anche se “solo” da riga
di comando, i player Xine ( www.xinehq.de),
MPlayer ( www.mplayer hq.hu) e Vlc
( www.videolan.org/vlc). Per iniziare,
eseguiamo una console da K/Sistema/Konsole
o da Applicazioni/Accessori/Terminale.
Ricerca dei canali
Come primo passo bisogna esplorare l'etere
alla ricerca dei canali digitali radiotelevisivi
presenti nella propria zona: un po' come succede
con la ricerca automatica del sintonizzatore
TV tradizionale. A questo scopo ci serviremo
del programma scan (o scandvb o dvbscan).
Questo prende in input un particolare file che
elenca le frequenze di trasmissione utilizzate
dai transponder delle località geografiche in cui
si risiede. Nei sistemi Debian GNU/Linux questi
file si trovano nella directory /usr/share
/doc/dvb-utils/ examples/scan/dvb-t. Supponiamo
di abitare a Milano. In questo caso
il comando è:
scan /usr/share/doc/dvb-
utils/examples/scan/dvb-t/it-
Milano 1>channel.conf 2>info.log
Così facendo creeremo il file channels.conf
indispensabile a tutti i player che utilizzeremo
più avanti. Nel paragrafo successivo i dettagli
del contenuto di questo file.
Il File Channel.Conf
Si tratta di un file di testo di tipo CSV che utilizza
come separatore il carattere “:”. Ogni riga
contiene le informazioni riguardanti un canale.
Utilizzando il comando awk seguente
evidenziamo i singoli campi di ogni riga per
poterlo leggere più facilmente:
awk 'BEGIN{FS=":"} {\
for(i=1;i<=NF;i++) {\
printf $i "\n"\
} \
printf "\n"\
}' channels.conf
Dopo aver eseguito il comando precedente otterremo qualcosa del genere:
RaiUno
818000000
INVERSION_AUTO
BANDWIDTH_8_MHZ
FEC_2_3
FEC_1_2
QAM_64
TRANSMISSION_MODE_8K
GUARD_INTERVAL_1_32
HIERARCHY_NONE
512
650
3401
...
Nel primo campo è visibile il nome del canale e nel secondo la frequenza del trasmettitore sulla quale bisogna sintonizzare il tuner.
Il terzultimo e penultimo campo contengono,
invece, i PID citati in precedenza che permettono
al demodulatore di estrarre dal segnale
il flusso audio/video del canale. Ad esempio,
un canale con il terzultimo campo uguale a
zero è di tipo radio. L'ultimo campo è un identificativo
unico del programma trasmesso.
Sintonizzare i canali
A questo punto, stabilito quali sono i canali
che riusciamo a ricevere nella nostra zona, è
ancora necessario sintonizzarli correttamente
affinché sia possibile visualizzarli mediante i
programmi per la TV disponibili in GNU/Linux.
Per farlo bisogna fare riferimento al file channel.
conf. Vediamo come. Se una delle righe
presenti all’interno di questo file contiene qualche
stringa con il nome del canale, come, ad
esempio, nel caso di RaiUno, significa che
possiamo "girare la manopola del ricevitore"
e sintonizzarci su questo utilizzando il comando
tzap: tzap -r -c channels.conf RaiUno.
Se a regime le righe di output terminano
con la stringa FE_HAS_LOCK , significa che
abbiamo agganciato il canale e il flusso MPEG2
corrispondente verrà indirizzato sul device
(dispositivo) /dev/dvb/adapter0/dvr0. Nel
paragrafo successivo, analizzeremo qualche
ulteriore particolare dell'output prodotto dal
programma tzap, di sicuro interesse per gli
amanti dei dettagli tecnici.
L'Output di Tzap
 |
I due comandi tzap e xine in azion |
Il programma di sintonizzazione tzap produce i seguenti messaggi:
using '/dev/dvb/adapter0/
frontend0' and
'/dev/dvb/adapter0/demux0'
tuning to 818000000 Hz
video pid 0x0200, audio pid 0x028a
status 00 | signal
ffef | snr
0000 | ber 00000000 | unc
00000000 |
status 1f | signal
ee6f | snr
9090 | ber 00000000 | unc
00000000 | FE_HAS_LOCK
status 1f | signal ed2f
| snr
9292 | ber 00000000 | unc
00000000 | FE_HAS_LOCK
Quando le righe terminano con FE_HAS_LOCK
significa che il frontend, ovvero il tuner, è in un
certo senso bloccato su questa frequenza,
cioè la sintonizzazione è andata a buon fine.
Nel log è possibile leggere anche altre importanti
informazioni; ad esempio, la bontà
del segnale è tanto più alta quanto più il campo
unc (uncorrectable code) è uguale a zero.
Per chi vuole approfondire, sappiate che
alcuni comandi del pacchetto dvb-utils permettono
di analizzare le componenti del segnale
digitale e realizzare statistiche sofisticate,
come, ad esempio, dvbtraffic. In aggiunta, il
comando dvbsnoop analizza il flusso di dati
in modo simile agli sniffer di rete.
Guardare le Trasmissioni
Per poter guardare ciò che riceviamo, non ci
resta che leggere il flusso dal device
/dev/dvb/adapter0/dvr0 mediante un qualsiasi
player come Xine, MPlayer o Vlc. Ecco
due esempi da riga comando che utilizzano
Xine e MPlayer, rispettivamente: xine stdin://
mpeg2 < /dev/dvb/adapter0/dvr0 e
mplayer - < /dev/dvb/adapter0/dvr0. In alternativa,
possiamo copiare il file channels.conf nelle
directory .xine o .mplayer della nostra home
ed eseguire: xine "dvb://RaiUno" o
mplayer "dvb://RaiUno".
Registrare una Trasmissione
Per registrare le trasmissioni sull'hard disk,
dopo aver sintonizzato con tzap il canale è
sufficiente eseguire il comando cat
/dev/dvb/adapter0/dvr0 >filmato.mpg. Con
Xine, invece, possiamo, interattivamente, avviare
la registrazione premendo il tasto F1.
Nel file così prodotto verrà salvato il flusso
MPEG2 corrispondente al canale sintonizzato
finché il comando non verrà interrotto. Come
abbiamo visto in precedenza, poiché il
sintonizzatore riceve su una stessa frequenza
più canali, perché non salvare l'intero flusso
MPEG TS e selezionare all'interno dello
stesso, successivamente, il canale preferito?
Per farlo basta installare il pacchetto dvbstream.
Mentre tzap sintonizza il tuner su
una certa frequenza, bisogna eseguire il comando
dvb stream con uno speciale PID fisso,
ossia 8192, che indica l'intero stream:
dvbstream 8192 -o >filmato.mpg. per rivedere
i vari canali contenuti nel file filmato.
mpg basta reperire nel file channels.confi
due PID, pid1 e pid2, (audio e video) del canale
appartenente a quel flusso ed eseguire
mplayer -aid pid1 -vid pid2 filmato.mpg.
Trasmettere in Rete
Se il computer sul quale è installata la scheda
TV si trova all'interno di una rete locale è
possibile distribuire il segnale televisivo a tutte
le altre postazioni utilizzando le funzionalità
di streaming multicast del player VLC.
Se, ad esempio, gli indirizzi delle macchine presenti
in rete sono del tipo 192.168.1.XXX, allora
sulla macchina su cui è installata la scheda
TV bisogna eseguire quanto segue:
vlc --daemon --intf http --
program 3401 --dvb-frequency
818000000 dvb: --sout
”#duplicate{dst=std{access=udp
,mux=ts,dst=192.168.1.0:1234}}"
I valori dei parametri program e dvb-frequency sono rispettivamente l'ultimo e il secondo
campo della riga del canale da trasmettere
in rete presente nel file channels.conf.
Per visualizzare le trasmissioni sulle altre macchine
basta eseguire il comando vlc
udp://192.168.1.0:1234, oppure xine
udp://192.168.1.0:1234. Attenzione ad abilitare
il supporto del multicast da parte del kernel,
di norma infatti è disabilitato. Quest'ultima
possibilità permette di abbandonare il cablaggio
delle nostre case con il vecchio cavo
d'antenna particolarmente soggetto a deterioramento
del segnale. In presenza di una rete
locale, anche wireless, lo streaming multicast
permette di guardare la TV in ogni stanza in
cui è presente un PC utilizzando una sola scheda
con un unico tuner e senza alcun deterioramento
del segnale televisivo.
TV digitale terrestre con Kaffeine
Con il player di KDE possiamo visualizzare i canali, registrarli e trasmetterli
Configurazione del player