mpeg4 碼流格式及判斷關鍵幀

2021-06-23 07:12:13 字數 1381 閱讀 5567

關鍵幀:位元組0

1 23 4

5 67 8

9 ab c

d ef 值

001fb

xx r

w&h

date time

length 含義

id 影象大小

時間戳幀長度

非關鍵幀位元組0

1 23 4

5 67 值

001fa

length 含義

id 幀長度

struct datetime

; 非關鍵幀的時間戳是根據幀率和對關鍵幀的偏移計數計算出來的。

給乙個例子:

今天就把mpeg4碼流的分析和它的i,p,b frame的判定方法在這裡簡要記錄一下吧,供日後的翻看和大家的參考。!

mpeg4碼流分析:

0x00, 0x00, 0x01, 0xb0作為乙個vos的開始;

0x00, 0x00, 0x01, 0xb6作為乙個vop的開始,緊跟著vop開始的,有乙個2bit 的標誌,用來表示這個frame到底是乙個 i frame,p frame,b frame抑或是s frame(gms-vop)

標誌如下:

00: i frame

01: p frame

10: b frame

11: s frame

但是,有關這 2bit 是在0xb6的後面位元組的高位還是低位,卻沒有很明確的描述。

於是又回頭開始針對某個mpeg4編碼好的檔案開始分析,結果終於發現,判定方法如下:

1.可以寫乙個判定vop,或者vos開頭的函式:

static unsigned char *find_vop_start(unsigned char *addrp, unsigned int findsizes) 

if(pos

else

return null; 

2. 讀乙個mpeg4碼流檔案,然後利用剛才寫的函式搜尋startcode:

size_t nread = fread(lpsrc, 1, lsize, fp); 

fseek(fp, 0, seek_set); 

while (!feof(fp)) 

else } 

if (p==null) break; 

//判定vos是哪種profile

if (*(p-1)==0xb0) 

if (*(p-1)==0xb6) 

//繼續查詢下乙個vos/vop的startcode

poslast=pos; 

pos=pos+4;    

可以簡單拿個圖說明一下,下圖中,第乙個vos的開頭,第二個是乙個i frame:

by lydia

mpeg4是什麼格式,mpeg4和mp4的區別

mpeg4是什麼格式,mpeg4和mp4的區別。mpeg4於1998 年11 月公布,原預計1999 年1月投入使用的國際標準mpeg4不僅是針對一定位元率下的 音訊編碼,更加注重多 系統的互動性和靈活性。mpeg專家組的專家們正在為mpeg 4的制定努力工作。mpeg 4標準主要應用於視像 vid...

H264和MPEG4起始碼 startcode

1.h.264起始碼 在網路傳輸h264資料時,乙個udp包就是乙個nalu,解碼器可以很方便的檢測出nal分界和解碼。但是如果編碼資料儲存為乙個檔案,原來的解碼器將無法從資料流中分別出每個nal的起始位置和終止位置,為此h.264用起始碼來解決這一問題。h.264編碼時,在每個nal前新增起始碼 ...

MPEG 4標準及其實現分析

mpeg 4技術的應用將使當前很多提供聲音和資料服務的系統得到進一步的擴充套件,根據涉及iso標準的版本 部分 類 profile 和等級 level 的不同,mpeg 4對應不同的技術。本文將討論所有不同的mpeg 4技術,研究mpeg 4的需求 架構和實現策略,並討論計算需求以更好地理解mpeg...