Partager via


Types de vidéos H.264

[La fonctionnalité associée à cette page, DirectShow, est une fonctionnalité héritée. Il a été remplacé par MediaPlayer, IMFMediaEngineet audio/vidéo capture dans Media Foundation. Ces fonctionnalités ont été optimisées pour Windows 10 et Windows 11. Microsoft recommande vivement que le nouveau code utilise MediaPlayer, IMFMediaEngine et capture audio/vidéo dans Media Foundation au lieu de directShow, lorsque cela est possible. Microsoft suggère que le code existant qui utilise les API héritées soit réécrit pour utiliser les nouvelles API si possible.]

Les sous-types de médias suivants sont définis pour la vidéo H.264.

Sous-type FOURCC Description
MEDIASUBTYPE_AVC1 'AVC1' Flux binaire H.264 sans codes de démarrage.
MEDIASUBTYPE_H264 'H264' Flux binaire H.264 avec codes de démarrage.
MEDIASUBTYPE_h264 'h264' Équivalent à MEDIASUBTYPE_H264, avec un autre FOURCC.
MEDIASUBTYPE_X264 'X264' Équivalent à MEDIASUBTYPE_H264, avec un autre FOURCC.
MEDIASUBTYPE_x264 'x264' Équivalent à MEDIASUBTYPE_H264, avec un autre FOURCC.

 

Ces GUID de sous-type sont déclarés dans wmcodecdsp.h.

La principale différence entre ces types de supports est la présence de codes de démarrage dans le flux binaire. Si le sous-type est MEDIASUBTYPE_AVC1, le flux binaire ne contient pas de codes de démarrage.

Flux de bits H.264 avec codes de démarrage

Les flux binaires H.264 transmis à l’air, ou contenus dans le programme MPEG-2 ou les flux de transport, ou enregistrés sur HD-DVD, sont mis en forme comme décrit dans l’annexe B de ITU-T Rec. H.264. Selon cette spécification, le flux de bits se compose d’une séquence d’unités de couche d’abstraction réseau (NALUs), dont chacun est précédé d’un code de début égal à 0x000001 ou 0x00000001.

Lorsque les codes de démarrage sont présents dans le flux binaire, le type de média suivant est utilisé :

Étiquette Valeur
Type principal MEDIATYPE_Video
Sous-types MEDIASUBTYPE_H264, MEDIASUBTYPE_h264, MEDIASUBTYPE_X264ou MEDIASUBTYPE_x264
Type de format FORMAT_VideoInfo, FORMAT_VideoInfo2, FORMAT_MPEG2Videoou GUID_NULL

 

Si le type de format est GUID_NULL, aucune structure de format n’est présente.

Lorsque le flux de bits contient des codes de démarrage, tous les types de format répertoriés ici sont suffisants, car le décodeur ne nécessite aucune information supplémentaire pour analyser le flux. Le flux de bits contient déjà toutes les informations nécessaires par le décodeur, et les codes de démarrage permettent au décodeur de localiser le début de chaque NALU.

Les sous-types suivants sont équivalents :

Flux binaire H.264 sans codes de démarrage

Le format de conteneur MP4 stocke les données H.264 sans codes de démarrage. Au lieu de cela, chaque NALU est précédé d’un champ de longueur, ce qui donne la longueur du NALU en octets. La taille du champ de longueur peut varier, mais elle est généralement de 1, 2 ou 4 octets.

Lorsque les codes de démarrage ne sont pas présents dans le flux binaire, le type de média suivant est utilisé.

Étiquette Valeur
Type principal MEDIATYPE_Video
Sous-type MEDIASUBTYPE_AVC1
Type de format FORMAT_MPEG2Video

 

Le bloc de format est une structure MPEG2VIDEOINFO. Cette structure doit être remplie comme suit :

  • hdr: structure VIDEOINFOHEADER2 qui décrit le flux de bits. Aucune table de couleurs n’est présente après la partie BITMAPINFOHEADER de la structure, et biClrUsed doit être zéro.
  • dwStartTimeCode: non utilisé. Défini sur zéro.
  • cbSequenceHeader: longueur du tableau dwSequenceHeader en octets.
  • dwProfile: spécifie le profil H.264.
  • dwLevel : spécifie le niveau H.264.
  • dwFlags: nombre d’octets utilisés pour le champ de longueur qui apparaît avant chaque NALU. Le champ de longueur indique la taille du NALU suivant en octets. Par exemple, si dwFlags est de 4, chaque NALU est précédé d’un champ de longueur de 4 octets. Les valeurs valides sont 1, 2 et 4.
  • dwSequenceHeader: tableau d’octets qui peut contenir un jeu de paramètres de séquence (SPS) et un ensemble de paramètres d’image (PPS).

Le conteneur MP4 peut contenir des jeux de paramètres de séquence (SPS) ou des jeux de paramètres d’image (PPS) en tant qu’unités NAL spéciales dans les en-têtes de fichier ou dans un flux distinct (distinct du flux vidéo). Lorsque le format est établi, le type de média peut spécifier des unités SPS et PPS NAL dans le tableau dwSequenceHeader. Si cbSequenceHeader est supérieur à zéro, dwSequenceHeader est le début d’un tableau d’octets contenant des NALUS SPS et PPS, délimités par des champs de longueur de 2 octets, tous dans l’ordre d’octet réseau (big-endian). Il est possible d’avoir à la fois SPS et PPS, un seul de ces types, ou aucun. Le type réel de chaque NALU peut être déterminé en examinant le champ nal_unit_type du NALU lui-même.

Lorsque ce type de média est utilisé, chaque exemple de média commence au début d’un NALU, et les unités NAL ne couvrent pas les échantillons. Cela permet au décodeur de récupérer des échantillons endommagés ou supprimés des données.