Passa al contenuto principale

5.8. Fragmentation Units (FUs) (Unità di frammentazione)

5.8. Fragmentation Units (FUs) (Unità di frammentazione)

Questo tipo di payload consente di frammentare una NAL unit in più pacchetti RTP. Farlo a livello applicativo invece di affidarsi alla frammentazione di livello inferiore (ad es. da IP) offre i seguenti vantaggi:

  • Il formato di payload è in grado di trasportare NAL unit più grandi di 64 kbyte su una rete IPv4, come possono comparire in video preregistrato, in particolare in formati ad alta definizione (esiste un limite al numero di slice per immagine, che implica un limite di NAL unit per immagine, con possibili NAL unit molto grandi).
  • Il meccanismo di frammentazione consente di frammentare una singola NAL unit e di applicare correzione d'errore in avanti generica come descritto nella Sezione 12.5.

La frammentazione è definita solo per una singola NAL unit e non per pacchetti di aggregazione. Un frammento di una NAL unit consiste in un numero intero di ottetti consecutivi di quella NAL unit. Ogni ottetto della NAL unit DEVE far parte di esattamente un frammento di quella NAL unit. I frammenti della stessa NAL unit DEVONO essere inviati in ordine consecutivo con numeri di sequenza RTP crescenti (senza altri pacchetti RTP nello stesso flusso di pacchetti RTP tra il primo e l'ultimo frammento). Analogamente, una NAL unit DEVE essere riassemblata nell'ordine del numero di sequenza RTP.

Quando una NAL unit è frammentata e trasportata in unità di frammentazione (FU), si parla di NAL unit frammentata. Gli STAP e gli MTAP NON DEVONO essere frammentati. Le FU NON DEVONO essere annidate; cioè, una FU NON DEVE contenere un'altra FU.

Il timestamp RTP di un pacchetto RTP che trasporta una FU è impostato al NALU-time della NAL unit frammentata.

La Figura 14 presenta il formato del payload RTP per le FU-A. Una FU-A consiste in un indicatore di unità di frammentazione di un ottetto, un'intestazione di unità di frammentazione di un ottetto e un payload di unità di frammentazione.

 0                   1                   2                   3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| FU indicator | FU header | |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |
| |
| FU payload |
| |
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| :...OPTIONAL RTP padding |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Figura 14. Formato del payload RTP per FU-A

La Figura 15 presenta il formato del payload RTP per le FU-B. Una FU-B consiste in un indicatore di unità di frammentazione di un ottetto, un'intestazione di unità di frammentazione di un ottetto, un numero d'ordine di decodifica (DON) (in ordine di byte di rete) e un payload di unità di frammentazione. In altre parole, la struttura di FU-B è la stessa di FU-A, salvo il campo DON aggiuntivo.

 0                   1                   2                   3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| FU indicator | FU header | DON |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| |
| FU payload |
| |
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| :...OPTIONAL RTP padding |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Figura 15. Formato del payload RTP per FU-B

Il tipo di NAL unit FU-B DEVE essere usato nella modalità di pacchettizzazione interlacciata per la prima unità di frammentazione di una NAL unit frammentata. Il tipo di NAL unit FU-B NON DEVE essere usato in nessun altro caso. In altre parole, nella modalità interlacciata, ogni NALU frammentata ha una FU-B come primo frammento, seguito da uno o più frammenti FU-A.

L'ottetto indicatore FU ha il seguente formato:

   +---------------+
|0|1|2|3|4|5|6|7|
+-+-+-+-+-+-+-+-+
|F|NRI| Type |
+---------------+

I valori uguali a 28 e 29 nel campo type dell'ottetto indicatore FU identificano rispettivamente una FU-A e una FU-B. L'uso del bit F è descritto nella Sezione 5.3. Il valore del campo NRI DEVE essere impostato secondo il valore del campo NRI nella NAL unit frammentata.

L'intestazione FU ha il seguente formato:

   +---------------+
|0|1|2|3|4|5|6|7|
+-+-+-+-+-+-+-+-+
|S|E|R| Type |
+---------------+

S: 1 bit

Se impostato a uno, il bit Start indica l'inizio di una NAL unit frammentata. Quando il payload FU successivo non è l'inizio del payload di una NAL unit frammentata, il bit Start è zero.

E: 1 bit

Se impostato a uno, il bit End indica la fine di una NAL unit frammentata, cioè l'ultimo byte del payload è anche l'ultimo byte della NAL unit frammentata. Quando il payload FU successivo non è l'ultimo frammento di una NAL unit frammentata, il bit End è zero.

R: 1 bit

Il bit riservato DEVE essere uguale a 0 e DEVE essere ignorato dal ricevitore.

Type: 5 bit

Il tipo di payload NAL unit come definito nella Tabella 7-1 di [1].

Il valore di DON nelle FU-B è scelto come descritto nella Sezione 5.5.

Nota informativa: Il campo DON nelle FU-B consente ai gateway di frammentare NAL unit in FU-B senza organizzare le NAL unit in ingresso nell'ordine di decodifica delle NAL unit.

Una NAL unit frammentata NON DEVE essere trasmessa in una sola FU; cioè, i bit Start e End NON DEVONO essere entrambi impostati a uno nella stessa intestazione FU.

Il payload FU consiste in frammenti del payload della NAL unit frammentata in modo che, se i payload delle FU consecutive sono concatenati in sequenza, il payload della NAL unit frammentata possa essere ricostruito. L'ottetto di tipo NAL unit della NAL unit frammentata non è incluso come tale nel payload dell'unità di frammentazione; piuttosto, le informazioni dell'ottetto di tipo NAL unit della NAL unit frammentata sono veicolate nei campi F e NRI dell'ottetto indicatore FU dell'unità di frammentazione e nel campo type dell'intestazione FU. Un payload FU PUÒ avere un numero qualsiasi di ottetti e PUÒ essere vuoto.

Nota informativa: Le FU vuote sono consentite per ridurre la latenza di una certa classe di mittenti in ambienti quasi privi di perdite. Tali mittenti possono essere caratterizzati dal fatto che pacchettizzano frammenti di NALU prima che la NALU sia completamente generata e, quindi, prima che sia nota la dimensione della NALU. Se i frammenti di NALU di lunghezza zero non fossero consentiti, il mittente dovrebbe generare almeno un bit di dati del frammento successivo prima che il frammento corrente possa essere inviato. A causa delle caratteristiche di H.264, dove a volte più macroblocchi occupano zero bit, ciò è indesiderabile e può aggiungere ritardo. Tuttavia, l'uso (potenziale) di frammenti di NALU di lunghezza zero va attentamente bilanciato contro il maggior rischio di perdita di almeno una parte della NALU a causa dei pacchetti aggiuntivi impiegati per la trasmissione.

Se un'unità di frammentazione viene persa, il ricevitore DOVREBBE scartare tutte le unità di frammentazione successive nell'ordine di trasmissione corrispondenti alla stessa NAL unit frammentata.

Un ricevitore in un endpoint o in un MANE PUÒ aggregare i primi n-1 frammenti di una NAL unit in una NAL unit (incompleta), anche se il frammento n di quella NAL unit non è ricevuto. In questo caso, il forbidden_zero_bit della NAL unit DEVE essere impostato a uno per indicare una violazione sintattica.