Criando um perfil ASF

Este tópico descreve como criar como perfil ASF no Microsoft Media Foundation.

Criar um novo perfil

Para criar um perfil ASF vazio, chame a função MFCreateASFProfile . Essa função retorna um ponteiro para a interface IMFASFProfile . O aplicativo pode usar essa interface para adicionar fluxos ao perfil e configurar cada um dos fluxos. Para obter mais informações, consulte Criando e configurando fluxos ASF.

Opcionalmente, o aplicativo pode adicionar objetos de exclusão mútua a dois ou mais fluxos. Consulte Usando exclusão mútua para fluxos ASF.

Obter o perfil do objeto ContentInfo do ASF

Um aplicativo pode obter o perfil ASF de um arquivo ASF existente do Objeto ContentInfo do ASF. O perfil já está configurado e contém configurações para todos os fluxos no arquivo.

Inicialize o objeto ContentInfo analisando o objeto de cabeçalho ASF do arquivo. Isso é feito por meio do método IMFASFContentInfo::P arseHeader . Depois que todos os Objetos de Cabeçalho forem lidos e a biblioteca ASF for preenchida, o perfil desse arquivo será gerado. O aplicativo pode obter um ponteiro para esse perfil inicializado chamando IMFASFContentInfo::GetProfile.

Obter o perfil de um descritor de apresentação

Você pode obter o objeto de perfil de um arquivo ASF existente do descritor de apresentação para o arquivo ou do objeto ContentInfo do ASF . Nesse caso, o perfil já está configurado e contém configurações para todos os fluxos no arquivo. Isso pode ser útil se você quiser modificar um perfil ASF existente. Por exemplo, talvez você queira recodificar um arquivo de Vídeo do Windows Media a uma taxa de bits mais baixa.

Para obter o perfil do descritor de apresentação, chame MFCreateASFProfileFromPresentationDescriptor. Essa função analisa o descritor de apresentação e preenche um perfil ASF com informações sobre o arquivo de mídia. A função retorna um ponteiro para a interface IMFASFProfile. Em seguida, você pode usar essa interface para modificar o perfil.

Para obter o descritor de apresentação, chame um dos seguintes métodos:

O exemplo a seguir mostra como criar um perfil de um descritor de apresentação. A função cria uma fonte de mídia para o arquivo, obtém o descritor de apresentação da fonte de mídia e cria um perfil. Este exemplo pressupõe que pszFileName especifique a URL de um arquivo 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;
}

Este exemplo usa SafeRelease para liberar ponteiros de interface.

Perfil do ASF