12.3
Codifica video↓
In accordo al metodo di realizzazione dei
segnali video analogici, in cui i singoli quadri sono codificati
indipendentemente gli uni dagli altri, la codifica video digitale può
essere realizzata semplicemente applicando tecniche di codifica di
immagine (come
jpeg) ad ognuno dei
quadri che costituiscono la sequenza video: questo tipo di approccio
prende il nome di
moving jpeg
o
mjpeg↓.
D’altra parte, i quadri relativi ad istanti
temporali vicini sono spesso molto simili tra loro, anche se quanto
siano simili, e per quanto tempo, dipende dal tipo di filmato. La
presenza di
memoria nella sorgente determina quindi la
possibilità di ridurre il tasso informativo prodotto dalla codifica
ricorrendo a tecniche predittive, tentando quindi di
stimare il
movimento presente in quadri contigui, e trasmettere solo
l’informazione necessaria a
compensare l’errore di predizione.
Nella parte destra di fig.
12.35↑ è
mostrata l’immagine differenza
ΔY
tra la componente di luminanza di due quadri consecutivi, consentendo di
apprezzarne la relativa semplicità. Considerando poi che alcune regioni
si sono mosse più di altre, il quadro da codificare è scomposto in
sottoimmagini, per ognuna delle quali si ha un diverso spostamento, e
viene calcolata una specifica differenza rispetto alla sotto-immagine
precedente (e spostata); questa tecnica prende il nome di
compensazione
del movimento.
Come abbiamo fatto notare al §
11.1.1.6↑, le tecniche
di codifica predittiva sono particolarmente sensibili agli errori di
trasmissione, che possono causare una perdita di sincronismo tra i
predittori di trasmissione e ricezione, e quindi l’impossibilità di
ricostruire la restante parte di segnale. Per questo, nella codifica
video sono presenti dei quadri
di riferimento in corrispondenza
biunivoca con un unico quadro di partenza, detti
intracoded frames↓
o
I-frames, che permettono al ricevitore di ri-partire da una
condizione nota. Tra due quadri
I sono poi presenti un certo
numero di quadri
P (
predicted) come in fig.
12.36↓a, oltre che quadri
B
(
bidirectional↓) come in
fig.
12.36↓b,
e che corrispondono rispettivamente alla codifica della compensazione
del movimento calcolato a partire da un unico quadro precedente, o da
una coppia di quadri passato e futuro.
I quadri
I sono codificati mediante
l’algoritmo
jpeg, usando lo stesso
coefficiente di quantizzazione per tutti i pixel delle DCT, conseguendo
un rapporto di compressione relativamente basso, e sono inseriti a
cadenza fissa con un periodo
N
tipicamente compreso tra 3 e 12: la sequenza di quadri compresi tra due
quadri
I è detta
group of pictures o
gop↓.
Come mostrato in figura
12.36↑,
la codifica di quadri
P può dipendere dal quadro
I
immediatamente precedente, o dalla ricostruzione di un precedente quadro
P, ottenendo un fattore di compressione maggiore che per i quadri
I; la distanza temporale tra
P e l’originale
I è
detta
intervallo di predizione↓,
indicato con
M.
Per realizzare la compensazione del movimento,
ogni regione del nuovo quadro è confrontata con regioni limitrofe
del quadro precedente, riducendo così la complessità di ricerca. Nel
caso dei quadri B la ricerca delle regioni simili è invece
svolta rispetto ai quadri I (o P) situati sia nel
passato che al futuro, migliorando la precisione della stima di
movimento, e conseguendo rapporti di compressione ancora maggiori, a
patto di subire un aumento del ritardo di codifica, legato al dover
attendere un quadro futuro.
Allo scopo di ridurre il ritardo di decodifica, la
sequenza di quadri viene trasmessa con un ordine diverso da quello dei
quadri originali, consentendo ai quadri
B di essere riprodotti
non appena ricevuti, e non dopo la ricezione del quadro
futuro
da cui dipendono. Pertanto, se la sequenza originale è ad esempio
questa verrà trasmessa nell’ordine
Stima
di movimento
↓ e
compensazione
Specifichiamo innanzitutto cosa intendere con il
termine
regione prima usato per definire il dominio
dell’operazione di confronto necessaria alla stima di movimento. Come
mostrato in fig.
12.37↓a,
considerando uno suddivisione in componenti
Y
Cb Cr
ed un sottocampionamento 4:1:1, il quadro originale è suddiviso in
N righe e
M
colonne di
macroblocchi di 16x16 pixel, ed ogni macroblocco è
rappresentato da sei blocchi 8x8 pixel, di cui quattro blocchi per la
luminanza, più due blocchi per le componenti di crominanza; ogni blocco
8x8 corrisponde quindi ad un equivalente numero di coefficienti
dct,
ed è individuato all’interno del quadro, in base al suo indirizzo di
riga e colonna.
Nella codifica dei quadri
P, ogni
macroblocco
MT
del quadro corrente (
target) è confrontato pixel per pixel con il
corrispondente macroblocco
MR
del quadro
di riferimento, e nel caso sia riscontrata una
sufficiente similitudine complessiva, viene trasmesso
solo l’indirizzo del blocco. Altrimenti, il confronto viene ripetuto per
tutti i possibili spostamenti del macroblocco target nell’ambito dei
macroblocchi contigui,
e qualora sia individuata una buona corrispondenza, il macroblocco viene
codificato dal
vettore di movimento V
e dall’
errore di predizione↓ MD. Con riferimento
alla fig.
12.37↑b
in cui l’immagine è simboleggiata da un cerchio,
V
rappresenta lo spostamento da applicare a
MT
per portarlo a coincidere al meglio con il quadro precedente, ed è
codificato come una coppia
(x,
y) corrispondente ad una
risoluzione
di un pixel. Al contrario
MD
è composto dalle tre matrici (
Y Cb Cr)
dei valori differenza tra quelli di
MT
spostato di
V, ed
MR.
I valori di
V e di
MD
relativi ai diversi macroblocchi di un quadro seguono poi due diversi
percorsi di codifica, come specificato appresso.
Nel caso in cui la regione di ricerca sia estesa,
i valori V possono risultare
relativamente grandi; d’altra parte è probabile che macroblocchi vicini
esibiscano vettori di spostamento molto simili tra loro. Per questi
motivi, la sequenza dei V
calcolati per macroblocchi contigui viene prima sottoposta ad un
processo di codifica differenziale, e quindi i valori di differenza sono
rappresentati da codeword a lunghezza variabile di Huffman. D’altra
parte, le tre matrici differenza sono invece sottoposte alla stessa
sequenza di operazioni dei quadri I (dct,
quantizzazione, codifica entropica), conseguendo però un fattore di
compressione più elevato, essendo il macroblocco differenza con valori
quasi tutti molto piccoli.
Nel caso in cui la stima di movimento fallisca
(o a causa di una estensione di ricerca insufficiente, oppure per un
reale cambio di scena), il macroblocco è codificato in modo indipendente
come avviene per i quadri I.
I macroblocchi dei quadri B (vedi fig.
12.38↑) sono invece
confrontati sia con il
precedente quadro
MP
che con il
successivo MS,
ottenendo due possibili insiemi di matrici differenza
MD
e
M’D ed associati vettori
VP e
VS;
viene inoltre calcolato un ulteriore insieme
M’’D
come differenza tra
MR
e la media dei macroblocchi (spostati) di riferimento, e determinato
infine quale delle tre possibilità fornisca il minimo errore di
predizione. In base a questa scelta, si individua quale macroblocco
differenza codificare, assieme ai rispettivi vettori di movimento. Nel
caso prevalga la predizione basata sulla media tra macroblocchi di
riferimento, il vettore di movimento complessivo può determinare un
potere di risoluzione a livello di
sub-pixel.
La fig.
12.39↑
riassume la sequenza di operazioni applicate alle tre tipologie di
quadro
I,
P e
B. Mentre nel primo caso queste
seguono lo schema previsto dalla codifica
jpeg,
i quadri
P meritano qualche commento: allo scopo di alimentare
correttamente il componente di stima di movimento, il codificatore
mantiene memoria del quadro di riferimento, all’inizio posto pari ad un
quadro
I, e quindi sostituito da una copia dell’ultimo quadro
P,
ottenuto risommando il quadro differenza al precedente quadro di
riferimento. Lo stesso schema di calcolo è svolto nel caso di quadri
B,
tenendo ora conto anche del quadro successivo.
Rimarchiamo ora il fatto che, in funzione
dell’esito del processo di stima di movimento, esistono tre diverse
possibilità di rappresentazione per ogni macroblocco dei quadri P
e B:
- se non vi è movimento, viene trasmessa solo la sua posizione;
- se vi è movimento e si trova un riferimento abbastanza simile, sono
trasmessi il vettore di movimento e le matrici differenza;
- se non si è trovato un riferimento abbastanza simile, viene
effettuata una codifica inter come per il caso dei quadri I.
Ciò determina l’esigenza di disporre di formato
di trama di dimensione (e velocità) variabile, come realizzato
nell’esempio mostrato in fig.
12.40↓,
in cui ad ogni macroblocco è associato un tipo (
I,
P o
B),
il suo indirizzo nell’ambito del quadro, il coefficiente di
quantizzazione relativo ai termini della
dct,
ed il vettore di movimento (se presente). Quindi si dichiara l’identità
dei blocchi presenti (che potrebbero essere assenti in caso di immagini
statiche), e per questi viene infine prodotta la sequenza di
informazioni previste dalla codifica
jpeg.
12.3.1
Standard video
E’ lo standard di codifica video definito da itu-t a fine anni ’80 per le applicazioni
di videotelefonia su isdn, ed anche se
oggi tecnicamente superato, resta comunque un valido sistema di
riferimento che consente la retro-compatibilità tra apparati.
Il suo principale limite è la necessità di produrre una velocità ridotta
e vincolata a multipli di 64 kbps.
Formato |
Y
|
Cb,
Cr |
cif
|
352 x 288 |
176 x 144 |
qcif
|
176 x 144 |
88 x 72 |
La scelta del formato di immagine è limitata a quanto mostrato in
tabella,
mentre la scansione è non interallacciata e la velocità di rinfresco di
30 quadri/secondo per
cif oppure 15 o
7.5 per
qcif. Sono usati solo quadri
di tipo
I e
P, con un
gop↓
di 4 (ossia 3
P ogni
I), e sono usate le procedure
descritte alla sezione precedente per rappresentare ogni quadro nei
termini di macroblocchi composti da 16x16 pixel (4 blocchi di 8x8) di
luminanza e 2 blocchi 8x8 per ogni componente di colore
Cb,
Cr.
Ogni macroblocco segue la tipica formattazione
mostrata in fig.
12.41↑a;
tre file di 11 macroblocchi sono poi raggruppati in una nuova struttura
sintattica detta
gob↓ (
Group
of (macro)Blocks), che si articola in un contenuto (fig.
12.41↑b) ed una
intestazione (fig.
12.41↑c),
in cui troviamo un
codice di inizio scelto in modo da non poter
essere presente nella sequenza di codici di Huffman che seguono, e che
permette la risincronizzazione nel caso di
gob
mancanti (vedi appresso), in modo da poter tornare a riprodurre
un quadro in corrispondenza del primo
gob
disponibile. L’intero quadro è quindi realizzato con il formato di fig.
12.41↑d),
in cui compare un
codice di inizio quadro, un
riferimento
temporale necessario alla sincronizzazione con la traccia audio, e
l’indicazione del tipo di quadro (
I o
P); a cui segue la
sequenza dei
gob, in numero di 3
oppure 12 a seconda se il quadro rappresenti una immagine
qcif
o
cif, in modo da permettere
l’interoperabilità tra formati come mostrato in fig.
12.41↑e.
Dato che la codifica video produce una velocità
di trasmissione variabile
↓,
questa può eccedere la capacità del canale a disposizione, ed un modo
drastico
per risolvere il problema è di scartare alcuni
gob.
Il campo
Group number dell’intestazione dei
gob
permette quindi di collocare il nuovo
gob
anche in mancanza dei suoi predecessori.
Un approccio più articolato è quello mostrato
dalla figura
12.42↑a,
che ripercorre le tappe già discusse e relative al calcolo del vettore
di movimento ed alla codifica degli errori di predizione, ma pone in
evidenza il campo di intervento di un componente di
controllo
quantizzazione, che variando l’entità dei coefficienti di
quantizzazione della
dct, permette di
ridurre e/o aumentare la velocità di codifica complessiva. In
particolare, il controllo di quantizzazione opera in base allo stato di
riempimento del
buffer fifo↓
mostrato in fig.
12.42↑b,
alimentato dal risultato del processo di codifica e formattazione video,
e da cui sono prelevati i dati da inviare a velocità costante. Nel caso
in cui la velocità media di codifica ecceda quella disponibile,
l’aumento della occupazione del buffer determina l’aumento del
coefficiente di quantizzazione, e quindi una riduzione di qualità ma
anche della velocità media di codifica; ovviamente, anche l’inverso è
possibile, ossia un miglioramento di qualità mediante riduzione del
coefficiente di quantizzazione, nel caso in cui la scena sia statica, e
la codifica produca un basso bit rate che consente alla
fifo
di svuotarsi.
Nel caso di un aumento improvviso di velocità,
come anticipato si possono addirittura
scartare alcuni
gob,
mentre per i successivi si adottano coefficienti di quantizzazione
ridotti, comunicati anche al lato ricevente per mezzo dell’apposito
campo della intestazione
gob, come
mostrato in fig.
12.41↑c.
Anche questo definito da
itu-t
a partire dal 1995, nasce per risolvere i problemi di bassa qualità
dell’
h.261 a velocità molto ridotte,
come quelle offerte dai collegamenti modem
dial-up precedenti
all’introduzione dell’
adsl, ovvero per
migliorare la gestione delle possibili condizioni di errore sia sul
canale
dial-up che
wireless. Le specifiche originarie si
sono in seguito arricchite di estensioni, favorendo
l’adozione del codec da parte di altre applicazioni (inclusi i filmati
di
youtube), ed aggiungendo il supporto oltre che ai formati
nativi
cif e
qcif,
anche a
s-qcif,
4cif,
16cif,
sif
e 4
sif.
A partire dal 2003 si è formato un gruppo di lavoro congiunto tra
itu-t vceg (
Video Coding Expert Group)
e
iso/iec mpeg (
Moving Pictures
Experts Group), che segue la definizione del suo successore, l’
h.264 detto anche
avc
(Advanced Video Coding) o MPEG-4
part 10, determinando l’arresto
dello sviluppo di
h.263, che resta
comunque (assieme all’
h.261) supportato
da un gran numero di applicazioni multimediali. Sebbene la struttura
generale del codificatore e del bitstream ricalchi quella vista per l’
h.261, sono state introdotte alcune novità
significative, che tentiamo di elencare appresso.
In
h.263 sono
usati, oltre ai quadri di tipo
I e
P, anche quelli
bidirezionali
B, consentendo di ottenere fattori di compressione
maggiori, a parità di qualità percepita.
I
gob sono
ridefiniti come singole
strisce di macroblocchi, quindi ad
esempio per i formati
cif e
qcif
un
gob è ora formato da 11
macroblocchi in fila, anziché 33 come avveniva per l’
h.261.
Vettori
di movimento estesi
La stima di movimento dell’
h.261
si arresta in corrispondenza dei bordi del quadro, per cui anche se un
oggetto è solo parzialmente uscito di scena, il macroblocco
corrispondente viene codificato in modalità
intra. Al contrario
h.263 permette di estendere la ricerca
anche a vettori di spostamento che cadono al di fuori del quadro, alla
ricerca di una corrispondenza parziale, consentendo al contempo maggiore
efficienza e minor distorsione.
Anziché determinare il vettore di movimento in
base al confronto di un intero macroblocco, i 4 blocchi 8x8 che lo
costituiscono sono confrontati in modo indipendente con il quadro di
riferimento, permettendo una migliore compensazione del movimento anche
per l’immagine di oggetti che non solo traslano, ma si deformano. In
definitiva, sono prodotti 4 diversi vettori di movimento per ogni
macroblocco.
La presenza di un errore nella ricezione
di un gob, oltre ad impedire la
corretta riproduzione dello stesso, ostacola la riproduzione anche dei
quadri successivi che dipendono dai pixel presenti nel gob,
e peggio ancora l’errore finisce per estendersi anche ad altri gob,
in virtù degli effetti dell’errore sulla ricostruzione dei macroblocchi
predetti in presenza di movimento.
Per ridurre l’estensione temporale dell’effetto
dell’errore, e non dover attendere fino alla ricezione del successivo
quadro I, si può usare il canale di ritorno presente nei
collegamenti punto-punto, consentendo al decodificatore di inviare dei nack che notificano al mittente la coppia
(quadro, gob) per la quale si è
rilevato un errore. Il codificatore è quindi in grado di valutare esso
stesso le conseguenze sui quadri successivi, e può provvedere a fornire
una codifica intra per tutti i blocchi che necessitano di essere
rapidamente risincronizzati.
Il Moving Pictures Expert Group di iso emette una serie di standard ognuno
orientato ad un particolare dominio applicativo di segnali multimediali,
come
- mpeg-1 adotta un formato sif
di 352x288 pixel inteso per la memorizzazione audio-video a
qualità vhs su cdrom,
a velocità fino a 1.5 Mbps;
- mpeg-2 è orientato alla memorizzazione
e trasmissione audio-video secondo quattro livelli di
risoluzione, per ognuno dei quali diversi profili individuano tecniche
alternative di codifica;
- mpeg-4 è stato inizialmente
concepito per applicazioni simili a quelle dell’h.263,
ma il suo uso si è successivamente esteso ad un’ampia gamma di
applicazioni Internet.
Anche
mpeg-1
adotta tecniche del tutto simili a quelle dell’
h.261,
con una scansione dell’immagine progressiva ed un sottocampionamento
delle componenti di colore 4:1:1, una frequenza di quadro di 25 Hz,
l’adozione di quadri di tipo
I,
P e
B, la
rappresentazione dei quadri in termini di macroblocchi composti da 16x16
pixel di luminanza, più due blocchi 8x8 per ciascuna componente di
colore. Le principali differenze sono che
- possono essere inseriti riferimenti temporali all’interno
di un quadro, permettendo al decodificatore di sincronizzarsi più
rapidamente. L’intervallo tra due marche temporali è chiamato slice
e comprende una sequenza orizzontale di macroblocchi, tipicamente che
copre una intera riga,
o meno, ma non di più;
- l’uso dei quadri di tipo B aumenta la distanza temporale tra i
quadri di tipo P ed il loro riferimento, e quindi determina una
maggiore distanza coperta dalle porzioni di immagine in movimento,
cosicché l’ampiezza della finestra di ricerca adottata dal componente
di detezione di movimento è stata estesa.
La figura
12.45↓a
illustra la
struttura gerarchica del bitstream risultante,
secondo il quale l’intero filmato (
sequenza) è costituito da una
successione di
gop, ed ogni
gop
da una sequenza di quadri, ognuno costituito da una successione di
slice
che comprendono ognuno 22 macroblocchi, ognuno con 6 blocchi. La sezione
b di fig.
12.45↓
entra più nel dettaglio del formato del bitstream.
Livello |
formato |
bit rate |
applicazione |
mpeg-2
|
|
(Mbps) |
|
Low |
sif
|
< 1.5 |
registrazione |
|
|
|
qualità vhs
|
Main |
4:2:0 |
< 15 |
dvb - mp@ml
|
|
4:2:2 |
< 20 |
|
High 1440 |
4:2:0 |
< 60 |
hdtv
4/3 |
|
4:2:2 |
< 80 |
|
High |
4:2:0 |
< 80 |
hdtv
16/9 |
|
4:2:2 |
< 100 |
|
Allo scopo di poter usare questo stesso standard per diversi contesti
applicativi, sono stati definiti i quattro
livelli qualitativi
mostrati in tabella, e per ogni livello sono quindi definiti cinque
profili (
simple, main, spatial resolution, quantization accuracy,
high) in modo da permettere lo sviluppo di nuove tecnologie. Il
livello
Low è compatibile con
mpeg-1.
Affrontiamo ora la descrizione di ciò che è offerto dal profilo
Main
al livello
Main (MP@ML).
L’obiettivo è la diffusione televisiva
dvb,
con scansione interallacciata, risoluzione 720x576 a 25 quadri/secondo (
pal), sottocampionamento 4:2:0 per una
velocità risultante tra i 4 ed i 15 Mbps. La principale differenza
rispetto all’
mpeg-1 è legata alla
modalità di scansione
interallacciata, in modo che come mostrato
in fig.
12.46↑,
ogni quadro è costituito da due sottoquadri (o
campi) con le
righe rispettivamente dispari e pari, ponendo la questione: come
comporre i blocchi da 8x8 pixel su cui eseguire la
dct?
Sono possibili due alternative:
- la modalità campo (fig. 12.47↓a)
in cui i 16x16 pixel di un macroblocco sono ripartiti tenendo assieme
prima le sole righe dispari del primo campo, e quindi le sole righe
pari del secondo campo, oppure
- la modalità quadro (fig. 12.47↓b)
in cui si usa la stessa suddivisione già vista per il caso non
interallacciato, mescolando i due campi in ognuno dei blocchi.
La scelta migliore su quale tra le due modalità adottare dipende dal
tipo di scena che si sta rappresentando. Se è presente molto movimento,
è meglio adottare la modalità campo: essendo infatti i pixel di uno
stesso blocco collezionati in un tempo pari a metà dell’intervallo di
quadro (mentre nella seconda metà si collezionano i pixel della seconda
serie di blocchi), si ottiene un
fotogramma meno mosso;
viceversa in presenza di una scena con poco movimento, può essere
adottata la modalità quadro.
Per quanto riguarda la stima di movimento, sono
ora previste tre possibilità: la modalità campo prevede che i
campi dispari usino come riferimento i campi pari del quadro precedente,
ed i campi pari quelli dispari dello stesso quadro: in tal modo
l’intervallo temporale su cui è valutato il movimento è metà del periodo
di quadro. Nella modalità quadro invece, i campi pari e dispari
usano come riferimento i rispettivi campi pari e dispari del quadro
precedente, ed è più idoneo nel caso di movimenti lenti. Il meglio di
entrambi i modi si ottiene con la modalità mista, in cui sono
attuati entrambi gli approcci, e viene scelto per la trasmissione quello
in grado di dar luogo alla distorsione minore.
Sono definiti tre standard,
atv,
dvb e
muse,
rispettivamente per il Nord America, l’Europa ed il Giappone, a cui si
aggiunge la specifica
hdtv di
itu-r
relativa a studi di produzione e scambio internazionale, e che definisce
un rapporto di aspetto 16/9 con 1920 colonne per 1152 righe (di cui solo
1080 visibili), con scansione interallacciata e sottocampionamento
4:2:2.
atv include le specifiche di
itu-r, oltre che un formato ridotto, sempre
con aspetto 16/9 ma risoluzione 1280x720, e che adotta la codifica video
mpeg-2 mp@ml
e quella audio
ac-3. Il
dvb
è basato su di un rapporto di aspetto 4/3 con 1440x1152 pixel (di cui
1080 visibili), pari cioè al doppio della risoluzione
pal di 720x576. La codifica video è
mpeg-2 ssp@h1440
(
Spatially Scaleable Profile at High 1440), simile all’
mp@ml,
mentre la codifica audio è
mpeg audio
layer 2.
I flussi binari prodotti dai diversi
codificatori (audio, video) prendono il nome di
Elementary Stream↓
(
es), e possono essere multiplati
assieme per produrre un nuovo formato idoneo alla registrazione di un
contenuto multimediale completo, eventualmente arricchito da un flusso
di
dati privati, come mostrato in fig.
12.48↑a
per il caso di
mpeg-1.
Prima di effettuare la multiplazione, gli
es
sono suddivisi in
pacchetti di dimensione variabile denominati
Packetized
es (
pes↓)
in cui trova posto un
payload contenente
il risultato della codifica (ad es. un intero quadro), preceduto da una
intestazione contenente un codice univoco di inizio
pes
ed un codice che individua il tipo di payload del pacchetto (audio,
video o dati). L’intestazione
pes può
inoltre contenere un riferimento temporale necessario alla
sincronizzazione
audio-video, con risoluzione 33 bit, prodotto dal clock a 90 kHz
descritto in fig.
12.48↑
come
orologio di sistema, e ottenuto a partire da un oscillatore
a 27 MHz come mostrato alla figura a lato.
Nel momento in cui un
es
è pacchettizzato, viene inserito un
presentation timestamp (
pts) che ne individua l’istante di
riproduzione; per i flussi video è inserito anche un
decode timestamp (
dts) perché
come anticipato a pag.
1↑
l’ordine di trasmissione (e quindi di decodifica) può differire
dall’ordinamento naturale.
I pes derivanti
da diversi es possono essere quindi
inseriti in una struttura di trama detta Pack, che può infine
essere memorizzata ai fini di una successiva riproduzione.
Nel caso di trasmissione dei contenuti mediante
un sistema broadcast, tipicamente il singolo
Program Stream ps (equivalente a quello prima indicato
come
Pack) viene ulteriormente multiplato assieme ad altri, in
modo da realizzare un
Transport Stream (
ts),
come mostrato in fig.
12.50↓.
In particolare, la parte b) della figura mostra come i
pes
siano ora suddivisi in segmenti di lunghezza fissa e pari a 184 byte,
intestati con 4 byte, producendo una struttura di trama con pacchetti di
188 byte; l’ultimo pacchetto del
ts
che origina da uno stesso
pes è
riempito con uni fino a raggiungere i 188 byte. L’intestazione contiene,
oltre ad un byte di inizio con pattern unico, un
Packet
IDentification code (
pid) di 13
bit, che identifica il
pes a cui
appartiene il pacchetto, permettendo al decoder di recuperare il
programma a cui è interessato.
Alcuni
pid sono
riservati, come il
pid 8191 che indica
assenza di payload, ed il
pid 0, che annuncia l’inserimento nel
payload della
Program Association Table (
pat),
la cui ricezione permette al decoder di conoscere quali
pid
sono utilizzati per individuare i diversi
pes
(audio, video) di uno stesso programma.
Questo avviene per mezzo delle
Program Map Table (
pmt)
rappresentate in fig.
12.51↓:
ogni riga della
pat individua infatti
un nuovo
pid, alla ricezione del
quale, viene estratta dal payload la
pmt
che descrive i
pid dei flussi che
compongono il programma. Pertanto, quando uno spettatore seleziona un
programma, il decodificatore cerca nella
pat
il
pid della
pmt
associata, e quindi inizia a prelevare i pacchetti intestati con ognuno
dei
pid trovati nella
pmt,
per ricostruire i relativi
pes,
sincronizzarli, ed iniziare la riproduzione.