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, yfileType
es un FOURCC que identifica el tipo de archivo específico. El valor defileSize
incluye el tamaño de FOURCC más el tamaño de los datos siguientes, pero no incluye el tamaño defileType
"RIFF" FOURCC o el tamaño defileSize
. 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 enckData
yckData
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 deckID
o el tamaño deckSize
.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 ylistData
consta de fragmentos o listas, en cualquier orden. El valor delistSize
incluye el tamaño delistType
más el tamaño delistData
; no incluye el "LIST" FOURCC ni el tamaño delistSize
.
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".
Temas relacionados