Compartilhar via


Inicializando o objeto ContentInfo de um novo arquivo ASF

Depois de criar um objeto ContentInfo vazio chamando a função MFCreateASFContentInfo , o aplicativo deve chamar IMFASFContentInfo::SetProfile para fornecer o perfil de codificação. Para obter informações sobre como criar um perfil, consulte Criando um perfil ASF.

Antes que as informações possam ser lidas do perfil, o método SetProfile deve validar o objeto de perfil especificado verificando os identificadores de fluxo ou os tipos de mídia. Se o perfil passar pela validação, vários objetos de cabeçalho serão gerados, como o Objeto Propriedades do Arquivo, o Objeto Propriedades de Taxa de Bits do Stream, o Objeto Propriedades do Stream e o Objeto de Exclusão Mútua.

SetProfile calcula e define valores recomendados para determinadas propriedades, como o valor de pré-registro. Se isso ainda não estiver definido, o valor de pré-registro recomendado em milissegundos dependerá da janela máxima de buffer do bucket com vazamento especificado para os fluxos no perfil. Da mesma forma, os tamanhos mínimo e máximo de pacotes de dados também são definidos. Os valores recomendados podem substituir os tamanhos de pacote definidos no perfil por meio de atributos.

Como o arquivo está em processo de criação, o arquivo é categorizado como um tipo de difusão, que é indicado pelo campo Sinalizadores do Objeto Propriedades do Arquivo. Determinados valores desconhecidos, como o número de pacotes de dados, a duração da reprodução e a duração do envio, são definidos como zero. Esses valores são representados por atributos MF_PD_ASF_xxx e devem ser atualizados pelo aplicativo após a conclusão da criação do arquivo.

O objeto de perfil especificado substitui qualquer perfil existente associado ao objeto ContentInfo, remove os objetos de cabeçalho referenciados e redefine propriedades de arquivo globais, como pré-registro e tamanho do pacote de dados.

O método SetProfile também cria o objeto de dados que representa o objeto de dados ASF. Se você reutilizar um objeto ContentInfo que inclua informações sobre quaisquer pacotes de dados, SetProfile falhará e retornará o erro MF_E_ALREADY_INITIALIZED indicando que ele já está associado a um objeto de dados ASF existente. Por padrão, para um novo objeto ContentInfo, a contagem de pacotes de dados é definida como zero e o tamanho do objeto de dados é definido como 50 bytes. Se você usar o multiplexer para gerar pacotes de dados, o multiplexer atualizará o objeto ContentInfo para refletir novos valores, como a contagem de pacotes de dados. Para obter mais informações sobre a geração de pacotes de dados, consulte Gerando novos pacotes de dados ASF.

Depois que todos os Objetos de Cabeçalho forem adicionados ao Objeto de Cabeçalho ASF final, o tamanho total do cabeçalho poderá ser recuperado chamando IMFASFContentInfo::GetHeaderSize. Esse tamanho inclui o tamanho inicial do objeto de dados.

Definindo propriedades no objeto ContentInfo

Gravando um objeto de cabeçalho ASF para um novo arquivo