Partager via


Configuration de l’encodage vidéo (Microsoft Media Foundation)

Pour configurer l’encodeur vidéo, procédez comme suit :

  1. Définissez toutes les propriétés de l’encodeur DMO en utilisant IPropertyBag::Write. La liste suivante résume l’ensemble minimal de propriétés requises pour encoder un flux vidéo CBR (toutes ces valeurs ont des valeurs par défaut qui peuvent être utilisées) :

    • La propriété MFPKEY_VIDEOWINDOW spécifie la fenêtre de tampon à utiliser pour le flux. Pour plus d’informations sur le réglage des fenêtres de tampon et son impact sur le contenu, veuillez consulter la section Méthodes d’encodage. La fenêtre de tampon par défaut est de trois secondes, ce qui est approprié pour de nombreux scénarios.
    • La complexité vidéo est définie pour déterminer le compromis entre la qualité du contenu encodé et le temps requis pour l’encoder. Si vous ne définissez pas de valeur, la valeur par défaut est utilisée. Cependant, vous pouvez trouver les modes recommandés pour un codec spécifique en appelant IWMCodecProps::GetCodecProp pour récupérer g_wszWMVCComplexityExLive, g_wszWMVCComplexityExOffline et g_wszWMVCComplexityExMax. Vous pouvez ensuite définir MFPKEY_COMPLEXITYEX à une valeur comprise entre 0 et la complexité maximale signalée.
    • MFPKEY_CRISP spécifie l’importance relative de la fluidité vidéo et de la qualité d’image des images encodées. Dans la plupart des cas, la valeur par défaut fonctionne bien.
    • Pour le contenu vidéo stocké dans un conteneur autre que ASF, la propriété MFPKEY_ASFOVERHEADPERFRAME doit être définie à 0. Ce n’est pas la valeur par défaut.

    Pour plus d’informations sur la configuration des flux VBR, veuillez consulter la section Utilisation de l’encodage VBR.

  2. Configurez la structure DMO_MEDIA_TYPE pour le type d’entrée, ou si vous utilisez le SDK Media Foundation, utilisez la fonction MFInitMediaTypeFromVideoInfoHeader. Utilisez une structure VIDEOINFOHEADER décrivant le contenu d’entrée non compressé. Le codec ne redimensionne pas la vidéo et ne convertit pas l’espace colorimétrique.

  3. Définissez le type d’entrée en utilisant IMediaObject::SetInputType ou IMFTransform::SetInputType.

  4. Configurez le type de sortie pour l’encodeur. Une fois le type d’entrée défini, l’encodeur énumère les types de sortie qui sont complets, à l’exception du membre dwBitrate de la structure VIDEOINFOHEADER, ou de l’attribut MF_MT_AVG_BITRATE de l’interface IMFMediaType. Si vous récupérez un type de sortie avant de définir un type d’entrée, la structure DMO_MEDIA_TYPE livrée n’aura pas de VIDEOINFOHEADER associé.

  5. Récupérez les données privées du codec et ajoutez-les à la structure VIDEOINFOHEADER que vous passez à la structure DMO_MEDIA_TYPE ou à IMFMediaType. Pour plus d’informations, veuillez consulter la section Utilisation des données privées du codec vidéo.

  6. Définissez le type de sortie en appelant la méthode IMediaObject::SetOutputType ou IMFTransform::SetOutputType. Passez soit la structure DMO_MEDIA_TYPE avec la structure VIDEOINFOHEADER complétée (y compris les données privées ajoutées) référencée dans le membre pbFormat, soit construisez une IMFMediaType en appelant MFInitMediaTypeFromVideoInfoHeader.

Remarque

L’objet encodeur vidéo prend en charge deux sorties. La deuxième sortie est destinée au « post view » de l’encodeur. Elle délivre les échantillons non compressés tels qu’ils seront délivrés par le décodeur. Cela vous permet de surveiller la qualité de l’encodage sans avoir à attendre que l’intégralité du flux soit traitée. Cette sortie est facultative. Si vous souhaitez l’utiliser, configurez son type en suivant le même processus que celui utilisé pour définir le type d’entrée de l’encodeur.

Utilisation de la vidéo