Menu Chiudi

Trasmissioni HD su digitale terrestre

Come vedere e registrare le trasmissioni in alta definizione su digitale terrestre.

Antefatto

Dal 16 Febbraio 2009 sono comparsi sulle frequenze del digitale terrestre del Trentino alcuni canali sperimentali in alta definizione (> 720×576) che sono trasmessi utilizzando la codifica h.264/MPEG4.

La codifica h.264 comprime in maniera molto maggiore (a parità di qualità) rispetto alla normale codifica MPEG2 usata per le trasmissioni SD, permettendo di veicolare i flussi ad alta definizione, seppure in numero minore, sui transponder (frequenze) DVB-T.

Ecco alcune note per la visione e registrazione.

Requisiti

  • Un adattatore dvb-t (non deve avere nessuna caratteristica particolare per l’alta definizione, gli stream video e audio vengono estratti dalla trasmissione così come sono, senza elaborazione). Il fatto che alcuni adattatori vengano pubblicizzati con “supporto per HD” è relativo quasi sempre al fatto che vengono forniti con sw che decodifica i flussi h.264 (ammesso che la CPU sia abbastanza potente). Ovviamente il sw in genere è proprietario e funziona su sistemi operativi diversi da Linux, per il quale sono presenti invece già da tempo sw liberi per effettuare la decodifica.
  • dvb-tools (o dvb-apps) (per tzap, dvbscan, dvbtraffic ecc): i tool di base
  • dvbsnoop: uno strumento per l’analisi dettagliata dei flussi DVB
  • versione relativamente recente di mplayer (deve permettere la decodifica di flussi video h.264/MPEG4)

Configurazione

mplayer (ad esempio) è in grado di sintonizzare e riprodurre le trasmissioni dvb; per passargli i dati relativi ai canali disponibili occorre scrivere un file .mplayer/channels.conf nella vostra home.

Per ottenere questi dati rimando alla procedura descritta sul LinuxTV wiki.

Per le trasmissioni in h.264 occorre modificare leggermente le righe relative ai canali HD, aggiungendo il PID relativo al programma desiderato.

Di seguito le righe di channels.conf corrette per i canali come ricevibili da Pergine Valsugana:

Rai HD 1:690000000:INVERSION_AUTO:BANDWIDTH_8_MHZ:FEC_AUTO:FEC_AUTO:QAM_AUTO:TRANSMISSION_MODE_AUTO:GUARD_INTERVAL_AUTO:HIERARCHY_AUTO:524+534:544:8594
Rai HD Test:690000000:INVERSION_AUTO:BANDWIDTH_8_MHZ:FEC_AUTO:FEC_AUTO:QAM_AUTO:TRANSMISSION_MODE_AUTO:GUARD_INTERVAL_AUTO:HIERARCHY_AUTO:525+535:545:8595
R4 HD:698000000:INVERSION_AUTO:BANDWIDTH_8_MHZ:FEC_AUTO:FEC_AUTO:QAM_AUTO:TRANSMISSION_MODE_AUTO:GUARD_INTERVAL_AUTO:HIERARCHY_AUTO:258+1030:1031:1104

La modifica è consistita nella aggiunta di “524+”, “525+” e “258+”.

Senza il pid aggiuntivo mplayer non riconosce correttamente la codifica h.264 del flusso video.

N.B.: il channels.conf così modificato, e derivato dall’output di dvbscan o w_scan -x, non è più utilizzabile come il suo genitore da tzap, ma solo da mplayer.

Inoltre questo file è generato per il mio sintonizzatore, che è in grado di recuperare automaticamente vari parametri (questo è il significato dei vari *_AUTO). Appena possibile vedo di diffondere un file it-PergineValsugana (da dare in pasto a dvbscan) e di trasmetterlo ai manutentori delle dvb-apps.

I pid aggiunti sono i cossiddetti pid PMT (Program Map Table) che contengono le metainformazioni sui PID degli stream audio e video.

I PID si scoprono usando tzap per sintonizzare il canale, e quindi dvbsnoop (da altra console):

# dvbsnoop -s pidscan
dvbsnoop V1.4.50 -- http://dvbsnoop.sourceforge.net/

---------------------------------------------------------
Transponder PID-Scan...
---------------------------------------------------------
PID found:    0 (0x0000)  [SECTION: Program Association Table (PAT)]
PID found:    1 (0x0001)  [SECTION: Conditional Access Table (CAT)]
PID found:   21 (0x0015)  [SECTION: ITU-T Rec. H.222.0|ISO/IEC13818 reserved]
PID found:  524 (0x020c)  [SECTION: Program Map Table (PMT)]
PID found:  525 (0x020d)  [SECTION: Program Map Table (PMT)]
PID found:  534 (0x0216)  [PS/PES: ITU-T Rec. H.262 | ISO/IEC 13818-2 or ISO/IEC 11172-2 video stream]
PID found:  535 (0x0217)  [PS/PES: ITU-T Rec. H.262 | ISO/IEC 13818-2 or ISO/IEC 11172-2 video stream]
PID found:  544 (0x0220)  [PS/PES: ISO/IEC 13818-3 or ISO/IEC 11172-3 audio stream]
PID found:  545 (0x0221)  [PS/PES: ISO/IEC 13818-3 or ISO/IEC 11172-3 audio stream]

per listare tutti i pid relativi ai programmi sulla frequenza sintonizzata (MUX o Transponder, come si usa dire in altri termini ).

Sempre con dvbsnoop si analizzano poi i vari pid di tipo PMT, fino a trovare quello che al suo interno referenzia il PID video che interessa, e anche il tipo di codifica;

ad esempio, per il pid PMT 524:

# dvbsnoop 524 -n 1
dvbsnoop V1.4.50 -- http://dvbsnoop.sourceforge.net/

------------------------------------------------------------
SECT-Packet: 00000001   PID: 524 (0x020c), Length: 42 (0x002a)
Time received: Thu 2009-02-26  08:49:53.397
------------------------------------------------------------
  0000:  02 b0 27 21 92 c5 00 00  e2 16 f0 00 1b e2 16 f0   ..'!............
  0010:  0a 28 04 64 00 28 3f 2a  02 fe ef 03 e2 20 f0 06   .(.d.(?*..... ..
  0020:  0a 04 69 74 61 00 6c f9  f0 64                     ..ita.l..d

PID:  524 (0x020c)

Guess table from table id...
PMT-decoding....
Table_ID: 2 (0x02)  [= Program Map Table (PMT)]
section_syntax_indicator: 1 (0x01)
(fixed '0'): 0 (0x00)
reserved_1: 3 (0x03)
Section_length: 39 (0x0027)
Program_number: 8594 (0x2192)
reserved_2: 3 (0x03)
Version_number: 2 (0x02)
current_next_indicator: 1 (0x01)  [= valid now]
Section_number: 0 (0x00)
Last_Section_number: 0 (0x00)
reserved_3: 7 (0x07)
PCR PID: 534 (0x0216)
reserved_4: 15 (0x0f)
Program_info_length: 0 (0x0000)

Stream_type loop:

    Stream_type: 27 (0x1b)  [= AVC video stream as defined in ITU-T Rec. H.264 | ISO/IEC 14496-10   Video]
    reserved_1: 7 (0x07)
    Elementary_PID: 534 (0x0216)
    reserved_2: 15 (0x0f)
    ES_info_length: 10 (0x000a)

            MPEG-DescriptorTag: 40 (0x28)  [= AVC_video_descriptor]
            descriptor_length: 4 (0x04)
                 0000:  64 00 28 3f                                        d.(?

            MPEG-DescriptorTag: 42 (0x2a)  [= AVC_timing_and_HRD_descriptor]
            descriptor_length: 2 (0x02)
                 0000:  fe ef                                              ..


    Stream_type: 3 (0x03)  [= ISO/IEC 11172 Audio]
    reserved_1: 7 (0x07)
    Elementary_PID: 544 (0x0220)
    reserved_2: 15 (0x0f)
    ES_info_length: 6 (0x0006)

            MPEG-DescriptorTag: 10 (0x0a)  [= ISO_639_language_descriptor]
            descriptor_length: 4 (0x04)
               ISO639_language_code:  ita
               Audio_type: 0 (0x00)  [= undefined]


CRC: 1828319332 (0x6cf9f064)
==========================================================

Vediamo in particolare che al suo interno il pid 524 contiene:

Program_number: 8594
...
PCR PID: 534 (0x0216) 
...

controllando in channels.conf si vede che 8594 è l’identificativo (ultimo numero sulla riga) di Rai HD 1, e che 534 è il pid del flusso video.

Come si vede la codifica specificata è h.264:

Stream_type: 27 (0x1b)  [= AVC video stream as defined in ITU-T Rec. H.264 | ISO/IEC 14496-10   Video]

L’utilissimo dvbsnoop prevede anche una funzione di “spidering” che estrae tutta in una volta queste informazioni; provare per credere:

dvbsnoop -nohexdumpbuffer -spiderpid 0

Visione

Basta indicare l’url dvb relativo al canale scelto:

mplayer "dvb://Rai HD Test"

per registrare:

mplayer "dvb://Rai HD Test" -dumpstream  -dumpfile raihdtest.ts

Per chi usa mythtv, tutto è molto più semplice; mythtv riconosce e sintonizza senza problemi i canali DVB-T in HD.

Al momento attuale che io sappia l’unico supporto per la decodifica in hw sotto Linux di h.264 è nei nuovissimi (purtroppo proprietari) driver NVIDIA con supporto VDPAU che sono in evoluzione rapidissima.

E’ da notare l’estensività di VDPAU, che non si limita alla sola decodifica, ma anche al deinterlacing, inverse telecine, ecc…

Le prossime versioni di mythtv, mplayer e vlc conterranno tutte il supporto VDPAU, rendendo molto concreta la possibilità di realizzare HTPC Linux piccoli, economici e silenziosi per la visione di video in alta definizione.

Note

Tutti i canali sono a risoluzione 1080i oppure 1080p.

Rai HD 1 trasmette per lo più i programmi di rai uno riscalati in HD, e occasionalmente in HD “vera” (esempio, il festival di Sanremo 2009)

Anche R4 HD (nota: a settembre 2009 non più ricevibile da Pergine Valsugana) trasmette la versione riscalata dei programmi SD, ma in questo caso, da quanto posso intuire, in formato progressivo invece che interlacciato.

I segnali 1080i trasmessi dalla RAI sembrano utilizzare lo schema di interlacciamento PAFF (Picture-Adaptive Frame-Field coding), che è pienamente riconosciuto e supportato dai decoder software (ffmpeg), ma a quanto pare non ancora pienamente dai driver VDPAU (presenza intermittente di blocking).

Rai HD Test trasmette un banner che annuncia gli eventi in programma:

Banner RAI HD Test

WordPress Appliance - Powered by TurnKey Linux