Tipos de vídeo H.264
[La característica asociada a esta página, DirectShow, es una característica heredada. Se ha reemplazado por MediaPlayer, IMFMediaEnginey captura de audio y vídeo en Media Foundation. Esas características se han optimizado para Windows 10 y Windows 11. Microsoft recomienda encarecidamente que el nuevo código use MediaPlayer, IMFMediaEngine y captura de audio y vídeo en Media Foundation en lugar de DirectShow, siempre que sea posible. Microsoft sugiere que el código existente que usa las API heredadas se reescriba para usar las nuevas API si es posible.
Los siguientes subtipos multimedia se definen para el vídeo H.264.
Subtipo | FOURCC | Descripción |
---|---|---|
MEDIASUBTYPE_AVC1 | 'AVC1' | Secuencia de bits H.264 sin códigos de inicio. |
MEDIASUBTYPE_H264 | 'H264' | Secuencia de bits H.264 con códigos de inicio. |
MEDIASUBTYPE_h264 | 'h264' | Equivalente a MEDIASUBTYPE_H264, con un FOURCC diferente. |
MEDIASUBTYPE_X264 | 'X264' | Equivalente a MEDIASUBTYPE_H264, con un FOURCC diferente. |
MEDIASUBTYPE_x264 | 'x264' | Equivalente a MEDIASUBTYPE_H264, con un FOURCC diferente. |
Estos GUID de subtipo se declaran en wmcodecdsp.h.
La principal diferencia entre estos tipos multimedia es la presencia de códigos de inicio en la secuencia de bits. Si el subtipo es MEDIASUBTYPE_AVC1, la secuencia de bits no contiene códigos de inicio.
Secuencia de bits H.264 con códigos de inicio
Las secuencias de bits H.264 que se transmiten por aire, o contenidas en secuencias de transporte o programa MPEG-2, o grabadas en HD-DVD, tienen el formato descrito en el anexo B del ITU-T Rec. H.264. Según esta especificación, la secuencia de bits consta de una secuencia de unidades de capa de abstracción de red (NALUs), cada una de las cuales tiene como prefijo un código inicial igual a 0x000001 o 0x00000001.
Cuando los códigos de inicio están presentes en la secuencia de bits, se usa el siguiente tipo de medio:
Etiqueta | Valor |
---|---|
Tipo principal | MEDIATYPE_Video |
Subtipos | MEDIASUBTYPE_H264, MEDIASUBTYPE_h264, MEDIASUBTYPE_X264o MEDIASUBTYPE_x264 |
Tipo de formato | FORMAT_VideoInfo, FORMAT_VideoInfo2, FORMAT_MPEG2Videoo GUID_NULL |
Si el tipo de formato es GUID_NULL, no hay ninguna estructura de formato presente.
Cuando la secuencia de bits contiene códigos de inicio, cualquiera de los tipos de formato enumerados aquí es suficiente, ya que el descodificador no requiere información adicional para analizar la secuencia. La secuencia de bits ya contiene toda la información necesaria para el descodificador y los códigos de inicio permiten al descodificador localizar el inicio de cada NALU.
Los subtipos siguientes son equivalentes:
Secuencia de bits H.264 sin códigos de inicio
El formato de contenedor MP4 almacena datos H.264 sin códigos de inicio. En su lugar, cada NALU tiene como prefijo un campo de longitud, que proporciona la longitud de la NALU en bytes. El tamaño del campo de longitud puede variar, pero normalmente es de 1, 2 o 4 bytes.
Cuando los códigos de inicio no están presentes en la secuencia de bits, se usa el siguiente tipo de medio.
Etiqueta | Valor |
---|---|
Tipo principal | MEDIATYPE_Video |
Subtipo | MEDIASUBTYPE_AVC1 |
Tipo de formato | FORMAT_MPEG2Video |
El bloque de formato es una estructura MPEG2VIDEOINFO. Esta estructura debe rellenarse de la siguiente manera:
- hdr: una estructura VIDEOINFOHEADER2 que describe la secuencia de bits. No hay ninguna tabla de colores después de la parteBITMAPINFOHEADER de la estructura y biClrUsed debe ser cero.
- dwStartTimeCode: no se usa. Establézcalo en cero.
- cbSequenceHeader: longitud de la matriz dwSequenceHeader en bytes.
- dwProfile: especifica el perfil H.264.
- dwLevel: especifica el nivel H.264.
- dwFlags: número de bytes usados para el campo de longitud que aparece antes de cada NALU. El campo de longitud indica el tamaño de la siguiente NALU en bytes. Por ejemplo, si dwFlags es 4, cada NALU va precedido de un campo de longitud de 4 bytes. Los valores válidos son 1, 2 y 4.
- dwSequenceHeader: matriz de bytes que puede contener NALU del conjunto de parámetros de secuencia (SPS) y conjunto de parámetros de imagen (PPS).
El contenedor MP4 puede contener conjuntos de parámetros de secuencia (SPS) o conjuntos de parámetros de imagen (PPS) como unidades NAL especiales en encabezados de archivo o en una secuencia independiente (distinta de la secuencia de vídeo). Cuando se establece el formato, el tipo de medio puede especificar unidades NAL de SPS y PPS en la matriz de dwSequenceHeader. Si cbSequenceHeader es mayor que cero, dwSequenceHeader es el inicio de una matriz de bytes que contiene SPS y PPS NALUs, delimitada por campos de longitud de 2 bytes, todo en orden de bytes de red (big-endian). Es posible tener TANTO SPS como PPS, solo uno de estos tipos o ninguno. El tipo real de cada NALU se puede determinar examinando el campo nal_unit_type del propio NALU.
Cuando se usa este tipo de medio, cada muestra multimedia comienza al principio de una NALU y las unidades NAL no abarcan muestras. Esto permite al descodificador recuperarse de datos dañados o muestras eliminadas.