Encodeur vidéo H.264

L’encodeur vidéo Microsoft Media Foundation H.264 est une transformation Media Foundation qui prend en charge les profils H.264 suivants :

  • Profil de base
  • Profil Main
  • Profil élevé (nécessite Windows 8)

L’encodeur vidéo H.264 expose les interfaces suivantes :

Types d’entrée

Le type de média d’entrée doit avoir l’un des sous-types suivants :

  • MFVideoFormat_I420
  • MFVideoFormat_IYUV
  • MFVideoFormat_NV12
  • MFVideoFormat_YUY2
  • MFVideoFormat_YV12

Pour plus d’informations sur ces sous-types, consultez GUID de sous-type vidéo.

Le type de sortie doit être défini avant le type d’entrée. Tant que le type de sortie n’est pas défini, la méthode IMFTransform::SetInputType de l’encodeur retourne MF_E_TRANSFORM_TYPE_NOT_SET.

Types de sortie

L’encodeur prend en charge un sous-type de sortie unique :

  • MFVideoFormat_H264

Définissez les attributs suivants sur le type de média de sortie.

Attribut Description
MF_MT_MAJOR_TYPE Type principal. Doit être MFMediaType_Video.
MF_MT_SUBTYPE Sous-type vidéo. Doit être MFVideoFormat_H264.
MF_MT_AVG_BITRATE Débit binaire moyen encodé, en bits par seconde. Doit être supérieur à zéro.
MF_MT_FRAME_RATE Fréquence d’images.
MF_MT_FRAME_SIZE Taille du cadre.
MF_MT_INTERLACE_MODE Mode entrelacé.
MF_MT_MPEG2_PROFILE Profil d’encodage H.264.
Les valeurs prises en charge sont les suivantes :
  • eAVEncH264VProfile_Base (valeur par défaut)
  • eAVEncH264VProfile_Main
  • eAVEncH264VProfile_High (nécessite Windows 8)
MF_MT_MPEG2_LEVEL Optionnel. Spécifie le niveau d’encodage H.264.
La valeur par défaut est –1, ce qui indique que l’encodeur sélectionne le niveau d’encodage.
Il est recommandé de ne pas définir le niveau dans le type de média et d’autoriser l’encodeur à sélectionner le niveau. L’encodeur peut dériver le niveau approprié pour un flux vidéo donné, en tenant compte des contraintes de format et des caractéristiques de la vidéo. Pour plus d’informations sur les contraintes de profil et de niveau, reportez-vous à l’Annexe A de l’UIT-T H.264.
MF_MT_PIXEL_ASPECT_RATIO Optionnel. Spécifie le rapport d’aspect en pixels. La valeur par défaut est 1:1.

 

Une fois le type de sortie défini, l’encodeur vidéo met à jour le type en ajoutant l’attribut MF_MT_MPEG_SEQUENCE_HEADER . Cet attribut contient l’en-tête de séquence.

Propriétés du codec

L’encodeur H.264 implémente l’interface ICodecAPI pour définir les paramètres d’encodage. Il prend en charge les propriétés suivantes.

Pour connaître les exigences de codec pour la certification de l’encodeur HCK, consultez la section Certified Hardware Encoder ci-dessous.

Les propriétés suivantes sont prises en charge dans Windows 7.

Propriété Description
CODECAPI_AVEncCommonRateControlMode Définit le mode de contrôle de débit. Consultez la section Notes. Le mode par défaut est le débit variable non contraint (VBR).
CODECAPI_AVEncCommonQuality Définit le niveau de qualité. Cette propriété s’applique lorsque le mode de contrôle de débit est VBR (eAVEncCommonRateControlMode_Quality) basé sur la qualité. La plage valide est comprise entre 1 et 100. La valeur par défaut est 70.
Pour définir ce paramètre, définissez la propriété avant d’appeler IMFTransform::SetOutputType.
Pour définir ce paramètre dans Windows 7, définissez la propriété avant d’appeler IMFTransform::SetOutputType. L’encodeur ignore les modifications une fois le type de sortie défini.
Dans Windows 8, cette propriété peut être définie à tout moment pendant l’encodage. Les modifications sont appliquées à partir de la trame d’entrée suivante.
En interne, l’encodeur convertit cette propriété en valeur AVEncVideoEncodeQP .

 

Les propriétés suivantes nécessitent Windows 8.

Propriété Description
CODECAPI_AVEncAdaptiveMode Définit le mode d’encodage adaptatif. L’encodeur H.264 prend en charge les modes suivants dans Windows 8 :
  • eAVEncAdaptiveMode_None. Pas d’encodage adaptatif. (valeur par défaut).
  • eAVEncAdaptiveMode_FrameRate. Modifiez la fréquence d’images de manière adaptative.

CODECAPI_AVEncCommonBufferSize Définit la taille de la mémoire tampon, en octets, pour l’encodage à débit binaire constant (CBR).
La plage valide est [1 ... 2 ² à 1].
Nécessite Windows 8.
CODECAPI_AVEncCommonMaxBitRate Pour l’encodage VBR contraint, spécifie la vitesse à laquelle le « compartiment qui fuit » est vidé, en bits par seconde. Cette propriété s’applique lorsque le mode de contrôle de débit est eAVEncCommonRateControlMode_PeakConstrainedVBR.
La plage valide est [1 ... 2 ² à 1].
CODECAPI_AVEncCommonMeanBitRate Définit le débit binaire moyen pour le flux de bits encodé, en bits par seconde. Cette propriété est ignorée si le mode de contrôle de débit est eAVEncCommonRateControlMode_Quality.
La plage valide est [1 ... 2 ² à 1].
Dans les modes CBR et VBR sans contrainte, le débit binaire moyen détermine la taille finale du fichier. En mode CBR, le débit binaire moyen est également la vitesse à laquelle les bits compressés sont vidés du « compartiment qui fuit ». (Pour plus d’informations, consultez Le modèle de mémoire tampon de compartiment qui fuit.)
Dans Windows 7, le débit binaire moyen est spécifié par l’attribut MF_MT_AVG_BITRATE sur le type de média.
Dans Windows 8, vous pouvez définir le débit binaire moyen à l’aide de l’attribut MF_MT_AVG_BITRATE ou de la propriété CODECAPI_AVEncCommonMeanBitRate. Si les deux sont définies, CODECAPI_AVEncCommonMeanBitRate remplace. Dans Windows 8, vous pouvez définir le débit binaire moyen pendant l’encodage. Si le débit binaire change, l’encodeur utilise l’encodage adaptatif.
CODECAPI_AVEncCommonQualityVsSpeed Définit le compromis qualité/vitesse. Plage valide :
  • 0 à 33 : faible complexité
  • 34 à 66 : complexité moyenne (par défaut)
  • 67 à 100 : complexité élevée

Cette valeur affecte la façon dont l’encodeur effectue diverses opérations d’encodage, telles que la compensation de mouvement. À des niveaux de complexité plus élevés, l’encodeur s’exécute plus lentement, mais produit une meilleure qualité au même débit binaire.
CODECAPI_AVEncH264CABACEnable Active ou désactive cabac (codage arithmétique binaire adaptatif au contexte) pour le codage entropie H.264. La valeur par défaut est VARIANT_FALSE.
CABAC n’est pas utilisé pour le profil de référence.
CODECAPI_AVEncH264SPSID Définit la valeur de seq_parameter_set_id dans l’unité SPS NAL du flux de bits H.264.
CODECAPI_AVEncMPVDefaultBPictureCount Définit le nombre maximal d’images B consécutives dans le flux binaire de sortie. Les valeurs autorisées sont :
  • 0 : N’utilisez pas d’images B (par défaut).
  • 1 : Utilisez une image B.
  • 2 : Utilisez deux images B.
Pour définir ce paramètre, définissez la propriété avant d’appeler IMFTransform::SetOutputType.
Pour profil de base, le nombre d’images B est toujours égal à zéro. L’encodeur remplacera des valeurs différentes de zéro.
Pour les autres profils H.264, si cette propriété n’est pas nulle, le modèle d’encodage est IBBPBBP, où le nombre maximal d’images B consécutives est égal à CODECAPI_AVEncMPVDefaultBPictureCount.
CODECAPI_AVEncMPVGOPSize Définit le nombre d’images d’un en-tête goP à l’autre, y compris l’ancre de début, mais pas la suivante.
La plage valide est [0 ... 2 ² à 1]. Si zéro, l’encodeur sélectionne la taille du goP. La valeur par défaut est zéro.
CODECAPI_AVEncNumWorkerThreads Définit le nombre de threads de travail utilisés par un encodeur.
La plage valide est comprise entre 0 et 16. Si zéro, l’encodeur sélectionne le nombre de threads.
CODECAPI_AVEncVideoContentType Indique le type de contenu vidéo.
CODECAPI_AVEncVideoEncodeQP Plage valide : 16 à 51. La valeur par défaut est 24.
Cette propriété s’applique lorsque le mode de contrôle de débit est eAVEncCommonRateControlMode_Quality.
Cette propriété configure le même paramètre d’encodage qu’AVEncCommonQuality. Toutefois, AVEncVideoEncodeQP permet à l’application de spécifier directement la valeur de QP. Si les deux propriétés sont définies, AVEncVideoEncodeQP remplace.
La valeur par défaut 24 correspond à la valeur par défaut de 70 pour le paramètre AVEncCommonQuality .
CODECAPI_AVEncVideoForceKeyFrame Force l’encodeur à coder l’image suivante en tant que trame clé.
CODECAPI_AVEncVideoMinQP Plage valide : 0 à 51. La valeur par défaut est 0.
Cette propriété s’applique à tous les modes de contrôle de débit. L’encodeur ne doit pas produire une valeur QP inférieure à ce qui est spécifié par la propriété CODECAPI_AVEncVideoMinQP .
CODECAPI_AVLowLatencyMode Active ou désactive le mode à faible latence. Consultez « Multithreading » dans la section Remarques.

 

Notes

L’encodeur prend en charge les modes de contrôle de débit suivants.

Mode Constante Description
Débit binaire constant (CBR) eAVEncCommonRateControlMode_CBR L’encodeur tente d’obtenir un débit binaire constant à l’aide d’un modèle de « compartiment d’fuite ». Le débit binaire cible est donné par la propriété CODECAPI_AVEncCommonMeanBitRate .
Nécessite Windows 8.
Débit variable contraint (VBR) eAVEncCommonRateControlMode_PeakConstrainedVBR L’encodeur utilise un modèle de « compartiment qui fuit » avec un débit de bits maximal. Le débit de drainage du compartiment qui fuit est donné par la propriété CODECAPI_AVEncCommonMaxBitRate .
Nécessite Windows 8.
Débit variable basé sur la qualité (VBR) eAVEncCommonRateControlMode_Quality L’encodeur tente d’atteindre un niveau de qualité constant, donné par la propriété AVEncCommonQuality .
VBR sans contrainte eAVEncCommonRateControlMode_UnconstrainedVBR L’encodeur tente d’atteindre le débit cible donné par l’attribut MF_MT_AVG_BITRATE dans le type de média de sortie. Il s’agit du mode par défaut ;

 

Les modes CBR et VBR contraints nécessitent Windows 8.

Dans Windows 8, l’encodeur définit les attributs suivants sur les exemples de sortie :

Notes

Une version précédente de la documentation indiquait à tort que l’encodeur est pris en charge sur Windows Server 2008 R2.

 

Multithreading

Dans Windows 8, l’encodeur prend en charge deux modes d’encodage :

  • Encodage de tranches. Dans ce mode, les tranches sont encodées en parallèle. Chaque tranche est encodée sur un thread différent. Ce mode a une faible latence, car une seule image est encodée en parallèle. Toutefois, cette approche n’est pas mise à l’échelle à mesure que le nombre de cœurs augmente, car le nombre de tranches est limité par le nombre de lignes macroblock dans l’image d’entrée.
  • Encodage multi-frame. Dans ce mode, l’encodeur accepte plusieurs trames d’entrée et les code en parallèle. Ce mode est mieux mis à l’échelle dans un environnement multicœur, mais introduit plus de latence.

L’encodeur utilise par défaut l’encodage de coupe pour réduire la latence. Pour activer l’encodage multi frame, définissez la propriété CODECAPI_AVLowLatencyModesur VARIANT_FALSE.

Pour définir le nombre de threads de travail utilisés par l’encodeur, définissez la propriété CODECAPI_AVEncNumWorkerThreads .

Dans Windows 7, l’encodeur utilise toujours l’encodage de tranche.

Encodeur matériel certifié

Si un encodeur matériel certifié est présent, il est généralement utilisé à la place de l’encodeur système de boîte de réception pour les scénarios liés à Media Foundation. Les encodeurs certifiés sont nécessaires pour prendre en charge un certain ensemble de propriétés ICodecAPI et peuvent éventuellement prendre en charge un autre ensemble de propriétés. Le processus de certification doit garantir que les propriétés requises sont correctement prises en charge et, si une propriété facultative est prise en charge, qu’elle est également correctement prise en charge.

Voici l’ensemble des propriétés ICodecAPI obligatoires et facultatives pour que les encodeurs réussissent la certification de l’encodeur HCK.

Les propriétés ICodecAPI Windows 8 et Windows 8.1 suivantes sont requises :

Les propriétés ICodecAPI Windows 8.1 suivantes sont facultatives, mais sont testées dans HCK si elles sont prises en charge.

Les propriétés ICodecAPI Windows 8 et Windows 8.1 suivantes sont facultatives, mais sont testées dans HCK si elles sont prises en charge.

Les propriétés ICodecAPI suivantes sont facultatives. Ils ne sont pas testés dans HCK.

Spécifications

Condition requise Valeur
Client minimal pris en charge
Windows 7 [applications de bureau uniquement]
Serveur minimal pris en charge
Aucun pris en charge
DLL
Mfh264enc.dll

Voir aussi

Codec Objects

Prise en charge de MPEG-4 dans Media Foundation

Formats multimédias pris en charge dans Media Foundation

Types de médias vidéo