Configurando a codificação de vídeo (Microsoft Media Foundation)

Para configurar o codificador de vídeo, execute as seguintes etapas:

  1. Defina todas as propriedades no DMO do codificador usando IPropertyBag::Write. A lista a seguir resume o conjunto mínimo de propriedades necessárias para codificar um fluxo de vídeo CBR (todos esses valores têm padrões que podem ser usados):

    • A propriedadeMFPKEY_VIDEOWINDOW especifica a janela de buffer a ser usada para o fluxo. Para obter mais informações sobre a configuração de janelas de buffer e como ela afeta o conteúdo, consulte Métodos de codificação. A janela de buffer padrão é de três segundos, o que é apropriado para muitos cenários.
    • A complexidade do vídeo é definida para determinar a compensação entre a qualidade do conteúdo codificado e o tempo necessário para codificar. Se você não definir um valor, o valor padrão será usado. No entanto, você pode encontrar os modos recomendados para um codec específico chamando IWMCodecProps::GetCodecProp para recuperar g_wszWMVCComplexityExLive, g_wszWMVCComplexityExOffline e g_wszWMVCComplexityExMax. Em seguida, você pode definir MFPKEY_COMPLEXITYEX como um valor entre 0 e a complexidade máxima relatada.
    • MFPKEY_CRISP especifica a importância relativa da suavidade do vídeo e a qualidade da imagem dos quadros codificados. Na maioria dos casos, o valor padrão funciona bem.
    • Para conteúdo de vídeo armazenado em um contêiner diferente de ASF, a propriedade MFPKEY_ASFOVERHEADPERFRAME deve ser definida como 0. Esse não é o valor padrão.

    Para obter informações sobre como configurar fluxos de VBR, consulte Usando a codificação VBR.

  2. Configure a estrutura DMO_MEDIA_TYPE para o tipo de entrada ou, se você estiver usando o SDK do Media Foundation, use a função MFInitMediaTypeFromVideoInfoHeader . Use uma estrutura VIDEOINFOHEADER que descreve o conteúdo de entrada descompactado. O codec não redimensiona o vídeo nem converte o espaço de cor.

  3. Defina o tipo de entrada usando IMediaObject::SetInputType ou IMFTransform::SetInputType.

  4. Configure o tipo de saída para o codificador. Depois que o tipo de entrada é definido, o codificador enumera os tipos de saída que são concluídos, exceto para o membro dwBitrate da estrutura VIDEOINFOHEADER ou o atributo MF_MT_AVG_BITRATE da interface IMFMediaType . Se você recuperar um tipo de saída antes de definir um tipo de entrada, a estrutura de DMO_MEDIA_TYPE entregue não terá um VIDEOINFOHEADER associado.

  5. Recupere os dados privados do codec e acrescente-os à estrutura VIDEOINFOHEADER que você passa para a estrutura DMO_MEDIA_TYPE ou para IMFMediaType. Para obter mais informações, consulte Usando dados privados do Video Codec.

  6. Defina o tipo de saída chamando o método IMediaObject::SetOutputType ou IMFTransform::SetOutputType . Passe a estrutura DMO_MEDIA_TYPE com a estrutura VIDEOINFOHEADER concluída (incluindo dados privados acrescentados) referenciada no membro pbFormat ou construa um IMFMediaType chamando MFInitMediaTypeFromVideoInfoHeader.

Observação

O objeto do codificador de vídeo dá suporte a duas saídas. A segunda saída é para o codificador "pós-exibição". Ele fornece as amostras descompactadas, pois elas serão entregues do decodificador. Isso permite monitorar a qualidade da codificação sem precisar aguardar até que todo o fluxo seja processado. Essa saída é opcional. Se você quiser usá-lo, configure seu tipo seguindo o mesmo processo usado para definir o tipo de entrada do codificador.

 

Trabalhando com vídeo