Definindo propriedades no objeto ContentInfo

Ao criar um arquivo ASF, o objeto ContentInfo precisa saber as características do conteúdo de mídia para que os vários objetos de cabeçalho sejam preenchidos com os valores corretos.

As definições de configuração de conteúdo são configurações de fluxo, que estão contidas no perfil e especificam o identificador de fluxo, o tipo de mídia e os parâmetros de bucket com vazamento para o coletor de mídia. Depois que o perfil é definido no objeto ContentInfo chamando IMFASFContentInfo::SetProfile, esses valores são refletidos no objeto de cabeçalho ASF que foi gerado. Para obter informações sobre essas configurações, consulte Criando e configurando fluxos ASF.

Definindo o objeto ContentInfo com configurações do codificador

Os dados de áudio ou vídeo de mídia digital são complexos e consomem grandes quantidades de memória. Na maioria das circunstâncias, áudio e vídeo são compactados usando codificadores antes de serem adicionados a um arquivo ASF. No Media Foundation, os codificadores são implementados como MFTs ( Media Foundation Transforms ) com uma entrada e uma saída. Você deve selecionar o tipo de mídia de saída, dependendo do tipo de mídia do fluxo de entrada e do tipo de codificação escolhido para compactar o fluxo.

Antes da sessão de codificação, o codificador deve ser configurado definindo as propriedades relevantes, dependendo do tipo de codificação.

Depois de configurar o codificador, você deve configurar o objeto ContentInfo com os valores do codificador porque o Multiplexador ASF e o Coletor de Mídia ASF, que são inicializados com o objeto ContentInfo preenchido, usam configurações como os valores de bucket vazados, para gerar pacotes de dados ASF. Os valores não são salvos no objeto de cabeçalho ASF final. As configurações de codificação são expostas como propriedades. Para configurar o objeto ContentInfo com as propriedades do codificador, faça o seguinte:

  1. Obtenha um ponteiro para o repositório de propriedades do codificador consultando o codificador (interface IMFTransform ) diretamente para a interface IPropertyStore .
  2. Chame IMFASFContentInfo::GetEncodingConfigurationPropertyStore. Para definir propriedades específicas do fluxo, especifique o identificador de fluxo no parâmetro wStreamNumber ; para propriedades de nível de arquivo, passe 0. O parâmetro ppIStore recebe um ponteiro para a interface IPropertyStore . O repositório de propriedades recebido está vazio.
  3. Chame IPropertyStore::GetValue no codificador e obtenha o valor da propriedade especificando as constantes de chave de propriedade. Para obter uma lista completa das propriedades de codificação, consulte a Referência de programação codec.
  4. Chame IPropertyStore::SetValue no objeto ContentInfo para definir a propriedade necessária no repositório de propriedades.
  5. Repita as etapas 3 e 4 para cada propriedade que você deseja definir.

O coletor de mídia ASF pode ser criado usando um objeto de ativação chamando MFCreateASFMediaSinkActivate. O novo objeto de coletor de mídia é definido com base em configurações específicas do coletor de mídia que podem ser definidas no repositório de propriedades do objeto ContentInfo. A tabela a seguir mostra as constantes de propriedade do coletor de mídia ASF.

Propriedade Descrição
MFPKEY_ASFMEDIASINK_BASE_SENDTIME O tempo de envio indica quando o conteúdo dentro do bucket vazado será liberado. Esse valor da propriedade indica a primeira hora de envio. O multiplexador usa esse valor para calcular os tempos de envio subsequentes para os pacotes gerados e garante que os dados fluam constantemente por meio do bucket com vazamento.
MFPKEY_ASFMEDIASINK_AUTOADJUST_BITRATE Esse valor BOOL indica se o multiplexador precisa ajustar a taxa de bits automaticamente para garantir que os dados não estourom o bucket com vazamento.
MFPKEY_ASFMEDIASINK_DRMACTION Isso indica a ação DRM do coletor de mídia DO ASF para geração de arquivos. Nesta versão, há suporte apenas para o transcódigo DRM.
MFPKEY_ASFSTREAMSINK_CORRECTED_LEAKYBUCKET Essa propriedade deve ser definida quando o codificador decidir qual janela de buffer e taxa de bits usar. Para definir esses valores, use a interface IWMCodecLeakyBucket . Isso deve ser definido para cada fluxo no arquivo ASF.

 

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