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;
}