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:
|
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:
|
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:
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:
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:
- MFSampleExtension_DecodeTimestamp
- MFSampleExtension_VideoEncodePictureType
- MFSampleExtension_VideoEncodeQP
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:
- CODECAPI_AVEncCommonRateControlMode
- CODECAPI_AVEncCommonQuality
- CODECAPI_AVEncCommonQualityVsSpeed
- CODECAPI_AVEncCommonMeanBitRate
- CODECAPI_AVEncCommonMaxBitRate
- CODECAPI_AVEncCommonBufferSize
- CODECAPI_AVEncMPVGOPSize
- CODECAPI_AVEncVideoEncodeQP
- CODECAPI_AVEncVideoForceKeyFrame
Os Windows 8.1 propriedades ICodecAPI a seguir são opcionais, mas são testados no HCK, se houver suporte.
- CODECAPI_AVEncVideoMinQP
- CODECAPI_AVEncVideoLTRBufferControl
- CODECAPI_AVEncVideoMarkLTRFrame
- CODECAPI_AVEncVideoUseLTRFrame
- CODECAPI_AVEncVideoEncodeFrameTypeQP
- CODECAPI_AVEncSliceControlMode
- CODECAPI_AVEncSliceControlSize
- CODECAPI_AVEncVideoMaxNumRefFrame
- CODECAPI_AVEncVideoMeanAbsoluteDifference
- CODECAPI_AVEncVideoMaxQP
- CODECAPI_AVEncVideoROIEnabled
- CODECAPI_AVEncVideoTemporalLayerCount (Dinâmico)
- CODECAPI_AVEncH264CABACEnable
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 |
|
Confira também