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