Négociation du type de média sur l’encodeur

Dans Microsoft Media Foundation, les encodeurs sont implémentés en tant que transformations Media Foundation (MFT) avec une entrée et une sortie. Avant une session d’encodage, un encodeur doit connaître les caractéristiques du flux qu’il recevra en tant qu’entrée et le format du flux qu’il produira en sortie. Vous devez définir les types de médias d’entrée et de sortie et les caractéristiques associées avant de transmettre les données via l’encodeur. Vous devez fournir les formats d’entrée et de sortie en spécifiant les GUID de type de média appropriés et définir les caractéristiques du flux de sortie en définissant les attributs de type de média appropriés sur le type de média de sortie. Un encodeur nouvellement instancié n’a aucun type de média défini.

Le type de média d’entrée est un format non compressé, tel que l’audio PCM ou la vidéo RVB. Les types de format utilisés par l’encodeur sont limités à ceux décrits par les structures VIDEOINFOHEADER et WAVEFORMATEX . Pour plus d’informations sur ces structures, consultez la documentation du Kit de développement logiciel (SDK) Windows. Media Foundation fournit des fonctions d’assistance pour créer des types de médias à partir de structures de format. Par exemple, la fonction MFInitMediaTypeFromVideoInfoHeader initialise un type vidéo à partir d’une structure VIDEOINFOHEADER , et la fonction MFInitMediaTypeFromWaveFormatEx initialise un type vidéo à partir d’une structure WAVEFORMATEX ou WAVEFORMATEXTENSIBLE . Pour plus d’informations, consultez Conversions de types de média. Vous devez définir le type de média d’entrée sur l’encodeur en appelant IMFTransform::SetInputType.

Le type de média de sortie est le format de compression utilisé dans le flux ou fichier source final. Vous pouvez définir le type de média de sortie disponible uniquement après avoir défini le type de média d’entrée. Vous pouvez récupérer les types de sortie pris en charge en appelant IMFTransform::GetOutputAvailableType dans une boucle jusqu’à ce que l’encodeur retourne MF_E_NO_MORE_TYPES. Incrémentez l’index de type avec chaque itération. Lorsque vous trouvez un type de média approprié, définissez le type de média de sortie en appelant IMFTransform::SetOutputType.

Le facteur déterminant dans le choix du type de média de sortie dépend du type d’encodage et de vos exigences d’encodage. Par exemple, pour les flux audio encodés en CBR, vous souhaitez trouver un type de média qui correspond à votre entrée et dont le débit est le plus proche possible d’une valeur cible.

Si vous souhaitez utiliser un mode d’encodage autre que CBR, vous devez définir le mode, puis énumérer les types de sortie pour ce mode, car l’encodeur modifie les types de sortie pris en charge en fonction du mode défini. Les propriétés qui contrôlent le mode d’encodage sont MFPKEY_VBRENABLED et MFPKEY_PASSESUSED. Par exemple, si vous énumérez des types de sortie pour l’encodage de qualité VBR, le type de média dépend de la valeur de qualité que vous décidez d’utiliser. Pour plus d’informations sur la définition de ces propriétés, consultez Propriétés d’encodage.

Instanciation d’un encodeur MFT

Encodeurs Windows Media