AVI的音频视频帧的开头
Avi中视频音频交叉存放,每一帧视频都有一个视频帧头:30 30 64 63(这时二进制编码,字符是00dc),然后接着就是四个字节的帧长度,例如00 00 10 00,再往下就是帧的内容。
Avi的音频也有一个音频头:30 31 77 62(01wb),接着就是音频的长度,例如00 10 00 00,就是4096字节,接着就是音频的内容了。
AVI的音频视频交叉规律
经过对avi视频的详细分析,发现音频视频的交叉有如下规律:
15帧 vedio
1段 audio
15帧vedio
1段 audio
16帧 vedio
1段 audio
15帧vedio
1段 audio
15帧vedio
1段 audio
16帧 vedio
1段 audio
也就是基本上是每15段vedio就有一段的audio,可是每经过两个15段的vedio循环,就要有16段的vedio才能有一段audio。
另外还有一个规律就是,每一段audio大小都是一定的4096字节。
这是某个特定文件的交叉规律,个人认为音视频交叉的频率跟帧率和音频频率有关,只要是按一定的比率来交叉就行,例如上面按每30帧视频放一段音频,然后音频的长度变为8192应该可以.
mpeg4视频中,I帧、p帧、B帧的判定
mpeg4的每一帧开头是固定的:00 00 01 b6,那么我们如何判断当前帧属于什么帧呢?在接下来的2bit,将会告诉我们答案。注意:是2bit,不是byte,下面是各类型帧与2bit的对应关系:
00: I Frame
01: P Frame
10: B Frame
为了更好地说明,我们举几个例子,以下是16进制显示的视频编码:
00 00 01 b6 10 34 78 97 09 87 06 57 87 …… I帧
00 00 01 b6 50 78 34 20 cc 66 b3 89 …… P帧
00 00 01 b6 96 88 99 06 54 34 78 90 98 …… B帧
下面我们来分析一下为什么他们分别是I、P、B帧
0x10 = 0001 0000
0x50 = 0101 0000
0x96 = 1001 0100
大家看红色的2bit,再对照开头说的帧与2bit的对应关系,是不是符合了呢?
下面给出一段c++代码供大家参考:
{
case 0x00 :
// I Frame
break ;
case 0x40 :
// P Frame
break ;
case 0x80 :
// B Frame
break ;
default :
break ;
}