Linux multimedia/Video/DVB

Wikibooks, manuali e libri di testo liberi.
Indice del libro

Le trasmissioni digitali, da anni diffuse via satellite, via cavo e, più recentemente via etere (digitale terrestre), sono accomunate da una stessa tecnologia di base, nota come Digital Video Broadcast, o DVB. A seconda del mezzo di trasmissione si parla di DVB-S, DVB-C e DVB-T.

In Italia il DVB-C, cioè la trasmissione digitale via cavo, non è molto diffuso, mentre sta diffondendosi, sia pure con estrema lentezza, il DVB-T, al punto che, al 2008, è molto più facile trovare dispositivi per computer per il DVB-T che non per il DVB-S. Tuttavia, la copertura del DVB-T è molto variabile, mentre la ricezione del satellite è quasi perfetta su tutto il territorio nazionale.

Il DVB consiste sostanzialmente nel trasmettere MPEG-2, per la precisione MPEG-2 TS (Transport Stream): a livello di contenuto è come se si vedesse un DVD, perché gli algoritmi di compressione e decompressione sono gli stessi, e la qualità pure è molto elevata. Nel DVD-video, però, intervengono dei Program Stream MPEG-2, invece che dei Transport Stream. La differenza è soprattutto nella gestione di informazione persa durante il trasporto. Per il resto, si tratta pur sempre di MPEG-2.

Il supporto del DVB in GNU/Linux è molto buono ma, come in molti altri settori, c'è sempre da armeggiare a dei livelli a cui nessun utente standard di altri sistemi operativi oserebbe arrivare. A volte di più, a volte di meno.

Il punto di partenza di qualsiasi approccio al DVB da parte dell'utente Linux è il sito www.linuxtv.org, e in particolare il wiki DVB in esso contenuto. Qui si può trovare innanzitutto un elenco aggiornabile (previa iscrizione al wiki) dell'hardware funzionante. Come spesso succede, le schede esistenti per il DVB, siano PCI, USB o altro, sono basate su pochi chipset, per cui l'attenzione degli sviluppatori si è concentrata su quelli più diffusi. La prima cosa da fare prima di acquistare una scheda è capire quali sono i chipset supportati e verificare nella propria zona la disponibilità di schede con quei chipset.

Il wiki riporta anche istruzioni per i primi passi dopo l'installazione, spesso legati alla ricompilazione del kernel. Ma con i kernel successivi al 2.6.18, o anche più vecchi, la ricompilazione non è di solito necessaria: le schede sono riconosciute subito, e al massimo ci si deve assicurare che i moduli necessari siano stati effettivamente caricati, e in caso forzarne il caricamento in qualche modo.

Teoria[modifica]

MPEG-TS[modifica]

Nella trasmissione di contenuti multimediali l'obiettivo principale è consentire la fruizione in tempo reale. Una situazione molto diversa dalla proiezione di un DVD video o di un filmato DivX in formato AVI: in questi casi l'informazione si trova presso l'impianto di riproduzione, non a centinaia o migliaia di chilometri, come nel caso delle trasmissioni.

Il formato MPEG-PS (MPEG Program Stream), perfetto per i DVD video, non è adatto alle trasmissioni, per le quali infatti il gruppo MPEG ha studiato una specifica apposita, MPEG Transport Stream. La caratteristica principale dell'MPEG-TS è la suddivisione dei contenuti in piccoli pacchetti trasmessi in sequenza, secondo la specifica PES (Packetized Elementary Stream), sempre dovuto all'MPEG. I pacchetti sono lunghi 188 byte, ma possono essere più lunghi per consentire la correzione di eventuali errori di trasmissione.

I pacchetti non sono tutti uguali. La maggior parte contengono pezzi di un flusso multimediale, ma talvolta trasportano anche informazioni di servizio molto importanti. Vale la pena di vederne un paio:

PCR (Program Clock Reference)
Di tanto in tanto viene trasmesso un pacchetto contenente questo campo opzionale, che consente al ricevitore di sincronizzarsi con la trasmissione. Si capisce l'importanza di questo genere di informazione, senza la quale il sincronismo fra audio e video potrebbe saltare.
EPG (Electronic Program Guide)
Alcuni pacchetti trasportano dati non multimediali, in particolare dati che descrivono il programma trasmesso attualmente, ma anche quelli precedenti e successivi, sia pure in un periodo di tempo relativamente breve (un paio d'ore, di solito). Tutte queste informazioni costituiscono la EPG, molto importante non solo per l'utente interattivo, ma anche per i programmi di registrazione automatica, che si servono di queste informazioni per iniziare la registrazione di una particolare trasmissione al momento giusto. Va detto che l'affidabilità di queste informazioni dipende dalla serietà dell'emittente. La stessa RAI non sempre è molto precisa nel produrre la EPG, ma in teoria è meglio affidarsi alla EPG piuttosto che all'orario dichiarato sulle riviste o su Internet, visto che questo orario non è rispettato praticamente mai.

Trasmissioni satellitari[modifica]

Introduzione[modifica]

Per poter trasmettere con continuità su un'area definita, un satellite non può che ruotare in un'orbita geostazionaria, a circa 36.000 km di altezza, una distanza di tutto rispetto che rende debolissimo il segnale che giunge alle antenne. Questo è il motivo per cui le antenne sono paraboliche: per ottenere un segnale che possa essere amplificato senza eccessivi errori, è necessario raccogliere quanta più radiazione possibile, convogliandola nel fuoco della parabola.

In realtà, alle nostre latitudini, una parabola realmente tale dovrebbe essere puntata talmente in alto che alla prima pioggia si trasformerebbe in una vasca (oppure sarebbe sommersa dalla neve, creando seri problemi di carico statico). Quindi quelle che normalmente chiamiamo parabole hanno una geometria non propriamente parabolica, in modo da raccogliere comunque buona parte del segnale proveniente dai satelliti nonostante l'inclinazione alquanto modesta rispetto all'orizzontale.

LNB e cavi a bassa frequenza[modifica]

Il segnale satellitare ha una frequenza attorno ai 10 GHz. Per trasportare in casa un segnale di tale frequenza sarebbero necessari cavi particolari e costosi. Per questo motivo il segnale ricevuto dall'antenna è subito riportato ad un segnale a frequenza più bassa che possa viaggiare per diversi metri su cavi coassiali di costo e qualità ragionevoli. Il dispositivo che realizza questo cambio di frequenza è detto LNB (low noise block converter). È un dispositivo che può creare qualche problema all'utente che cerca di vedere i programmi satellitari con il computer, perché non esiste un solo tipo di LNB e il software di scansione e di sintonia dei canali può aver bisogno di sapere qual è il particolare tipo di LNB da cui proviene il cavo collegato al computer. In Europa praticamente tutte le installazioni degli ultimi anni usano il cosiddetto Universal LNB, e il software in circolazione, anche quello per GNU/Linux, parte da questo presupposto, per cui questo problema non dovrebbe presentarsi quasi più.

Quanto ai cavi, pur trasportando un segnale a frequenza più bassa rispetto a quello emesso dal satellite, sono in realtà da considerarsi cavi ad alta frequenza rispetto alla maggioranza dei cavi che scorrono nei muri di case e palazzi. Sono simili a quelli delle tradizionali antenne per trasmissioni via etere, ma più delicati e, soprattutto, più vulnerabili alla perdita di energia del segnale in presenza di curve troppo strette. Di solito gli antennisti sono attenti a evitare le curve strette, ma se si ha il sospetto che il segnale ricevuto non sia abbastanza potente, uno dei controlli da fare è relativo all'eventuale presenza di curve strette nel cavo che scende dalla parabola fino in casa.

Frequenza[modifica]

Ogni satellite trasmette su diverse frequenze, tipicamente comprese fra 10 e 13 GHz. La compressione MPEG consente di sfruttare pienamente la banda disponibile, trasmettendo più canali sulla stessa frequenza. Ad esempio, la RAI trasmette diversi canali sulla frequenza 11804, altri sulla frequenza 11766. Per distinguere fra loro i canali trasmessi sulla stessa frequenza si assegna a ciascun canale un identificativo di programma video, detto VPID, e lo stesso si fa per le trasmissioni audio oppure per il canale audio associato ad un programma video, tramite opportuni APID (audio program identifier). Ad esempio, il VPID di Rai Uno è 512, mentre l'APID per la lingua italiana (l'unico disponibile per Rai Uno) è 650. Trasmissioni multilingua sfruttano diverse coppie VPID-APID, anche se la componente video è, presumibilmente, la stessa per ogni VPID.

Polarità[modifica]

I satelliti trasmettono onde elettromagnetiche polarizzate, in modo da concentrare l'energia disponibile su un solo piano. Questo non è un dettaglio da poco conto, considerata la debolezza del segnale che arriva dal satellite. Di solito le polarità sono solo due: orizzontale e verticale.

DVB-S[modifica]

Se si dispone di una scheda supportata, prima di poter vedere o registrare trasmissioni satellitari è necessario sintonizzare i canali. Questo si può fare in diversi modi, ma qui cominceremo con un insieme di utility a riga di comando note come dvb-apps oppure dvb-tools, a seconda delle distribuzioni.

Questo pacchetto contiene comandi per la sintonia di tutti i canali possibili, per la sintonia su un particolare canale, e diversi strumenti diagnostici molto utili, soprattutto quando i primi tentativi non danno i risultati sperati.

Scansione iniziale: (dvb)scan[modifica]

Il comando dvbscan, che alcune distribuzioni chiamano invece scan, serve a creare un elenco di canali sintonizzati, di solito registrato in un file denominato channels.conf. Il nome è importante, perché altri applicativi, come mplayer, fanno riferimento a questo file per visualizzare o registrare lo stream ricevuto da un canale individuato per nome. Anche il suo percorso è importante: deve trovarsi nella directory ~/.szap, che deve avere adeguati permessi di accesso ("rwxr-xr-x" dovrebbe bastare nella maggior parte dei casi. Questa cartella è usata dal comando szap che vedremo più avanti, usato per sintonizzare la scheda su uno specifico canale.

Il file channels.conf è un semplice file di testo, relativamente leggibile, ma può presentarsi in diversi formati, come si vedrà fra breve. Gli applicativi che fanno uso di questo file sono di solito in grado di riconoscere il formato senza problemi, ma è sempre meglio verificare e, in caso di dubbi, adottare il formato predefinito.

Per creare il file channels.conf, scan ha bisogno di un initial scan file, di solito legato ad un particolare satellite o a un'area geografica. Questo file elenca i diversi trasponder disponibili per un determinato satellite, con i relativi parametri (frequenza, polarità, symbol rate etc...). Ad esempio, se si dispone di un initial scan file denominato Hotbird13E, la scansione si riduce al comando:

scan Hotbird13E > ~/.szap/channels.conf 

Il comando produce un output piuttosto prolisso, che spesso è ricco di messaggi del tipo tuning failed. Se questi messaggi sono troppi, probabilmente c'è qualche problema, ma alla fine viene indicato il numero di service individuati (sostanzialmente i canali): se sono più di zero, per quel particolare satellite potrebbe essere scarso il segnale, o non sufficiente per la sensibilità della scheda, ma non si può dire che la scheda e il software non funzionino affatto.

Il comando scan prevede alcune interessanti opzioni:

-x
Serve a filtrare per tipo di accesso al servizio. Il valore più utile è 0, che segnala a scan di ricercare solo i canali FTA (Free To Air), cioè non criptati. Questo non esclude canali che sono di solito non criptati, ma che potrebbero trasmettere qualche programma criptato. È il caso di alcuni eventi sportivi o di film molto famosi.
-t
Consente di filtrare per tipo di servizio (televisione, radio etc...). Il valore 1, ad esempio, fa in modo che scan ricerchi solo canali televisivi, escludendo radio o altro.

Sintonia di un canale[modifica]

Una volta creato il file dei canali, si può sintonizzare la scheda su quello che si preferisce. Il già citato comando szap ha esattamento questo solo scopo. Nel caso più semplice la sua sintassi è:

szap -n NNN

in cui NNN è il numero del canale. Se si vuole sintonizzare un canale di cui si conosce il nome, nel senso della stringa che compare nella relativa riga del file channels.conf, si può usare il comando:

szap "bbc world"

(i nomi sono case insensitive). Come già accennato, szap si limita a sintonizzare un canale (non a caso questo genere di comandi contengono la parola zap), ma ovviamente l'utente avrà intenzione di vederlo o registrarlo. Prima di vedere come questo si può fare con alcuni programmi, vediamo come si può usare szap per consentire ad un player multimediale di visualizzare quanto trasmesso sul canale sintonizzato. L'opzione da usare è -r:

szap -r "bbc world"

Questo comando sintonizza la scheda sul canale scelto e riversa il flusso MPEG-TS (MPEG Transport Stream) su un particolare device, il cui nome è mostrato chiaramente nell'output di szap. se si dispone di una sola scheda DVB-S, è molto probabile che il device sia /dev/dvb/adapter0/dvr0. Con un player multimediale si può allora leggere da questo device. Ad esempio, per vedere la BBC con mplayer, dopo il comando szap visto sopra basterà il comando:

mplayer /dev/dvb/adapter0/dvr0

L'output di szap e il comando femon[modifica]

Normalmente, se si usa szap per selezionare un canale e poi un player per vedere o registrare la trasmissione, si aggiunge l'opzione -x di szap in modo che il comando termini non appena agganciato il canale. In caso contrario, szap continuerà a visualizzare una riga ogni due o tre secondi sullo standard output.

In certe situazioni, specialmente quando qualcosa non va nel verso giusto, queste righe possono essere utili per farsi un'idea del problema. Le righe di output sono divise in colonne, e l'ultima, in condizioni normali, dovrebbe sempre riportare una stringa come HAS_LOCK: questo flag indica che il canale è sintonizzato, e se a volte manca questa stringa c'è sicuramente qualche problema di segnale.

La potenza e la qualità del segnale sono riportate nella seconda e terza colonna. Per garantire una ricezione decente la potenza del segnale non può essere troppo al di sotto di 8000. Sotto i 7000 è normale vedere apparire i quadratoni caratteristici delle trasmissioni DVB disturbate.

Tuttavia capita spesso che, pur riuscendo a ricevere decentemente un canale, szap riporti un segnale di potenza infima, anche sotto il 500. Si tratta di un'informazione falsata, e per conoscere la reale potenza del segnale occorre interrompere szap e lanciare il comando femon, che non richiede argomenti. Esso riporta un output in tutto simile a quello di szap, riferito al canale sintonizzato attualmente dalla scheda. Di solito le prime righe riportano valori molto bassi per la potenza del segnale, ma in seguito appaiono valori molto più plausibili, che dovrebbero dare una valida indicazione della potenza del segnale ricevuto.

Il DVB-S con alcuni player multimediali[modifica]

Alcuni player consentono di selezionare e visualizzare un canale senza costringere l'utente ad utilizzare szap. Ad esempio, con mplayer si può vedere la BBC, come nell'esempio visto sopra, con il semplice comando:

mplayer dvb://"BBC World"

Se non ci sono problemi di segnale, mplayer seleziona la BBC e presenta il relativo stream multimediale. Il nome del canale, diversamente che in szap, è case sensitive.

Mplayer può essere anche usato per registrare su un file la trasmissione:

 mplayer -dumpstream -dumpfile bbc-world.ts dvb://"BBC World"

Una volta terminata la registrazione (in questo caso con CTRL-C sul terminale o Q nella finestra di mplayer), il file bbc-world.ts contiene la trasmissione registrata, in formato MPEG-TS.