Creación de un perfil de ASF
En este tema se describe cómo crear como perfil de ASF en Microsoft Media Foundation.
- Crear un nuevo perfil
- Obtener el perfil del objeto ContentInfo de ASF
- Obtener el perfil de un descriptor de presentación
- Temas relacionados
Crear un nuevo perfil
Para crear un perfil ASF vacío, llame a la función MFCreateASFProfile . Esta función devuelve un puntero a la interfaz IMFASFProfile . La aplicación puede usar esta interfaz para agregar flujos al perfil y configurar cada una de las secuencias. Para obtener más información, consulte Creación y configuración de secuencias asf.
Opcionalmente, la aplicación puede agregar objetos de exclusión mutua a dos o más secuencias. Consulte Using Mutual Exclusion for ASF Streams (Uso de exclusión mutua para secuencias asf).
Obtener el perfil del objeto ContentInfo de ASF
Una aplicación puede obtener el perfil asf de un archivo ASF existente del objeto ContentInfo de ASF. El perfil ya está configurado y contiene opciones para todas las secuencias del archivo.
Inicialice el objeto ContentInfo mediante el análisis del objeto de encabezado ASF del archivo. Esto se hace a través del método IMFASFContentInfo::P arseHeader . Una vez que se leen todos los objetos de encabezado y se rellena la biblioteca ASF, se genera el perfil de este archivo. La aplicación puede obtener un puntero a este perfil inicializado llamando a IMFASFContentInfo::GetProfile.
Obtener el perfil de un descriptor de presentación
Puede obtener el objeto de perfil de un archivo ASF existente desde el descriptor de presentación del archivo o desde el objeto ContentInfo de ASF . En este caso, el perfil ya está configurado y contiene opciones para todas las secuencias del archivo. Esto puede ser útil si desea modificar un perfil de ASF existente. Por ejemplo, es posible que quiera volver a codificar un archivo de vídeo de Windows Media a una velocidad de bits inferior.
Para obtener el perfil del descriptor de presentación, llame a MFCreateASFProfileFromPresentationDescriptor. Esta función analiza el descriptor de presentación y rellena un perfil de ASF con información sobre el archivo multimedia. La función devuelve un puntero a la interfaz IMFASFProfile. A continuación, puede usar esta interfaz para modificar el perfil.
Para obtener el descriptor de presentación, llame a uno de los métodos siguientes:
- Desde el origen multimedia de ASF, llame a IMFMediaSource::CreatePresentationDescriptor.
- Desde el objeto ContentInfo de ASF , llame a IMFASFContentInfo::GeneratePresentationDescriptor. Antes de llamar a este método, asegúrese de que el objeto ContentInfo se inicializa para la lectura. Para obtener más información, vea "Inicializar el objeto ContentInfo desde un archivo ASF existente" en Leer el objeto de encabezado ASF de un archivo existente. Sin embargo, si ya tiene un objeto ContentInfo inicializado, puede obtener el perfil directamente desde él. Esto se describe en "Obtener el perfil del objeto ContentInfo" más adelante en este tema.
En el ejemplo siguiente se muestra cómo crear un perfil a partir de un descriptor de presentación. La función crea un origen multimedia para el archivo, obtiene el descriptor de presentación del origen multimedia y crea un perfil. En este ejemplo se supone que pszFileName especifica la dirección URL de un archivo 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;
}
En este ejemplo se usa SafeRelease para liberar punteros de interfaz.
Temas relacionados