5.8. Fragmentation Units (FUs)
5.8. Fragmentation Units (FUs)
Ce type de charge utile permet de fragmenter une NAL unit en plusieurs paquets RTP. Le faire au niveau application plutôt que de s'appuyer sur la fragmentation de couche inférieure (par ex. par IP) présente les avantages suivants :
- Le format de charge utile peut transporter des NAL units de plus de 64 koctets sur un réseau IPv4, ce qui peut se produire dans la vidéo préenregistrée, notamment en haute définition (il existe une limite du nombre de tranches par image, d'où une limite de NAL units par image, pouvant produire de grandes NAL units).
- Le mécanisme de fragmentation permet de fragmenter une seule NAL unit et d'appliquer une correction d'erreur avant générique comme décrit à la section 12.5.
La fragmentation n'est définie que pour une seule NAL unit et non pour les paquets d'agrégation. Un fragment d'une NAL unit consiste en un nombre entier d'octets consécutifs de cette NAL unit. Chaque octet de la NAL unit DOIT faire partie d'exactement un fragment de cette NAL unit. Les fragments de la même NAL unit DOIVENT être envoyés dans l'ordre consécutif avec des numéros de séquence RTP croissants (sans autre paquet RTP dans le même flux de paquets RTP entre le premier et le dernier fragment). De même, une NAL unit DOIT être réassemblée dans l'ordre du numéro de séquence RTP.
Lorsqu'une NAL unit est fragmentée et transportée dans des unités de fragmentation (FU), on parle de NAL unit fragmentée. Les STAP et MTAP NE DOIVENT PAS être fragmentés. Les FU NE DOIVENT PAS être imbriqués ; autrement dit, une FU NE DOIT PAS contenir une autre FU.
L'horodatage RTP d'un paquet RTP portant une FU est défini au NALU-time de la NAL unit fragmentée.
La figure 14 présente le format de charge utile RTP pour les FU-A. Une FU-A se compose d'un indicateur d'unité de fragmentation d'un octet, d'un en-tête d'unité de fragmentation d'un octet et d'une charge utile d'unité de fragmentation.
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 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Figure 14. Format de charge utile RTP pour FU-A
La figure 15 présente le format de charge utile RTP pour les FU-B. Une FU-B se compose d'un indicateur d'unité de fragmentation d'un octet, d'un en-tête d'unité de fragmentation d'un octet, d'un numéro d'ordre de décodage (DON) (dans l'ordre d'octets réseau) et d'une charge utile d'unité de fragmentation. Autrement dit, la structure de FU-B est la même que celle de FU-A, à l'exception du champ DON supplémentaire.
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 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Figure 15. Format de charge utile RTP pour FU-B
Le type de NAL unit FU-B DOIT être utilisé en mode de paquetisation entrelacé pour la première unité de fragmentation d'une NAL unit fragmentée. Le type de NAL unit FU-B NE DOIT PAS être utilisé dans tout autre cas. Autrement dit, en mode de paquetisation entrelacé, chaque NALU fragmentée a une FU-B comme premier fragment, suivi d'un ou plusieurs fragments FU-A.
L'octet indicateur FU a le format suivant :
+---------------+
|0|1|2|3|4|5|6|7|
+-+-+-+-+-+-+-+-+
|F|NRI| Type |
+---------------+
Les valeurs égales à 28 et 29 dans le champ type de l'octet indicateur FU identifient respectivement une FU-A et une FU-B. L'utilisation du bit F est décrite à la section 5.3. La valeur du champ NRI DOIT être définie selon la valeur du champ NRI dans la NAL unit fragmentée.
L'en-tête FU a le format suivant :
+---------------+
|0|1|2|3|4|5|6|7|
+-+-+-+-+-+-+-+-+
|S|E|R| Type |
+---------------+
S : 1 bit
Lorsqu'il vaut un, le bit Start indique le début d'une NAL unit fragmentée. Lorsque la charge utile FU suivante n'est pas le début de la charge utile d'une NAL unit fragmentée, le bit Start est mis à zéro.
E : 1 bit
Lorsqu'il vaut un, le bit End indique la fin d'une NAL unit fragmentée, c'est-à-dire que le dernier octet de la charge utile est aussi le dernier octet de la NAL unit fragmentée. Lorsque la charge utile FU suivante n'est pas le dernier fragment d'une NAL unit fragmentée, le bit End est mis à zéro.
R : 1 bit
Le bit réservé DOIT être égal à 0 et DOIT être ignoré par le récepteur.
Type : 5 bits
Le type de charge utile NAL unit tel que défini dans le tableau 7-1 de [1].
La valeur de DON dans les FU-B est choisie comme décrit à la section 5.5.
Note informative : Le champ DON dans les FU-B permet aux passerelles de fragmenter des NAL units en FU-B sans organiser les NAL units entrantes selon l'ordre de décodage des NAL units.
Une NAL unit fragmentée NE DOIT PAS être transmise en une seule FU ; autrement dit, les bits Start et End NE DOIVENT PAS tous deux être à un dans le même en-tête FU.
La charge utile FU consiste en fragments de la charge utile de la NAL unit fragmentée de sorte que, si les charges utiles des FU consécutives sont concaténées séquentiellement, la charge utile de la NAL unit fragmentée peut être reconstruite. L'octet de type NAL unit de la NAL unit fragmentée n'est pas inclus tel quel dans la charge utile de l'unité de fragmentation ; plutôt, l'information de l'octet de type NAL unit de la NAL unit fragmentée est véhiculée dans les champs F et NRI de l'octet indicateur FU de l'unité de fragmentation et dans le champ type de l'en-tête FU. Une charge utile FU PEUT avoir un nombre quelconque d'octets et PEUT être vide.
Note informative : Les FU vides sont autorisées pour réduire la latence d'une certaine classe d'émetteurs dans des environnements presque sans perte. Ces émetteurs peuvent être caractérisés par le fait qu'ils paquetisent des fragments de NALU avant que la NALU soit entièrement générée et, donc, avant que la taille de la NALU soit connue. Si les fragments de NALU de longueur nulle n'étaient pas autorisés, l'émetteur devrait générer au moins un bit de données du fragment suivant avant que le fragment actuel puisse être envoyé. En raison des caractéristiques de H.264, où plusieurs macroblocs occupent parfois zéro bit, cela est indésirable et peut ajouter du délai. Toutefois, l'utilisation (potentielle) de fragments de NALU de longueur nulle doit être soigneusement pondérée face au risque accru de perte d'au moins une partie de la NALU en raison des paquets supplémentaires employés pour sa transmission.
Si une unité de fragmentation est perdue, le récepteur DEVRAIT rejeter toutes les unités de fragmentation suivantes dans l'ordre de transmission correspondant à la même NAL unit fragmentée.
Un récepteur dans un terminal ou dans un MANE PEUT agréger les n-1 premiers fragments d'une NAL unit en une NAL unit (incomplète), même si le fragment n de cette NAL unit n'est pas reçu. Dans ce cas, le forbidden_zero_bit de la NAL unit DOIT être mis à un pour indiquer une violation syntaxique.