Création et configuration de flux ASF

Chaque fichier ASF contient un ou plusieurs flux. L’objet Profil ASF représente une collection de flux ASF. Pour l’encodage ASF, vous devez créer et configurer les flux que vous souhaitez encoder.

Une application peut effectuer les tâches suivantes avec l’objet Profil ASF :

  • Ajouter ou supprimer un flux
  • Obtenir les paramètres de configuration d’un flux
  • Configurer les extensions de charge utile
  • Ajouter, supprimer ou modifier un objet mutex ASF.

Cette rubrique contient les sections suivantes.

Création d’un nouveau flux

Un objet Profil ASF doit contenir les paramètres de configuration d’au moins un flux ASF. Chaque flux est représenté par un objet de configuration de flux, qui expose l’interface IMFASFStreamConfig. Les informations de l’objet de configuration de flux correspondent à l’objet Propriétés de flux et aux objets Propriétés de flux étendus dans l’en-tête de fichier ASF. (Consultez l’article Structure de fichier ASF.)

Pour ajouter un flux à un profil ASF, procédez comme suit :

  1. Créez un objet de configuration de flux vide.
  2. Configurez le flux en fonction des exigences de l’application.
  3. Ajoutez le flux au profil.

Pour créer un flux pour le profil, appelez IMFASFProfile::CreateStream afin de créer un objet de configuration de flux vide et recevoir le pointeur dans le paramètre ppIStream. CreateStream doit connaître le type du flux à créer. Les types de flux les plus courants utilisés dans les fichiers ASF sont les flux audio et vidéo. Dans Media Foundation, les types de flux sont indiqués par l’objet de type de média qui expose l’interface IMFMediaType. Le type principal du type de média définit la catégorie du flux multimédia numérique, tel que l’audio ou la vidéo. Le sous-type définit le format du type principal. Le type de média initial défini par CreateStream peut être modifié à l’aide de l’objet de configuration de flux. Pour récupérer le type de média du flux, appelez IMFASFStreamConfig::GetMediaType. Pour récupérer le type principal, appelez IMFASFStreamConfig::GetStreamType. Le type de média initial d’un flux peut être remplacé par un nouveau type de média configuré en appelant IMFASFStreamConfig::SetMediaType.

Si une application crée un profil à partir d’un descripteur de présentation valide en appelant MFCreateASFProfileFromPresentationDescriptor, la fonction définit automatiquement les objets de configuration de chacun des flux et les définit sur le profil. Les types de médias de flux sont définis en fonction des descripteurs de flux associés au descripteur de présentation.

Affectation de numéros de flux

Un numéro de flux doit être affecté aux flux de tous types. Les numéros de flux ne doivent pas être séquentiels, mais ils doivent être compris entre 1 et 127. Pour affecter des numéros de flux, appelez IMFASFStreamConfig::SetStreamNumber. Pour obtenir le numéro de flux, appelez IMFASFStreamConfig::GetStreamNumber.

Remarque

Un numéro de flux est différent d’un index de flux, que vous utilisez lors de l’obtention de flux dans un profil à l’aide de la méthode IMFASFProfile::GetStream. L’index de flux est un nombre affecté au flux par l’objet de profil. Les index de flux sont compris entre 0 et le nombre de flux récupérés par IMFASFProfile::GetStreamCount moins un. Vous pouvez également obtenir un flux à partir du profil par numéro de flux en appelant IMFASFProfile::GetStreamByNumber.

 

Définition des valeurs de seau percé

Chaque objet de configuration de flux qui représente un flux doit avoir des paramètres de seau percé et des valeurs de fenêtre de débit et de mémoire tampon associés.

Ces valeurs sont disponibles pour l’application via l’attribut MF_ASFSTREAMCONFIG_LEAKYBUCKET1 et l’attribut MF_ASFSTREAMCONFIG_LEAKYBUCKET2. Pour l’encodage de fichiers, les valeurs réelles dépendent du type d’encodage et sont déterminées par l’encodeur. Si vous avez déjà configuré un encodeur et que le type de sortie est défini sur celui-ci, l’application doit interroger l’encodeur pour connaître les paramètres de seau percé et définir les valeurs dans ces attributs.

Si vous utilisez les composants de couche de pipeline et que vous configurez les flux pour le récepteur multimédia ASF, vous n’avez probablement pas d’encodeur configuré. Dans ce cas, vous devez interroger les négociations de type post-média de l’encodeur et définir la valeur mise à jour dans la propriété MFPKEY_ASFSTREAMSINK_CORRECTED_LEAKYBUCKET de la bibliothèque de propriétés du récepteur multimédia ASF. La bibliothèque de propriétés d’encodage est récupérée via l’objet ContentInfo associé au profil. Les valeurs mises à jour sont reflétées automatiquement dans les valeurs d’attribut de seau percé du flux. Pour obtenir des informations générales sur les seaux percés et sur l’obtention de la valeur du seau percé à partir de l’encodeur, consultez l’article Modèle de mémoire tampon de seau percé.

Extensions de charge utile

Les données multimédias des flux sont ajoutées à l’objet Données ASF en tant qu’exemples multimédias par le multiplexeur ASF. Ces exemples multimédias peuvent contenir des données d’extension de charge utile : données de code temporel SMPTE, proportions de pixels non carrés, exemple de durée et une image clé de vidéo, le cas échéant. Pour obtenir la liste des types d’extensions de charge utile pris en charge, consultez l’article GUID d’extension de charge utile ASF.

Un flux doit être configuré pour accepter l’extension de charge utile afin qu’au cours de la génération d’exemples, le multiplexeur puisse ajouter les données supplémentaires à chaque exemple pour ce flux.

Pour obtenir le nombre total d’extensions de charge utile définies sur le flux, appelez IMFASFStreamConfig::GetPayloadExtensionCount, puis énumérez la liste en appelant IMFASFStreamConfig::GetPayloadExtension. Pour ajouter l’extension de charge utile pour le flux, appelez IMFASFStreamConfig::AddPayloadExtension. Des données supplémentaires sont ajoutées aux exemples multimédias individuels générés pour le flux.

Pour supprimer les extensions de charge utile existantes associées au flux, appelez IMFASFStreamConfig::RemoveAllPayloadExtensions.

Ajout d’un flux au profil

Une fois qu’un flux est configuré, appelez IMFASFProfile::SetStream pour ajouter le flux au profil.

Pour supprimer un flux existant dans le profil, appelez IMFASFProfile::RemoveStream.

Le profil configuré doit être défini sur l’objet ContentInfo en appelant IMFASFContentInfo::SetProfile. Si vous apportez des modifications à un flux existant, vous devez l’ajouter à nouveau au profil et définir le profil sur l’objet ContentInfo.

Profil ASF

Prise en charge d’ASF dans Media Foundation

Composants ASF WMContainer