Création d’un profil ASF
Cette rubrique explique comment créer un profil ASF dans Microsoft Media Foundation.
- Créer un profil
- Obtenir le profil à partir de l’objet ContentInfo ASF
- Obtenir le profil à partir d’un descripteur de présentation
- Rubriques connexes
Créer un profil
Pour créer un profil ASF vide, appelez la fonction MFCreateASFProfile . Cette fonction retourne un pointeur vers l’interface IMFASFProfile . L’application peut utiliser cette interface pour ajouter des flux au profil et pour configurer chacun des flux. Pour plus d’informations, consultez Création et configuration de flux ASF.
Si vous le souhaitez, l’application peut ajouter des objets d’exclusion mutuelle à plusieurs flux. Consultez Utilisation de l’exclusion mutuelle pour les flux ASF.
Obtenir le profil à partir de l’objet ContentInfo ASF
Une application peut obtenir le profil ASF d’un fichier ASF existant à partir de l’objet ContentInfo ASF. Le profil est déjà configuré et contient des paramètres pour tous les flux du fichier.
Initialisez l’objet ContentInfo en analysant l’objet d’en-tête ASF du fichier. Pour ce faire, utilisez la méthode IMFASFContentInfo::P arseHeader . Une fois tous les objets d’en-tête lus et la bibliothèque ASF remplie, le profil de ce fichier est généré. L’application peut obtenir un pointeur vers ce profil initialisé en appelant IMFASFContentInfo::GetProfile.
Obtenir le profil à partir d’un descripteur de présentation
Vous pouvez obtenir l’objet de profil d’un fichier ASF existant à partir du descripteur de présentation pour le fichier ou de l’objet ASF ContentInfo . Dans ce cas, le profil est déjà configuré et contient des paramètres pour tous les flux du fichier. Cela peut être utile si vous souhaitez modifier un profil ASF existant. Par exemple, vous souhaiterez peut-être réencoder un fichier Vidéo Windows Media à un débit inférieur.
Pour obtenir le profil à partir du descripteur de présentation, appelez MFCreateASFProfileFromPresentationDescriptor. Cette fonction analyse le descripteur de présentation et remplit un profil ASF avec des informations sur le fichier multimédia. La fonction retourne un pointeur vers l’interface IMFASFProfile. Vous pouvez ensuite utiliser cette interface pour modifier le profil.
Pour obtenir le descripteur de présentation, appelez l’une des méthodes suivantes :
- À partir de la source multimédia ASF, appelez IMFMediaSource::CreatePresentationDescriptor.
- À partir de l’objet ContentInfo ASF , appelez IMFASFContentInfo::GeneratePresentationDescriptor. Avant d’appeler cette méthode, assurez-vous que l’objet ContentInfo est initialisé pour la lecture. Pour plus d’informations, consultez « Initialisation de l’objet ContentInfo à partir d’un fichier ASF existant » dans Lecture de l’objet d’en-tête ASF d’un fichier existant. Toutefois, si vous avez déjà un objet ContentInfo initialisé, vous pouvez obtenir le profil directement à partir de celui-ci. Ceci est décrit dans « Obtention du profil à partir de l’objet ContentInfo » plus loin dans cette rubrique.
L’exemple suivant montre comment créer un profil à partir d’un descripteur de présentation. La fonction crée une source multimédia pour le fichier, obtient le descripteur de présentation à partir de la source multimédia et crée un profil. Cet exemple suppose que pszFileName spécifie l’URL d’un fichier ASF.
HRESULT GetASFProfile(PCWSTR pszFileName, IMFASFProfile** ppProfile)
{
*ppProfile = NULL;
IMFSourceResolver* pResolver = NULL;
IUnknown* pSourceUnk = NULL;
IMFMediaSource* pSource = NULL;
IMFPresentationDescriptor* pPD = NULL;
// Create the source resolver.
HRESULT hr = MFCreateSourceResolver(&pResolver);
// Use the source resolver to create the media source.
if (SUCCEEDED(hr))
{
MF_OBJECT_TYPE ObjectType;
hr = pResolver->CreateObjectFromURL(
pszFileName,
MF_RESOLUTION_MEDIASOURCE,
NULL,
&ObjectType,
&pSourceUnk
);
}
// Get the IMFMediaSource interface from the media source.
if (SUCCEEDED(hr))
{
hr = pSourceUnk->QueryInterface(IID_PPV_ARGS(&pSource));
}
// Get the presentation descriptor.
if (SUCCEEDED(hr))
{
hr = pSource->CreatePresentationDescriptor(&pPD);
}
// Get the profile from the presentation descriptor.
if (SUCCEEDED(hr))
{
hr = MFCreateASFProfileFromPresentationDescriptor(pPD, ppProfile);
}
SafeRelease(&pResolver);
SafeRelease(&pSourceUnk);
SafeRelease(&pSource);
SafeRelease(&pPD);
return hr;
}
Cet exemple utilise SafeRelease pour libérer des pointeurs d’interface.
Rubriques connexes