avi的index段

  假如要将avi文件分成头、中、尾的话,RRFT开始到movi段之间应该算是头,movi算是中间,index就算是尾部了。index其实就是movi中的内容的索引,作用是在拖动视频进度条时,能让解码器迅速定位到要找的视频帧。索引以“idx1”开头,后面跟着的是整个索引的大小,其基本结构是:

struct AVI_index_entry{
     unsigned char dwChunkId[4];//表征本数据块的四字符码
     DWORD dwFlags;//说明本数据块是不是关键帧、是不是‘rec’列表等信息
     DWORD dwOffset;//本数据块在文件中的偏移量
     DWORD dwSize;//本数据块的大小
};

大家看一个实例:

“idx1”就是索引的头

30 5b 00 00是索引的大小

大家看看实例的第二行,它们对应avi文件中的每一帧或者没一段音频:

30 30 64 63(“00dc”)是数据结构中的dwChunkId,当该段数据时音频时取(“01wb")

10 00 00 00 是dwFlags,关键帧取值为10 00 00 00,否则取值为00 00 00 00

04 00 00 00 是dwOffset;//本数据块在文件中的偏移量
BF 0E 00 00 是dwSize,对应帧的大小

  在最初合成avi视频的时候,我是没有添加index段的,视频一样可以播放。可是当你要拖动视频时,视频不会立刻跳到你所要的位置,而是加快播放速度,直到到达目标位置。

  目前遇到一个问题:当我将索引加进去avi以后,播放器需要有一个缓冲的过程,有点像用迅雷下载电影,可是没等电影下完,改过后缀就去播放的状况。问题解决以后再来补充吧。

原文地址:https://www.cnblogs.com/ManMonth/p/1675917.html