Compartir a través de


Referencia de archivo RIFF de AVI

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

El formato de archivo AVI de Microsoft es una especificación de archivo RIFF que se usa con aplicaciones que capturan, editan y reproducen secuencias de audio-vídeo. En general, los archivos AVI contienen varias secuencias de diferentes tipos de datos. La mayoría de las secuencias AVI usan secuencias de audio y vídeo. Una variación simple para una secuencia AVI usa datos de vídeo y no requiere una secuencia de audio.

En esta sección no se describen las extensiones de formato de archivo AVI de OpenDML. Para obtener más información sobre estas extensiones, vea Extensiones de formato de archivo AVI de OpenDML, publicadas por el compilador de formato de archivo AVI M-JPEG de OpenDML.

FOURCC

Un FOURCC (código de cuatro caracteres) es un entero de 32 bits sin signo creado mediante la concatenación de cuatro caracteres ASCII. Por ejemplo, el FOURCC 'abcd' se representa en un sistema Little-Endian como 0x64636261. Los FOURCC pueden contener caracteres de espacio, por lo que 'abc' es un FOURCC válido. El formato de archivo AVI usa códigos FOURCC para identificar tipos de flujo, fragmentos de datos, entradas de índice y otra información.

Formato de archivo RIFF

El formato de archivo AVI se basa en el formato de documento RIFF (formato de archivo de intercambio de recursos). Un archivo RIFF consta de un encabezado RIFF seguido de cero o más listas y fragmentos.

  • El encabezado RIFF tiene el siguiente formato:

    'RIFF' fileSize fileType (data)

    donde "RIFF" es el código FOURCC literal "RIFF", fileSize es un valor de 4 bytes que proporciona el tamaño de los datos en el archivo, y fileType es un FOURCC que identifica el tipo de archivo específico. El valor de fileSize incluye el tamaño de FOURCC más el tamaño de los datos siguientes, pero no incluye el tamaño de fileType "RIFF" FOURCC o el tamaño de fileSize. Los datos del archivo constan de fragmentos y listas, en cualquier orden.

  • Un fragmento tiene el siguiente formato:

    ckID ckSize ckData

    donde ckID es un FOURCC que identifica los datos contenidos en el fragmento, ckSize es un valor de 4 bytes que proporciona el tamaño de los datos en ckDatay ckData es cero o más bytes de datos. Los datos siempre se rellenan en el límite de WORD más cercano. ckSize proporciona el tamaño de los datos válidos en el fragmento; no incluye el relleno, el tamaño de ckIDo el tamaño de ckSize.

  • Una lista tiene el siguiente formato:

    'LIST' listSize listType listData

    donde 'LIST' es el código FOURCC literal 'LIST', listSize es un valor de 4 bytes que proporciona el tamaño de la lista, listType es un código FOURCC y listData consta de fragmentos o listas, en cualquier orden. El valor de listSize incluye el tamaño de listType más el tamaño de listData; no incluye el "LIST" FOURCC ni el tamaño de listSize.

En el resto de esta sección se usa la notación siguiente para describir fragmentos RIFF:

ckID ( ckData )

donde el tamaño del fragmento es implícito. Con esta notación, se puede representar una lista como:

'LIST' ( listType ( listData ) )

Los elementos opcionales se colocan entre corchetes: [ optional element ]

Formulario DE AVI RIFF

Los archivos AVI se identifican mediante FOURCC 'AVI' en el encabezado RIFF. Todos los archivos AVI incluyen dos fragmentos LIST obligatorios, que definen el formato de las secuencias y los datos de flujo, respectivamente. Un archivo AVI también puede incluir un fragmento de índice, que proporciona la ubicación de los fragmentos de datos dentro del archivo. Un archivo AVI con estos componentes tiene el siguiente formato:

RIFF ('AVI '
      LIST ('hdrl' ... )
      LIST ('movi' ... )
      ['idx1' (<AVI Index>) ]
     )

La lista "hdrl" define el formato de los datos y es el primer fragmento LIST necesario. La lista "movi" contiene los datos de la secuencia AVI y es el segundo fragmento LIST necesario. La lista "idx1" contiene el índice. Los archivos AVI deben mantener estos tres componentes en la secuencia adecuada.

Nota:

Las extensiones openDML definen otro tipo de índice, identificado por FOURCC 'indx'.

 

Las listas "hdrl" y "movi" usan subchunks para sus datos. En el ejemplo siguiente se muestra el formulario RIFF de AVI expandido con los fragmentos necesarios para completar estas listas:

RIFF ('AVI '
      LIST ('hdrl'
            'avih'(<Main AVI Header>)
            LIST ('strl'
                  'strh'(<Stream header>)
                  'strf'(<Stream format>)
                  [ 'strd'(<Additional header data>) ]
                  [ 'strn'(<Stream name>) ]
                  ...
                 )
             ...
           )
      LIST ('movi'
            {SubChunk | LIST ('rec '
                              SubChunk1
                              SubChunk2
                              ...
                             )
               ...
            }
            ...
           )
      ['idx1' (<AVI Index>) ]
     )

Encabezado principal avi

La lista "hdrl" comienza con el encabezado AVI principal, que se encuentra en un fragmento de "avih". El encabezado principal contiene información global para todo el archivo AVI, como el número de secuencias dentro del archivo y el ancho y alto de la secuencia AVI. El fragmento de encabezado principal consta de una estructura AVIMAINHEADER .

Encabezados de secuencia AVI

Una o varias listas de "strl" siguen el encabezado principal. Se requiere una lista "strl" para cada flujo de datos. Cada lista "strl" contiene información sobre una secuencia del archivo y debe contener un fragmento de encabezado de secuencia ("strh") y un fragmento de formato de secuencia ("strf"). Además, una lista "strl" puede contener un fragmento de datos de encabezado de flujo ("strd") y un fragmento de nombre de secuencia ("strn").

El fragmento de encabezado de secuencia ("strh") consta de una estructura AVISTREAMHEADER .

Un fragmento de formato de secuencia ("strf") debe seguir el fragmento de encabezado de secuencia. El fragmento de formato de secuencia describe el formato de los datos de la secuencia. Los datos contenidos en este fragmento dependen del tipo de flujo. En el caso de las secuencias de vídeo, la información es una estructura BITMAPINFO , incluida la información de paleta si procede. En el caso de las secuencias de audio, la información es una estructura WAVEFORMATEX .

Si el fragmento de datos de encabezado de secuencia ("strd") está presente, sigue el fragmento de formato de secuencia. El controlador de códec define el formato y el contenido de este fragmento. Normalmente, los controladores usan esta información para la configuración. Las aplicaciones que leen y escriben archivos AVI no necesitan interpretar esta información; lo transfieren a y desde el controlador como bloque de memoria.

El fragmento opcional "strn" contiene una cadena de texto terminada en null que describe la secuencia.

Los encabezados de secuencia de la lista "hdrl" están asociados a los datos de secuencia de la lista "movi" según el orden de los fragmentos "strl". El primer fragmento "strl" se aplica a la secuencia 0, el segundo se aplica a la secuencia 1, etc.

Stream Data ('movi' List)

Después de la información de encabezado se muestra una lista de "movi" que contiene los datos reales de las secuencias, es decir, los fotogramas de vídeo y los ejemplos de audio. Los fragmentos de datos pueden residir directamente en la lista "movi" o pueden agruparse dentro de las listas "rec". La agrupación "rec" implica que los fragmentos agrupados se deben leer del disco a la vez y está pensado para los archivos que se intercalan para reproducir desde CD-ROM.

El FOURCC que identifica cada fragmento de datos consta de un número de flujo de dos dígitos seguido de un código de dos caracteres que define el tipo de información del fragmento.

Código de dos caracteres Descripción
db Fotograma de vídeo sin comprimir
dc Fotograma de vídeo comprimido
pc Cambio de paleta
Wb Datos de audio

 

Por ejemplo, si la secuencia 0 contiene audio, los fragmentos de datos de esa secuencia tendrían el FOURCC '00wb'. Si la secuencia 1 contiene vídeo, los fragmentos de datos de esa secuencia tendrían fourCC '01db' o '01dc'. Los fragmentos de datos de vídeo también pueden definir nuevas entradas de paleta para actualizar la paleta durante una secuencia AVI. Cada fragmento de cambio de paleta ('xxpc') contiene una estructura AVIPALCHANGE . Si una secuencia contiene cambios en la paleta, establezca la marca AVISF_VIDEO_PALCHANGES en el miembro dwFlags de la estructura AVISTREAMHEADER para esa secuencia.

Las secuencias de texto pueden usar códigos arbitrarios de dos caracteres.

Entradas de índice AVI

Índice AVI 1.0

Un fragmento de índice opcional ('idx1') puede seguir la lista 'movi'. El índice contiene una lista de los fragmentos de datos y su ubicación en el archivo. Consta de una estructura AVIOLDINDEX con entradas para cada fragmento de datos, incluidos los fragmentos "rec". Si el archivo contiene un índice, establezca la marca AVIF_HASINDEX en el miembro dwFlags de la estructura AVIMAINHEADER .

Índice AVI 2.0

Un índice AVI 2.0 puede aparecer como un único fragmento. Como alternativa, los segmentos de índice se pueden intercalar dentro del fragmento "movi". Si los segmentos de índice se colocan en el fragmento "movi", un super índice contiene un índice de los segmentos de índice. La estructura AVIMETAINDEX es la estructura base para los segmentos de índice y el superíndice. Para obtener más información, vea las extensiones de formato de archivo AVI de OpenDML, publicadas por el compilador de formato de archivo AVI M-JPEG de OpenDML. (Es posible que este recurso no esté disponible en algunos idiomas y países).

Otros fragmentos de datos

Los datos se pueden alinear en un archivo AVI insertando fragmentos "JUNK" según sea necesario. Las aplicaciones deben omitir el contenido de un fragmento "JUNK".

Formato de archivo AVI