Codificador de vídeo H.264

O codificador de vídeo do Microsoft Media Foundation H.264 é uma transformação do Media Foundation que dá suporte aos seguintes perfis H.264:

  • Perfil de Linha de Base
  • Perfil Principal
  • Alto perfil (requer Windows 8)

O codificador de vídeo H.264 expõe as seguintes interfaces:

Tipos de entrada

O tipo de mídia de entrada deve ter um dos seguintes subtipos:

  • MFVideoFormat_I420
  • MFVideoFormat_IYUV
  • MFVideoFormat_NV12
  • MFVideoFormat_YUY2
  • MFVideoFormat_YV12

Para obter mais informações sobre esses subtipos, consulte GUIDs de subtipo de vídeo.

O tipo de saída deve ser definido antes do tipo de entrada. Até que o tipo de saída seja definido, o método IMFTransform::SetInputType do codificador retornará MF_E_TRANSFORM_TYPE_NOT_SET.

Tipos de saída

O codificador dá suporte a um único subtipo de saída:

  • MFVideoFormat_H264

Defina os atributos a seguir no tipo de mídia de saída.

Atributo Descrição
MF_MT_MAJOR_TYPE Tipo principal. Deve ser MFMediaType_Video.
MF_MT_SUBTYPE Subtipo de vídeo. Deve ser MFVideoFormat_H264.
MF_MT_AVG_BITRATE Taxa média de bits codificados, em bits por segundo. Deve ser maior que zero.
MF_MT_FRAME_RATE Taxa de quadros.
MF_MT_FRAME_SIZE Tamanho do quadro.
MF_MT_INTERLACE_MODE Modo de entrelaçamento.
MF_MT_MPEG2_PROFILE Perfil de codificação H.264.
Os valores com suporte são:
  • eAVEncH264VProfile_Base (padrão)
  • eAVEncH264VProfile_Main
  • eAVEncH264VProfile_High (requer Windows 8)
MF_MT_MPEG2_LEVEL Opcional. Especifica o nível de codificação H.264.
O valor padrão é –1, indicando que o codificador selecionará o nível de codificação.
É recomendável não definir o nível no tipo de mídia e permitir que o codificador selecione o nível. O codificador pode derivar o nível adequado para um determinado fluxo de vídeo, levando em conta as restrições de formato e as características do vídeo. Para obter mais informações sobre restrições de perfil e nível, consulte Anexo A de ITU-T H.264.
MF_MT_PIXEL_ASPECT_RATIO Opcional. Especifica a taxa de proporção de pixel. O valor padrão é 1:1.

 

Depois que o tipo de saída é definido, o codificador de vídeo atualiza o tipo adicionando o atributo MF_MT_MPEG_SEQUENCE_HEADER . Esse atributo contém o cabeçalho de sequência.

Propriedades do Codec

O codificador H.264 implementa a interface ICodecAPI para definir parâmetros de codificação. Ele dá suporte às propriedades a seguir.

Para obter os requisitos de codec para certificação de codificador HCK, consulte a seção Codificador de Hardware Certificado abaixo.

As propriedades a seguir têm suporte no Windows 7.

Propriedade Descrição
CODECAPI_AVEncCommonRateControlMode Define o modo de controle de taxa. Consulte Observações. O modo padrão é a VBR (taxa de bits variável irrestrita).
CODECAPI_AVEncCommonQuality Define o nível de qualidade. Essa propriedade se aplica quando o modo de controle de taxa é VBR baseado em qualidade (eAVEncCommonRateControlMode_Quality). O intervalo válido é de 1 a 100. O valor padrão é 70.
Para definir esse parâmetro, defina a propriedade antes de chamar IMFTransform::SetOutputType.
Para definir esse parâmetro no Windows 7, defina a propriedade antes de chamar IMFTransform::SetOutputType. O codificador ignora as alterações depois que o tipo de saída é definido.
Em Windows 8, essa propriedade pode ser definida a qualquer momento durante a codificação. As alterações são aplicadas a partir do próximo quadro de entrada.
Internamente, o codificador converte essa propriedade em um valor AVEncVideoEncodeQP .

 

As propriedades a seguir exigem Windows 8.

Propriedade Descrição
CODECAPI_AVEncAdaptiveMode Define o modo de codificação adaptável. O codificador H.264 dá suporte aos seguintes modos no Windows 8:
  • eAVEncAdaptiveMode_None. Nenhuma codificação adaptável. (Padrão.)
  • eAVEncAdaptiveMode_FrameRate. Altere adaptávelmente a taxa de quadros.

CODECAPI_AVEncCommonBufferSize Define o tamanho do buffer, em bytes, para codificação cbr (taxa de bits constante).
O intervalo válido é [1 ... 23²–1].
Requer Windows 8.
CODECAPI_AVEncCommonMaxBitRate Para codificação de VBR restrita, especifica a taxa na qual o "bucket com vazamento" é drenado, em bits por segundo. Essa propriedade se aplica quando o modo de controle de taxa é eAVEncCommonRateControlMode_PeakConstrainedVBR.
O intervalo válido é [1 ... 23²–1].
CODECAPI_AVEncCommonMeanBitRate Define a taxa média de bits para o fluxo de bits codificado, em bits por segundo. Essa propriedade será ignorada se o modo de controle de taxa for eAVEncCommonRateControlMode_Quality.
O intervalo válido é [1 ... 23²–1].
Nos modos CBR e VBR não treinados, a taxa média de bits determina o tamanho final do arquivo. No modo CBR, a taxa média de bits também é a taxa na qual os bits compactados são drenados do "bucket com vazamento". (Para obter mais informações, consulte O modelo de buffer de bucket vazado.)
No Windows 7, a taxa média de bits é especificada pelo atributo MF_MT_AVG_BITRATE no tipo de mídia.
Em Windows 8, você pode definir a taxa média de bits usando o atributo MF_MT_AVG_BITRATE ou a propriedade CODECAPI_AVEncCommonMeanBitRate. Se ambos estiverem definidos, CODECAPI_AVEncCommonMeanBitRate substitui. Em Windows 8, você pode definir a taxa média de bits durante a codificação. Se a taxa de bits mudar, o codificador usará codificação adaptável.
CODECAPI_AVEncCommonQualityVsSpeed Define a compensação de qualidade/velocidade. Intervalo válido:
  • 0 a 33: Baixa complexidade
  • 34 a 66: Complexidade média (padrão)
  • 67 a 100: Alta complexidade

Esse valor afeta como o codificador executa várias operações de codificação, como compensação de movimento. Em níveis de complexidade mais altos, o codificador é executado mais lentamente, mas produz melhor qualidade na mesma taxa de bits.
CODECAPI_AVEncH264CABACEnable Habilita ou desabilita o CABAC (codificação aritmética binária adaptável de contexto) para codificação de entropia H.264. O valor padrão é VARIANT_FALSE.
CABAC não é usado para perfil de linha de base.
CODECAPI_AVEncH264SPSID Define o valor de seq_parameter_set_id na unidade NAL do SPS do bitstream H.264.
CODECAPI_AVEncMPVDefaultBPictureCount Define o número máximo de quadros B consecutivos no bitstream de saída. Os valores válidos são:
  • 0: Não use quadros B (padrão).
  • 1: Use um quadro B.
  • 2: use dois quadros B.
Para definir esse parâmetro, defina a propriedade antes de chamar IMFTransform::SetOutputType.
Para o perfil de linha de base, o número de quadros B é sempre zero. O codificador substituirá valores diferentes de zero.
Para outros perfis H.264, se essa propriedade não for zero, o padrão de codificação será IBBPBBP, em que o número máximo de quadros B consecutivos será igual a CODECAPI_AVEncMPVDefaultBPictureCount.
CODECAPI_AVEncMPVGOPSize Define o número de imagens de um cabeçalho GOP para o próximo, incluindo a âncora à esquerda, mas não a seguinte.
O intervalo válido é [0 ... 23²–1]. Se zero, o codificador selecionará o tamanho do GOP. O valor padrão é zero.
CODECAPI_AVEncNumWorkerThreads Define o número de threads de trabalho usados por um codificador.
O intervalo válido é de 0 a 16. Se zero, o codificador selecionará o número de threads.
CODECAPI_AVEncVideoContentType Indica o tipo de conteúdo de vídeo.
CODECAPI_AVEncVideoEncodeQP Intervalo válido: 16 a 51. O valor padrão é 24.
Essa propriedade se aplica quando o modo de controle de taxa é eAVEncCommonRateControlMode_Quality.
Essa propriedade define a mesma configuração de codificação que AVEncCommonQuality. No entanto, AVEncVideoEncodeQP permite que o aplicativo especifique o valor de QP diretamente. Se ambas as propriedades forem definidas, AVEncVideoEncodeQP substituirá.
O valor padrão de 24 corresponde ao valor padrão de 70 para a configuração AVEncCommonQuality .
CODECAPI_AVEncVideoForceKeyFrame Força o codificador a codificar o próximo quadro como um quadro-chave.
CODECAPI_AVEncVideoMinQP Intervalo válido: 0 a 51. O valor padrão é 0.
Essa propriedade se aplica a todos os modos de controle de taxa. O codificador não deve produzir um valor QP inferior ao especificado pela propriedade CODECAPI_AVEncVideoMinQP .
CODECAPI_AVLowLatencyMode Habilita ou desabilita o modo de baixa latência. Consulte "Multithreading" na seção Comentários.

 

Comentários

O codificador dá suporte aos seguintes modos de controle de taxa.

Mode Constante Descrição
CBR (taxa de bits constante) eAVEncCommonRateControlMode_CBR O codificador tenta obter uma taxa de bits constante, usando um modelo de "bucket com vazamento". A taxa de bits de destino é fornecida pela propriedade CODECAPI_AVEncCommonMeanBitRate .
Requer Windows 8.
VBR (taxa de bits variável restrita) eAVEncCommonRateControlMode_PeakConstrainedVBR O codificador usa um modelo de "bucket com vazamento" com uma taxa de bits de pico. A taxa de esvaziamento do bucket com vazamento é fornecida pela propriedade CODECAPI_AVEncCommonMaxBitRate .
Requer Windows 8.
VBR (taxa de bits variável baseada em qualidade) eAVEncCommonRateControlMode_Quality O codificador tenta alcançar um nível de qualidade constante, dado pela propriedade AVEncCommonQuality .
VBR não treinado eAVEncCommonRateControlMode_UnconstrainedVBR O codificador tenta alcançar a taxa de bits de destino fornecida pelo atributo MF_MT_AVG_BITRATE no tipo de mídia de saída. Esse é o modo padrão.

 

Os modos CBR e VBR restritos exigem Windows 8.

Em Windows 8, o codificador define os seguintes atributos nos exemplos de saída:

Observação

Uma versão anterior da documentação afirmou incorretamente que o codificador tem suporte no Windows Server 2008 R2.

 

Multithreading

Em Windows 8, o codificador dá suporte a dois modos de codificação:

  • Codificação de fatia. Nesse modo, as fatias são codificadas em paralelo. Cada fatia é codificada em um thread diferente. Esse modo tem baixa latência, pois uma única imagem é codificada em paralelo. No entanto, essa abordagem não é dimensionada à medida que o número de núcleos aumenta, pois o número de fatias é limitado pelo número de linhas de macroblock na imagem de entrada.
  • Codificação de vários quadros. Nesse modo, o codificador aceita vários quadros de entrada e os codifica em paralelo. Esse modo é dimensionado melhor em um ambiente multicore, mas introduz mais latência.

O codificador usa como padrão a codificação de fatia, para minimizar a latência. Para habilitar a codificação de vários quadros, defina a propriedade CODECAPI_AVLowLatencyMode como VARIANT_FALSE.

Para definir o número de threads de trabalho usados pelo codificador, defina a propriedade CODECAPI_AVEncNumWorkerThreads .

No Windows 7, o codificador sempre usa codificação de fatia.

Codificador de hardware certificado

Se um codificador de hardware certificado estiver presente, ele geralmente será usado em vez do codificador do sistema de caixa de entrada para cenários relacionados ao Media Foundation. Codificadores certificados são necessários para dar suporte a um determinado conjunto de propriedades ICodecAPI e, opcionalmente, podem dar suporte a outro conjunto de propriedades. O processo de certificação deve garantir que as propriedades necessárias têm suporte adequado e, se houver suporte para uma propriedade opcional, também terá suporte adequado.

Veja a seguir o conjunto de propriedades ICodecAPI necessárias e opcionais para codificadores passarem pela certificação do codificador HCK.

As seguintes propriedades ICodecAPI Windows 8 e Windows 8.1 são necessárias:

Os Windows 8.1 propriedades ICodecAPI a seguir são opcionais, mas são testados no HCK, se houver suporte.

Os Windows 8 e Windows 8.1 propriedades ICodecAPI a seguir são opcionais, mas são testados no HCK, se houver suporte.

As propriedades ICodecAPI a seguir são opcionais. Eles não são testados no HCK.

Requisitos

Requisito Valor
Cliente mínimo com suporte
Windows 7 [somente aplicativos da área de trabalho]
Servidor mínimo com suporte
Nenhum compatível
DLL
Mfh264enc.dll

Confira também

Objetos Codec

Suporte do MPEG-4 na Media Foundation

Formatos de mídia compatíveis com o Media Foundation

Tipos de mídia de vídeo