從MP4頭資訊中提取sps和pps資料
阿新 • • 發佈:2019-01-23
一、MP4格式基本概念
MP4格式對應標準MPEG-4標準(ISO/IEC14496)
二、MP4封裝格式核心概念
1 MP4封裝格式對應標準為 ISO/IEC 14496-12(資訊科技 視聽物件編碼的第12部分: ISO 基本媒體檔案格式/Information technology Coding of audio-visual objects Part 12: ISO base media file format)
2 MP4封裝格式是基於QuickTime容器格式定義,媒體描述與媒體資料分開,目前被廣泛應用於封裝h.264視訊和ACC音訊,是高清視訊/HDV的代表。
3 MP4檔案中所有資料都封裝在box中(對應QuickTime中的atom),即MP4檔案是由若干個box組成,每個box有長度和型別,每個box中還可以包含另外的子box(稱container
box)。
一個MP4檔案首先會有且只有一個“ftyp”型別的box,作為MP4格式的標誌幷包含關於檔案的一些資訊;之後會有且只有一個“moov”型別的box(Movie Box),它是一種container box,子box包含了媒體的metadata資訊;MP4檔案的媒體資料包含在“mdat”型別的box(Midia
Data Box)中,該型別的box也是container box,可以有多個,也可以沒有(當媒體資料全部引用其他檔案時),媒體資料的結構由metadata進行描述。
可以看到,每一個packet的前4byte是幀大小(mp4是大端儲存),如第一組資料:0x14efa = 85754,即出去前4byte後的大小。 在使用VPU進行H.264解碼的時候,還需要sps和pps資料,第一幀的資料頭應當包含sps和pps。(至於這兩個引數是幹什麼的,這裡就不贅述了,網上的資料很多)。好的,下面來說如何找出sps和pps: 1、找到avcC,在mp4的包頭中,包含了avcC這4個字母的asic碼,對應的十六進位制數分別是61 76 63 43。因此,需要在mp4包頭中找出avcC。下圖為用altraedit檢視的mp4的包頭資料。
可以看到,61 76 63 43對應了avcC。至於前面的mp4包頭資訊,可以參考mp4官方文件給出的解釋,這裡不再解釋。 2、根據下表所示的資訊,找出對應的sps和pps位:
因此,對應上表,可以得出如下資訊:
avcC | 61 76 63 43 |
版本號 | 1 |
AVCProfileIndication | 64 |
profile_compatibility | 0 |
AVCLevelIndication | 29 |
reserved(6bit)+NALU長度(2bit) | ff |
reserver(3bit)+sps個數(5bit) | E1 |
sps長度 | 00 0B |
sps內容 | 67 64 00 29 AC CE C0 78 02 26 40 |
pps個數 | 01 |
pps長度 | 00 04 |
pps內容 | 68 EA 5B 83 |