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 :
|
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 :
|
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 :
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 :
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 :
- MFSampleExtension_DecodeTimestamp
- MFSampleExtension_VideoEncodePictureType
- MFSampleExtension_VideoEncodeQP
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 :
- CODECAPI_AVEncCommonRateControlMode
- CODECAPI_AVEncCommonQuality
- CODECAPI_AVEncCommonQualityVsSpeed
- CODECAPI_AVEncCommonMeanBitRate
- CODECAPI_AVEncCommonMaxBitRate
- CODECAPI_AVEncCommonBufferSize
- CODECAPI_AVEncMPVGOPSize
- CODECAPI_AVEncVideoEncodeQP
- CODECAPI_AVEncVideoForceKeyFrame
Les propriétés ICodecAPI Windows 8.1 suivantes sont facultatives, mais sont testées dans HCK si elles sont prises en charge.
- CODECAPI_AVEncVideoMinQP
- CODECAPI_AVEncVideoLTRBufferControl
- CODECAPI_AVEncVideoMarkLTRFrame
- CODECAPI_AVEncVideoUseLTRFrame
- CODECAPI_AVEncVideoEncodeFrameTypeQP
- CODECAPI_AVEncSliceControlMode
- CODECAPI_AVEncSliceControlSize
- CODECAPI_AVEncVideoMaxNumRefFrame
- CODECAPI_AVEncVideoMeanAbsoluteDifference
- CODECAPI_AVEncVideoMaxQP
- CODECAPI_AVEncVideoROIEnabled
- CODECAPI_AVEncVideoTemporalLayerCount (dynamique)
- CODECAPI_AVEncH264CABACEnable
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 |
|
Voir aussi