Obtendo informações de objetos de cabeçalho ASF

As informações de cabeçalho ASF são armazenadas nos objetos de cabeçalho ASF de um arquivo de mídia. O Media Foundation fornece o objeto ContentInfo ASF para trabalhar com o Objeto Header. Um objeto ContentInfo preenchido é necessário para que o aplicativo leia informações de cabeçalho de um arquivo existente. Isso é feito chamando IMFASFContentInfo::P arseHeader. Se a análise for concluída com êxito, a biblioteca ASF do arquivo, que é mantida internamente pela Media Foundation, será preenchida com informações de cabeçalho de vários Objetos de Cabeçalho. Algumas dessas propriedades são expostas ao aplicativo, que ele pode recuperar por meio de atributos no descritor de apresentação, no descritor de fluxo, no perfil e nas propriedades de metadados.

Para obter a lista completa de atributos, consulte Atributos do Media Foundation para objetos de cabeçalho ASF.

Recuperando informações de cabeçalho de um descritor de apresentação

Um objeto descritor de apresentação contém a descrição de uma fonte de mídia específica, nesse caso, a fonte de mídia ASF. Se a chamada ParseHeader for concluída com êxito, as informações no nível do arquivo do Objeto Header serão armazenadas como atributos no descritor de apresentação. Para criar o descritor de apresentação, chame IMFASFContentInfo::GeneratePresentationDescriptor. Esse método retorna um ponteiro para um objeto descritor de apresentação populado que contém esses atributos para o arquivo ASF associado ao objeto ContentInfo. Para obter valores para atributos específicos, chame métodos IMFAttributes::Getxxx no descritor de apresentação e especifique o atributo MF_PD_ASF_xxx .

O código de exemplo a seguir recupera a duração de reprodução de um arquivo ASF, especificado por um objeto ContentInfo.

HRESULT GetPlayDuration(
    IMFASFContentInfo *pContentInfo,  // An initialized ContentInfo object. 
    UINT64 *pcbPlayDuration           // Receives the play duration.
    )
{
    IMFPresentationDescriptor* pPD = NULL;

    HRESULT hr = pContentInfo->GeneratePresentationDescriptor(&pPD);
    if (SUCCEEDED(hr))
    {
        hr = pPD->GetUINT64(MF_PD_ASF_FILEPROPERTIES_PLAY_DURATION, pcbPlayDuration);
        pPD->Release();
    }
    return hr;
}

Para obter mais informações sobre descritores de apresentação em geral, consulte Descritores de Apresentação.

Para obter o conjunto completo de atributos do descritor de apresentação, consulte Atributos do Descritor de Apresentação.

Recuperando informações de cabeçalho de um descritor de fluxo

Um objeto descritor de fluxo expõe a interface IMFStreamDescriptor e descreve as características dos fluxos no arquivo. O descritor de apresentação para o conteúdo do ASF contém um ou mais descritores de fluxo que representam os fluxos listados no Objeto Header. Após a chamada para IMFASFContentInfo::GeneratePresentationDescriptor for concluída com êxito , os descritores de fluxo subjacentes são preenchidos com informações de nível de fluxo dos vários Objetos de Cabeçalho. Para obter um descritor de fluxo para um fluxo ASF, chame IMFPresentationDescriptor::GetStreamDescriptorByIndex no descritor de apresentação gerado a partir do objeto ContentInfo.

Algumas das propriedades do fluxo são definidas como atributos em descritores de fluxo. Chame métodos IMFAttributes::Getxxx em um descritor de fluxo e especifique o atributo MF_SD_ASF_xxx .

Para obter o conjunto completo de atributos do descritor de fluxo, consulte os atributos "Descritor de Fluxo Específico do ASF" listados nos Atributos do Descritor de Fluxo.

Recuperando informações de cabeçalho do objeto Profile

Além dos descritores de fluxo, o objeto de perfil ASF também descreve as propriedades do fluxo. Para obter o perfil de um arquivo ASF existente, chame IMFASFContentInfo::GetProfile. O objeto de perfil ASF retornado por esse método não inclui nenhum dos atributos MF_PD_ASF_xxx . Esses atributos estão disponíveis para o aplicativo somente depois que ele chama MFCreateASFProfileFromPresentationDescriptor para gerar o objeto de perfil de um descritor de apresentação. Você pode usar o perfil para obter ponteiros para os objetos de exclusão mútua e priorização de fluxo.

Para obter informações sobre o objeto de perfil, consulte Perfil ASF .

Recuperando metadados de objetos de cabeçalho

Um arquivo ASF pode conter várias propriedades de metadados que são definidas durante a codificação de arquivo. Um aplicativo pode enumerar essas propriedades com o objeto ContentInfo. Algumas dessas propriedades, como informações de VBR (taxa de bits variáveis), estão disponíveis para o aplicativo por meio de atributos no descritor de apresentação, descritores de fluxo e tipos de mídia para o arquivo de mídia. Esses atributos são definidos no objeto ContentInfo durante a inicialização por meio da chamada ParseHeader .

Objeto ASF ContentInfo