| 4 | 4 | 4 | 4 |
| RIFF | size | AVI/WAVE| ...data...
ps: size = data_size + 4;
| 4 | 4 | 4 | 4 |
| LIST | size | Type |...Data...
ps: size = data_size + 4;
| 4 | 4 | 4 | 4 |
| ckID | size |...data...
ps: size = data_size;
AVI 格式说明:
RIFF('AVI '
LIST('hdrl'
...
)
LIST('movi'
...
)
['idx1'<AVI Index>]
)
example:
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'
{subchuk|LIST('rec '
subchuck1
...
)
}
...
)
['idx1'(<AVI index>)]
)
ps: 'hdrl'list中的'avih'chunk包含结构体,AVIMAINHEADER;
typedef struct _avimainheader {
FOURCC fcc;/*avih*/
DWORD cb;/*结构体大小*/
DWORD dwMicroSecPerFrame;/*每帧毫秒数*/
DWORD dwMaxBytesPerSec;/**/
DWORD dwPaddingGranularity;/**/
DWORD dwFlags;/**/
DWORD dwTotalFrames;/*总帧数*/
DWORD dwInitialFrames;/*初始帧数*/
DWORD dwStreams;/*流体数,如改文件包含视频和音频则含有2个流体*/
DWORD dwSuggestedBufferSize;/**/
DWORD dwWidth;/*像素宽度*/
DWORD dwHeight;/*像素高度*/
DWORD dwReserved[4];/*保留*/
} AVIMAINHEADER;
typedef struct _avistreamheader {
FOURCC fcc;/*strh*/
DWORD cb;/*结构体大小*/
FOURCC fccType;/*auds/mids/txts/vids*/
FOURCC fccHandler;
DWORD dwFlags;
WORD wPriority;
WORD wLanguage;
DWORD dwInitialFrames;
DWORD dwScale;
DWORD dwRate;
DWORD dwStart;
DWORD dwLength;
DWORD dwSuggestedBufferSize;
DWORD dwQuality;
DWORD dwSampleSize;
struct {
short int left;
short int top;
short int right;
short int bottom;
} rcFrame;
} AVISTREAMHEADER;
不求甚解,记录一下