Partager via


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

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

  1. Définissez les propriétés de l’encodeur DMO à l’aide de IPropertyBag::Write. La liste suivante récapitule 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) :

    • Lapropriété MFPKEY_VIDEOWINDOW spécifie la fenêtre de mémoire tampon à utiliser pour le flux. Pour plus d’informations sur le paramètre de fenêtres de mémoire tampon et sur la façon dont il affecte le contenu, consultez Méthodes d’encodage. La fenêtre de mémoire tampon par défaut est de trois secondes, ce qui convient à de nombreux scénarios.
    • La complexité de la vidéo est définie pour déterminer le compromis entre la qualité du contenu encodé et le temps nécessaire à l’encodage. Si vous ne définissez pas de valeur, la valeur par défaut est utilisée. Toutefois, 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 sur une valeur comprise entre 0 et la complexité maximale signalée.
    • MFPKEY_CRISP spécifie l’importance relative de la fluidité de la vidéo et la qualité d’image des images encodées. Dans la plupart des cas, la valeur par défaut fonctionne correctement.
    • Pour le contenu vidéo stocké dans un conteneur autre qu’ASF, la propriété MFPKEY_ASFOVERHEADPERFRAME doit être définie sur 0. Il ne s’agit pas de la valeur par défaut.

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

  2. Configurez la structure DMO_MEDIA_TYPE pour le type d’entrée ou, si vous utilisez le KIT de développement logiciel (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 ni ne convertit l’espace de couleur.

  3. Définissez le type d’entrée à l’aide de 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 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 fournie 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, consultez Utilisation de données privées de codec vidéo.

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

Notes

L’objet encodeur vidéo prend en charge deux sorties. La deuxième sortie est pour l’encodeur « post view ». Il fournit les exemples non compressés, car ils seront remis à partir du décodeur. Cela vous permet de surveiller la qualité de l’encodage sans avoir à attendre que l’ensemble du flux soit traité. 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