AVI是一种常见的音视频混合格式,如下是一段含JPG的AVI文件内容。
AVI的数据格式如下:
RIFF:
12字节的头标示(RIFF,文件大小,文件类型)+“list”+list的大小+"hdrl"+"avih"+AVI_avih结构体(56个字节)
流信息:
“list”+list的大小+“strl”+“strh”+strh大小+流结构体(56个自己,从vids到strf,vids标示是视频还是音频。)+流格式块(以"strf"标示,标示后面是这个块的大小,用于说明流的具体格式。如果是视频流,则使用一个BITMAPINFO数据结构来描述;如果是音频流,则使用一个WAVEFORMATEX数据结构来描述。)。
数据内容:
“list”+list大小+“movi”(表示视频开始)+“00db”+块大小+块内容+“00db”+块大小+块内容+...。
AVI文件的展开结构大致如下:
RIFF (‘AVI ’
LIST (‘hdrl’
‘avih’(主AVI信息头数据)
LIST (‘strl’
‘strh’ (流的头信息数据)
‘strf’ (流的格式信息数据)
[‘strd’ (可选的额外的头信息数据) ]
[‘strn’ (可选的流的名字) ]
...
)
...
)
LIST (‘movi’
{ SubChunk | LIST (‘rec ’
SubChunk1
SubChunk2
...
)
...
}
...
)
[‘idx1’ (可选的AVI索引块数据) ]
)
提示:上述关于AVI文件格式的介绍,并不包括OpenDML AVI M-JPEG文件格式小组制定的OpenDML AVI文件格式扩展部分的内容。想对该扩展部分有更多了解的读者,请另行参考“OpenDML AVI File Format Extensions”一文(此文可在Internet上搜索获得)。
注释
相关的结构体
struct AVI_avih
{
DWORD us_per_frame; /* frame display rate (or 0L) */
DWORD max_bytes_per_sec; /* max. transfer rate */
DWORD padding; /* pad to multiples of this size; */
DWORD flags;
DWORD tot_frames; /* # frames in file */
DWORD init_frames;
DWORD streams;
DWORD buff_sz;
DWORD width;
DWORD height;
DWORD reserved[4];
};
struct AVI_strh
{
unsigned char type[4]; /* stream type */
unsigned char handler[4];
DWORD flags;
DWORD priority;
DWORD init_frames; /* initial frames (???) */
DWORD scale;
DWORD rate;
DWORD start;
DWORD length;
DWORD buff_sz; /* suggested buffer size */
DWORD quality;
DWORD sample_sz;
};