文件格式的理解"/>
avi 文件格式的理解
可以把avi文件理解为由无数个struct结构组成的:
1. struct avifile { 'RIFF', 'AVI', struct hdrl}
2. struct hdrl { 'LIST', 'hdal', struct avih, struct stream0,struct stream1,struct stream2};
3. struct stream {'LIST' , 'STRL', struct strh, struct strf }
4. struct movi { 'LIST' , 'movi'}
5. n* struct data { '00db' ,data} 循环写入帧数据
在avi文件中都是按照这个镶嵌顺序顺序写入的。
1. avifile:
struct avifile
{
unsigned char id[4];
unsigned int size;
unsigned char type[4];
struct hdrl avi_hdrl;
}
2. struct hdrl
typedef struct hdrl
{
unsigned char id[4]; //块ID,固定为LIST
unsigned int size; //块大小,等于struct avi_hdrl_list去掉id和size的大小
unsigned char type[4]; //块类型,固定为hdrl
struct avih;
struct stream;
}
3. struct avih
struct avih
{
unsigned char id[4]; //块ID,固定为avih
unsigned int size; //块大小,等于struct avi_avih_chunk去掉id和size的大小
unsigned int us_per_frame; //视频帧间隔时间(以微秒为单位)
unsigned int max_bytes_per_sec; //AVI文件的最大数据率
unsigned int padding; //设为0即可
unsigned int flags; //AVI文件全局属性,如是否含有索引块、音视频数据是否交叉存储等
unsigned int total_frames; //总帧数
unsigned int init_frames; //为交互格式指定初始帧数(非交互格式应该指定为0)
unsigned int streams; //文件包含的流的个数,仅有视频流时为1
unsigned int suggest_buff_size; //指定读取本文件建议使用的缓冲区大小,通常为存储一桢图像 //以及同步声音所需的数据之和,不指定时设为0
unsigned int width; //视频主窗口宽度(单位:像素)
unsigned int height; //视频主窗口高度(单位:像素)
unsigned int reserved[4]; //保留段,设为0即可
}
更多推荐
avi 文件格式的理解
发布评论