Compartir a través de


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

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:

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.

Perfil de ASF