Compartilhar via


Negociação de tipo de mídia no codificador

No Microsoft Media Foundation, os codificadores são implementados como MFTs ( transformações do Media Foundation ) com uma entrada e uma saída. Antes de uma sessão de codificação, um codificador precisa saber as características do fluxo que receberá como entrada e o formato do fluxo que produzirá como saída. Você deve definir os tipos de mídia de entrada e saída e as características relacionadas antes de passar dados pelo codificador. Você deve fornecer os formatos de entrada e saída especificando os GUIDs de Tipo de Mídia apropriados e definir as características do fluxo de saída definindo os Atributos de Tipo de Mídia relevantes no tipo de mídia de saída. Um codificador recém-instanciado não tem nenhum tipo de mídia definido.

O tipo de mídia de entrada é um formato descompactado, como áudio PCM ou vídeo RGB. Os tipos de formato usados pelo codificador são limitados aos descritos pelas estruturas VIDEOINFOHEADER e WAVEFORMATEX . Para obter mais informações sobre essas estruturas, consulte a documentação do SDK do Windows. O Media Foundation fornece funções auxiliares para criar tipos de mídia a partir de estruturas de formato. Por exemplo, a função MFInitMediaTypeFromVideoInfoHeader inicializa um tipo de vídeo de uma estrutura VIDEOINFOHEADER e a função MFInitMediaTypeFromWaveFormatEx inicializa um tipo de vídeo de uma estrutura WAVEFORMATEX ou WAVEFORMATEXTENSIBLE . Para obter mais informações, consulte Conversões de tipo de mídia. Você deve definir o tipo de mídia de entrada no codificador chamando IMFTransform::SetInputType.

O tipo de mídia de saída é o formato de compactação usado no fluxo ou arquivo de origem final. Você pode definir o tipo de mídia de saída disponível somente depois de definir o tipo de mídia de entrada. Você pode recuperar os tipos de saída com suporte chamando IMFTransform::GetOutputAvailableType em um loop até que o codificador retorne MF_E_NO_MORE_TYPES. Incremente o índice de tipo com cada iteração. Quando você encontrar um tipo de mídia apropriado, defina o tipo de mídia de saída chamando IMFTransform::SetOutputType.

O fator decisivo na escolha do tipo de mídia de saída depende do tipo de codificação e dos requisitos de codificação. Por exemplo, para fluxos de áudio codificados em CBR, você deseja encontrar um tipo de mídia que corresponda à sua entrada e tenha uma taxa de bits o mais próxima possível de um valor de destino.

Se você quiser usar um modo de codificação diferente de CBR, defina o modo e enumere os tipos de saída para esse modo, pois o codificador altera os tipos de saída com suporte, dependendo do conjunto de modos. As propriedades que controlam o modo de codificação são MFPKEY_VBRENABLED e MFPKEY_PASSESUSED. Por exemplo, se você estiver enumerando tipos de saída para codificação de qualidade de VBR, o tipo de mídia dependerá do valor de qualidade que você decidir usar. Para obter informações sobre como definir essas propriedades, consulte Propriedades de codificação.

Instanciando um codificador MFT

Codificadores do Windows Media