Share via


Codificador de vídeo H.264

El codificador de vídeo de Microsoft Media Foundation H.264 es una transformación de Media Foundation que admite los siguientes perfiles H.264:

  • Perfil de línea base
  • Perfil Main
  • Perfil alto (requiere Windows 8)

El codificador de vídeo H.264 expone las interfaces siguientes:

Tipos de entrada

El tipo de medio de entrada debe tener uno de los subtipos siguientes:

  • MFVideoFormat_I420
  • MFVideoFormat_IYUV
  • MFVideoFormat_NV12
  • MFVideoFormat_YUY2
  • MFVideoFormat_YV12

Para obtener más información sobre estos subtipos, vea GUID de subtipo de vídeo.

El tipo de salida debe establecerse antes del tipo de entrada. Hasta que se establece el tipo de salida, el método IMFTransform::SetInputType del codificador devuelve MF_E_TRANSFORM_TYPE_NOT_SET.

Tipos de salida

El codificador admite un único subtipo de salida:

  • MFVideoFormat_H264

Establezca los atributos siguientes en el tipo de medio de salida.

Atributo Descripción
MF_MT_MAJOR_TYPE Tipo principal. Debe ser MFMediaType_Video.
MF_MT_SUBTYPE Subtipo de vídeo. Debe ser MFVideoFormat_H264.
MF_MT_AVG_BITRATE Velocidad media de bits codificada, en bits por segundo. Debe ser mayor que cero.
MF_MT_FRAME_RATE Velocidad de fotogramas.
MF_MT_FRAME_SIZE Tamaño del marco.
MF_MT_INTERLACE_MODE Modo de intercalación.
MF_MT_MPEG2_PROFILE Perfil de codificación H.264.
Los valores admitidos son:
  • eAVEncH264VProfile_Base (valor predeterminado)
  • eAVEncH264VProfile_Main
  • eAVEncH264VProfile_High (requiere Windows 8)
MF_MT_MPEG2_LEVEL Opcional. Especifica el nivel de codificación H.264.
El valor predeterminado es –1, lo que indica que el codificador seleccionará el nivel de codificación.
Se recomienda no establecer el nivel en el tipo de medio y permitir que el codificador seleccione el nivel. El codificador puede derivar el nivel adecuado para una secuencia de vídeo determinada, teniendo en cuenta las restricciones de formato y las características del vídeo. Para obtener más información sobre las restricciones de perfil y nivel, consulte el Anexo A del UIT-T H.264.
MF_MT_PIXEL_ASPECT_RATIO Opcional. Especifica la relación de aspecto de píxeles. El valor predeterminado es 1:1.

 

Una vez establecido el tipo de salida, el codificador de vídeo actualiza el tipo agregando el atributo MF_MT_MPEG_SEQUENCE_HEADER . Este atributo contiene el encabezado de secuencia.

Propiedades de códec

El codificador H.264 implementa la interfaz ICodecAPI para establecer parámetros de codificación. Admite las siguientes propiedades.

Para conocer los requisitos de códec para la certificación del codificador HCK, consulte la sección Certified Hardware Encoder (Codificador de hardware certificado ) a continuación.

Las siguientes propiedades se admiten en Windows 7.

Propiedad Descripción
CODECAPI_AVEncCommonRateControlMode Establece el modo de control de velocidad. Vea la sección Comentarios. El modo predeterminado es una velocidad de bits variable sin restricciones (VBR).
CODECAPI_AVEncCommonQuality Establece el nivel de calidad. Esta propiedad se aplica cuando el modo de control de velocidad está basado en calidad VBR (eAVEncCommonRateControlMode_Quality). El intervalo válido es de 1 a 100. El valor predeterminado es 70.
Para establecer este parámetro, establezca la propiedad antes de llamar a IMFTransform::SetOutputType.
Para establecer este parámetro en Windows 7, establezca la propiedad antes de llamar a IMFTransform::SetOutputType. El codificador omite los cambios después de establecer el tipo de salida.
En Windows 8, esta propiedad se puede establecer en cualquier momento durante la codificación. Los cambios se aplican a partir del siguiente marco de entrada.
Internamente, el codificador convierte esta propiedad en un valor AVEncVideoEncodeQP .

 

Las siguientes propiedades requieren Windows 8.

Propiedad Descripción
CODECAPI_AVEncAdaptiveMode Establece el modo de codificación adaptable. El codificador H.264 admite los siguientes modos en Windows 8:
  • eAVEncAdaptiveMode_None. No hay codificación adaptable. (Valor predeterminado).
  • eAVEncAdaptiveMode_FrameRate. Cambie adaptablemente la velocidad de fotogramas.

CODECAPI_AVEncCommonBufferSize Establece el tamaño del búfer, en bytes, para la codificación de velocidad de bits constante (CBR).
El intervalo válido es [1 ... 2³²–1].
Requiere Windows 8.
CODECAPI_AVEncCommonMaxBitRate Para la codificación VBR restringida, especifica la velocidad a la que se purga el "cubo fugado", en bits por segundo. Esta propiedad se aplica cuando el modo de control de velocidad es eAVEncCommonRateControlMode_PeakConstrainedVBR.
El intervalo válido es [1 ... 2³²–1].
CODECAPI_AVEncCommonMeanBitRate Establece la velocidad media de bits para la secuencia de bits codificada, en bits por segundo. Esta propiedad se omite si el modo de control de velocidad es eAVEncCommonRateControlMode_Quality.
El intervalo válido es [1 ... 2³²–1].
En los modos CBR y VBR sin restricciones, la velocidad de bits media determina el tamaño final del archivo. En el modo CBR, la velocidad de bits media también es la velocidad a la que se purgan los bits comprimidos del "cubo fugado". (Para obtener más información, vea El modelo de búfer de cubos filtrados).
En Windows 7, el atributo MF_MT_AVG_BITRATE especifica la velocidad de bits promedio en el tipo de medio.
En Windows 8, puede establecer la velocidad de bits media mediante el atributo MF_MT_AVG_BITRATE o la propiedad CODECAPI_AVEncCommonMeanBitRate. Si se establecen ambos, CODECAPI_AVEncCommonMeanBitRate invalidaciones. En Windows 8, puede establecer la velocidad de bits media durante la codificación. Si cambia la velocidad de bits, el codificador usa la codificación adaptable.
CODECAPI_AVEncCommonQualityVsSpeed Establece el equilibrio de calidad/velocidad. Intervalo válido:
  • 0–33: Complejidad baja
  • 34–66: Complejidad media (valor predeterminado)
  • 67–100: Complejidad alta

Este valor afecta a la forma en que el codificador realiza varias operaciones de codificación, como la compensación de movimiento. En niveles de complejidad más altos, el codificador se ejecuta más lentamente, pero genera una mejor calidad a la misma velocidad de bits.
CODECAPI_AVEncH264CABACEnable Habilita o deshabilita CABAC (codificación aritmética binaria adaptable en contexto) para la codificación entropía H.264. El valor predeterminado es VARIANT_FALSE.
CABAC no se usa para el perfil de línea base.
CODECAPI_AVEncH264SPSID Establece el valor de seq_parameter_set_id en la unidad NAL de SPS de la secuencia de bits H.264.
CODECAPI_AVEncMPVDefaultBPictureCount Establece el número máximo de fotogramas B consecutivos en la secuencia de bits de salida. Los valores válidos son:
  • 0: No use marcos B (valor predeterminado).
  • 1: Use un marco B.
  • 2: Use dos marcos B.
Para establecer este parámetro, establezca la propiedad antes de llamar a IMFTransform::SetOutputType.
Para el perfil de línea base, el número de fotogramas B es siempre cero. El codificador invalidará los valores distintos de cero.
Para otros perfiles H.264, si esta propiedad no es cero, el patrón de codificación es IBBPBBP, donde el número máximo de fotogramas B consecutivos es igual a CODECAPI_AVEncMPVDefaultBPictureCount.
CODECAPI_AVEncMPVGOPSize Establece el número de imágenes de un encabezado GOP al siguiente, incluido el delimitador inicial, pero no el siguiente.
El intervalo válido es [0 ... 2³²–1]. Si es cero, el codificador selecciona el tamaño de GOP. El valor predeterminado es cero.
CODECAPI_AVEncNumWorkerThreads Establece el número de subprocesos de trabajo utilizados por un codificador.
El intervalo válido es de 0 a 16. Si es cero, el codificador selecciona el número de subprocesos.
CODECAPI_AVEncVideoContentType Indica el tipo de contenido de vídeo.
CODECAPI_AVEncVideoEncodeQP Intervalo válido: 16–51. El valor predeterminado es 24.
Esta propiedad se aplica cuando se eAVEncCommonRateControlMode_Quality el modo de control de velocidad.
Esta propiedad configura el mismo valor de codificación que AVEncCommonQuality. Sin embargo, AVEncVideoEncodeQP permite a la aplicación especificar directamente el valor de QP. Si se establecen ambas propiedades, AVEncVideoEncodeQP invalida.
El valor predeterminado de 24 corresponde al valor predeterminado de 70 para la configuración avEncCommonQuality .
CODECAPI_AVEncVideoForceKeyFrame Obliga al codificador a codificar el siguiente fotograma como fotograma clave.
CODECAPI_AVEncVideoMinQP Intervalo válido: 0-51. El valor predeterminado es 0.
Esta propiedad se aplica a todos los modos de control de velocidad. El codificador no debe generar un valor QP inferior al especificado por la propiedad CODECAPI_AVEncVideoMinQP .
CODECAPI_AVLowLatencyMode Habilita o deshabilita el modo de baja latencia. Vea "Multithreading" en la sección Comentarios.

 

Comentarios

El codificador admite los siguientes modos de control de velocidad.

Mode Constante Descripción
Velocidad de bits constante (CBR) eAVEncCommonRateControlMode_CBR El codificador intenta lograr una velocidad de bits constante, mediante un modelo de "depósito fugado". La velocidad de bits de destino la ofrece la propiedad CODECAPI_AVEncCommonMeanBitRate .
Requiere Windows 8.
Velocidad de bits variable restringida (VBR) eAVEncCommonRateControlMode_PeakConstrainedVBR El codificador usa un modelo de "depósito fugado" con una velocidad de bits máxima. La propiedad CODECAPI_AVEncCommonMaxBitRate da la tasa de purga del depósito fugado.
Requiere Windows 8.
Velocidad de bits variable basada en calidad (VBR) eAVEncCommonRateControlMode_Quality El codificador intenta lograr un nivel de calidad constante, dado por la propiedad AVEncCommonQuality .
VBR sin restricciones eAVEncCommonRateControlMode_UnconstrainedVBR El codificador intenta lograr la velocidad de bits de destino dada por el atributo MF_MT_AVG_BITRATE en el tipo de medio de salida. Este es el modo predeterminado.

 

Los modos CBR y VBR restringido requieren Windows 8.

En Windows 8, el codificador establece los siguientes atributos en los ejemplos de salida:

Nota

Una versión anterior de la documentación indica incorrectamente que el codificador es compatible con Windows Server 2008 R2.

 

Subprocesamiento múltiple

En Windows 8, el codificador admite dos modos de codificación:

  • Codificación de segmentos. En este modo, los segmentos se codifican en paralelo. Cada segmento se codifica en un subproceso diferente. Este modo tiene una latencia baja, ya que una sola imagen se codifica en paralelo. Sin embargo, este enfoque no se escala a medida que aumenta el número de núcleos, ya que el número de segmentos está limitado por el número de filas de bloqueo de macros en la imagen de entrada.
  • Codificación de varios fotogramas. En este modo, el codificador acepta varios fotogramas de entrada y los codifica en paralelo. Este modo se escala mejor en un entorno de varios núcleos, pero presenta más latencia.

El codificador tiene como valor predeterminado segmentar la codificación, para minimizar la latencia. Para habilitar la codificación de varios fotogramas, establezca la propiedad CODECAPI_AVLowLatencyModeen VARIANT_FALSE.

Para establecer el número de subprocesos de trabajo usados por el codificador, establezca la propiedad CODECAPI_AVEncNumWorkerThreads .

En Windows 7, el codificador siempre usa codificación de segmentos.

Codificador de hardware certificado

Si existe un codificador de hardware certificado, se usará generalmente en lugar del codificador del sistema de bandeja de entrada para escenarios relacionados con Media Foundation. Los codificadores certificados son necesarios para admitir un determinado conjunto de propiedades de ICodecAPI y, opcionalmente, pueden admitir otro conjunto de propiedades. El proceso de certificación debe garantizar que las propiedades necesarias se admiten correctamente y, si se admite una propiedad opcional, también se admite correctamente.

A continuación se muestra el conjunto de propiedades obligatorias y opcionales de ICodecAPI para que los codificadores pasen la certificación del codificador HCK.

Se requieren las siguientes propiedades Windows 8 y Windows 8.1 ICodecAPI:

Las siguientes propiedades Windows 8.1 ICodecAPI son opcionales, pero se prueban en HCK si se admiten.

Las siguientes propiedades Windows 8 y Windows 8.1 ICodecAPI son opcionales, pero se prueban en HCK si se admiten.

Las siguientes propiedades de ICodecAPI son opcionales. No se prueban en HCK.

Requisitos

Requisito Value
Cliente mínimo compatible
Windows 7 [solo aplicaciones de escritorio]
Servidor mínimo compatible
No se admite ninguno
Archivo DLL
Mfh264enc.dll

Consulte también

Objetos de códec

Compatibilidad con MPEG-4 en Media Foundation

Formatos de medios admitidos en Media Foundation

Tipos de medios de vídeo