avi音视频格式及mpeg4视频中,I帧、p帧、B帧的判定

AVI的音频视频帧的开头

  Avi中视频音频交叉存放,每一帧视频都有一个视频帧头:30 30 64 63(这时二进制编码,字符是00dc),然后接着就是四个字节的帧长度,例如00 00 10 00,再往下就是帧的内容。

  Avi的音频也有一个音频头:30 31 77 6201wb),接着就是音频的长度,例如00 10 00 00,就是4096字节,接着就是音频的内容了。

AVI的音频视频交叉规律

经过对avi视频的详细分析,发现音频视频的交叉有如下规律:

15 vedio

1段          audio

15vedio

1段          audio

16 vedio

1段          audio

15vedio

1段   audio

15vedio

1段   audio

16 vedio

1 audio

      也就是基本上是每15vedio就有一段的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++代码供大家参考:

复制代码
switch (buf[i]  &  (BYTE) 0xc0 )
{
case   0x00 :
    
// I Frame
     break ;
case   0x40 :
    
// P Frame
     break ;
case   0x80 :
    
// B Frame
     break ;
default :
    
break ;
}
复制代码
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值