Aller au contenu principal

1. Introduction

1. Introduction

Ce mémo spécifie une spécification de charge utile RTP pour la norme de codage vidéo connue sous le nom de recommandation H.264 de l'UIT-T [1] et de norme internationale ISO/IEC 14496-10 [2] (toutes deux également connues sous le nom d'Advanced Video Coding (AVC)). Dans ce mémo, le nom H.264 est utilisé pour le codec et la norme, mais ce mémo s'applique également à la contrepartie ISO/IEC de la norme de codage.

Ce mémo rend obsolète le RFC 3984. Les modifications par rapport au RFC 3984 sont résumées dans la section 14. Les questions de compatibilité ascendante avec le RFC 3984 sont discutées dans la section 15.

1.1. The H.264 Codec (Le codec H.264)

Le codec vidéo H.264 a une gamme d'applications très large qui couvre toutes les formes de vidéo numérique compressée, depuis les applications de streaming Internet à faible débit jusqu'aux applications de diffusion HDTV et de cinéma numérique avec codage presque sans perte. Par rapport à l'état actuel de la technologie, les performances globales du H.264 sont telles que des économies de débit de 50% ou plus sont rapportées. La qualité de la télévision numérique par satellite, par exemple, serait réalisable à 1,5 Mbit/s, par rapport au point de fonctionnement actuel de la vidéo MPEG 2 à environ 3,5 Mbit/s [10].

La spécification du codec [1] elle-même distingue conceptuellement une couche de codage vidéo (Video Coding Layer, VCL) et une couche d'abstraction réseau (Network Abstraction Layer, NAL). La VCL contient la fonctionnalité de traitement du signal du codec ; des mécanismes tels que la transformation, la quantification et la prédiction avec compensation de mouvement ; et un filtre en boucle. Elle suit le concept général de la plupart des codecs vidéo d'aujourd'hui, un codeur basé sur les macroblocs qui utilise la prédiction inter-image avec compensation de mouvement et le codage par transformation du signal résiduel. L'encodeur VCL produit des tranches : une chaîne de bits qui contient les données de macrobloc d'un nombre entier de macroblocs et les informations de l'en-tête de tranche (contenant l'adresse spatiale du premier macrobloc de la tranche, le paramètre de quantification initial et des informations similaires). Les macroblocs dans les tranches sont disposés dans l'ordre de balayage, sauf si une allocation de macrobloc différente est spécifiée en utilisant la syntaxe des groupes de tranches. La prédiction intra-image n'est utilisée qu'au sein d'une tranche. Plus d'informations sont fournies dans [10].

L'encodeur NAL encapsule la sortie de tranche de l'encodeur VCL dans des unités de couche d'abstraction réseau (Network Abstraction Layer Units, NALUs), qui conviennent à la transmission sur des réseaux à paquets ou à l'utilisation dans des environnements de multiplexage orientés paquets. L'annexe B du H.264 définit un processus d'encapsulation pour transmettre de telles NALUs sur des réseaux orientés flux d'octets. Dans le cadre de ce mémo, l'annexe B n'est pas pertinente.

En interne, la NAL utilise des unités NAL. Une unité NAL se compose d'un en-tête d'un octet et d'une chaîne d'octets de charge utile. L'en-tête indique le type de l'unité NAL, la présence (potentielle) d'erreurs de bits ou de violations de syntaxe dans la charge utile de l'unité NAL, et des informations concernant l'importance relative de l'unité NAL pour le processus de décodage. Cette spécification de charge utile RTP est conçue pour ne pas être consciente de la chaîne de bits dans la charge utile de l'unité NAL.

L'une des principales propriétés du H.264 est le découplage complet du temps de transmission, du temps de décodage et du temps d'échantillonnage ou de présentation des tranches et des images. Le processus de décodage spécifié dans le H.264 n'est pas conscient du temps, et la syntaxe H.264 ne transporte pas d'informations telles que le nombre d'images sautées (comme c'est courant sous la forme de la référence temporelle dans les normes de compression vidéo antérieures). De plus, il existe des unités NAL qui affectent de nombreuses images et qui sont donc intrinsèquement intemporelles. Pour cette raison, la gestion de l'horodatage RTP nécessite des considérations spéciales pour les unités NAL pour lesquelles le temps d'échantillonnage ou de présentation n'est pas défini ou, au moment de la transmission, est inconnu.

1.2. Parameter Set Concept (Concept d'ensemble de paramètres)

Un concept de conception très fondamental du H.264 est de générer des paquets autonomes, pour rendre inutiles des mécanismes tels que la duplication d'en-tête du RFC 4629 [11] ou le code d'extension d'en-tête (Header Extension Code, HEC) de MPEG-4 Visual [12]. Cela a été réalisé en découplant les informations pertinentes pour plus d'une tranche du flux média. Ces méta-informations de couche supérieure devraient être envoyées de manière fiable, asynchrone et à l'avance du flux de paquets RTP qui contient les paquets de tranche. (Des dispositions pour envoyer ces informations en bande sont également disponibles pour les applications qui n'ont pas de canal de transport hors bande approprié à cet effet). La combinaison des paramètres de niveau supérieur est appelée un ensemble de paramètres. La spécification H.264 comprend deux types d'ensembles de paramètres : les ensembles de paramètres de séquence et les ensembles de paramètres d'image. Un ensemble de paramètres de séquence actif reste inchangé tout au long d'une séquence vidéo codée, et un ensemble de paramètres d'image actif reste inchangé au sein d'une image codée. Les structures d'ensemble de paramètres de séquence et d'image contiennent des informations telles que la taille de l'image, les modes de codage optionnels employés et la carte de macrobloc au groupe de tranches.

Pour pouvoir modifier les paramètres d'image (tels que la taille de l'image) sans avoir à transmettre des mises à jour d'ensemble de paramètres de manière synchrone au flux de paquets de tranche, l'encodeur et le décodeur peuvent maintenir une liste de plus d'un ensemble de paramètres de séquence et d'image. Chaque en-tête de tranche contient un mot de code qui indique l'ensemble de paramètres de séquence et d'image à utiliser.

Ce mécanisme permet le découplage de la transmission des ensembles de paramètres du flux de paquets et leur transmission par des moyens externes (par exemple, comme effet secondaire de l'échange de capacités) ou via un protocole de contrôle (fiable ou non fiable). Il peut même être possible qu'ils ne soient jamais transmis mais fixés par une spécification de conception d'application.

1.3. Network Abstraction Layer Unit Types (Types d'unités de couche d'abstraction réseau)

Des informations tutorielles sur la conception NAL peuvent être trouvées dans [13], [14] et [15].

Toutes les unités NAL se composent d'un seul octet de type d'unité NAL, qui sert également d'en-tête de charge utile pour ce format de charge utile RTP. Une description de la charge utile d'une unité NAL suit.

La syntaxe et la sémantique de l'octet de type d'unité NAL sont spécifiées dans [1], mais les propriétés essentielles de l'octet de type d'unité NAL sont résumées ci-dessous. L'octet de type d'unité NAL a le format suivant :

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

La sémantique des composants de l'octet de type d'unité NAL, telle que spécifiée dans la spécification H.264, est brièvement décrite ci-dessous.

F : 1 bit forbidden_zero_bit. La spécification H.264 déclare une valeur de 1 comme violation de syntaxe.

NRI : 2 bits nal_ref_idc. Une valeur de 00 indique que le contenu de l'unité NAL n'est pas utilisé pour reconstruire des images de référence pour la prédiction inter-image. De telles unités NAL peuvent être éliminées sans risquer l'intégrité des images de référence. Les valeurs supérieures à 00 indiquent que le décodage de l'unité NAL est requis pour maintenir l'intégrité des images de référence.

Type : 5 bits nal_unit_type. Ce composant spécifie le type de charge utile d'unité NAL tel que défini dans le tableau 7-1 de [1] et plus loin dans ce mémo. Pour une référence de tous les types d'unités NAL actuellement définis et leur sémantique, veuillez vous référer à la section 7.4.1 dans [1].

Ce mémo introduit de nouveaux types d'unités NAL, qui sont présentés dans la section 5.2. Les types d'unités NAL définis dans ce mémo sont marqués comme non spécifiés dans [1]. De plus, cette spécification étend la sémantique de F et NRI comme décrit dans la section 5.3.