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:
|
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:
|
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:
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:
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:
- MFSampleExtension_DecodeTimestamp
- MFSampleExtension_VideoEncodePictureType
- MFSampleExtension_VideoEncodeQP
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:
- CODECAPI_AVEncCommonRateControlMode
- CODECAPI_AVEncCommonQuality
- CODECAPI_AVEncCommonQualityVsSpeed
- CODECAPI_AVEncCommonMeanBitRate
- CODECAPI_AVEncCommonMaxBitRate
- CODECAPI_AVEncCommonBufferSize
- CODECAPI_AVEncMPVGOPSize
- CODECAPI_AVEncVideoEncodeQP
- CODECAPI_AVEncVideoForceKeyFrame
Las siguientes propiedades Windows 8.1 ICodecAPI son opcionales, pero se prueban en HCK si se admiten.
- 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
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 |
|
Consulte también