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, IMFMediaEngine y Captura de audio/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 Audio/Video Capture 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.

Subtype 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.

H.264 Bitstream 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 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 (NALU), cada una de las cuales tiene el prefijo un código de inicio 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 Value
Tipo principal MEDIATYPE_Video
Subtipos MEDIASUBTYPE_H264, MEDIASUBTYPE_h264, MEDIASUBTYPE_X264 o MEDIASUBTYPE_x264
Tipo de formato FORMAT_VideoInfo, FORMAT_VideoInfo2, FORMAT_MPEG2Video o 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 que se enumeran aquí es suficiente, ya que el descodificador no requiere ninguna 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 buscar el inicio de cada NALU.

Los subtipos siguientes son equivalentes:

H.264 Bitstream 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 Value
Tipo principal MEDIATYPE_Video
Subtype MEDIASUBTYPE_AVC1
Tipo de formato FORMAT_MPEG2Video

 

El bloque de formato es una estructura MPEG2VIDEOINFO . Esta estructura debe rellenarse de la siguiente manera:

  • hdr: estructura VIDEOINFOHEADER2 que describe la secuencia de bits. No hay ninguna tabla de colores presente después de la parte BITMAPINFOHEADER de la estructura y biClrUsed debe ser cero.
  • dwStartTimeCode: no se usa. Establecer en cero.
  • cbSequenceHeader: longitud de la matriz dwSequenceHeader en bytes.
  • dwProfile: especifica el perfil H.264.
  • dwLevel: especifica el nivel H.264.
  • dwFlags: el número de bytes usados para el campo de longitud que aparece antes de cada NALU. El campo length 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 conjuntos de parámetros de secuencia (SPS) y NALU del 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 SPS y PPS en la matriz 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 SPS y 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 los datos dañados o quitar ejemplos.