AVI格式

       AVI是一种常见的音视频混合格式,如下是一段含JPG的AVI文件内容。

AVI格式_第1张图片

      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;
};

 

       

 

你可能感兴趣的:(AVI格式)