MP4結構分析

2021-08-08 00:21:33 字數 3067 閱讀 7977

一、mp4

mp4(mpeg-4 part14)是一種常見的多**容器格式,是在「iso/iec 14496-14」標準檔案中定義的。

mp4檔案的所有資料都裝在box(quicktime中為atom)中,mp4檔案由若干個box組成,每個box有型別和長度,可以將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進行描述。

1.1 box

box中的位元組序為網路位元組序,也就是大端位元組序(big-endian),簡單的說,就是乙個32位的4位元組整數儲存方式為高位位元組在記憶體的低端。box由header和body組成,其中header統一指明box的大小和型別,body根據型別有不同的意義和格式。

標準的box開頭的4個位元組(32位)為box size,該大小包括box header和box body整個box的大小,這樣我們就可以在檔案中定位各個box。如果size為1,則表示這個box的大小為large size,真正的size值要在largesize域上得到。(實際上只有「mdat」型別的box才有可能用到large size。)如果size為0,表示該box為檔案的最後乙個box,檔案結尾即為該box結尾。(同樣只存在於「mdat」型別的box中)

size後面緊跟的32位為box type,一般是4個字元,如「ftyp」、「moov」等,這些box type都是已經預定義好的,分別表示固定的意義。如果是「uuid」,表示該box為使用者擴充套件型別。如果box type是未定義的,應該將其忽略。

先簡單介紹幾個重要的box,以便諸位在後續學習時心中有數:

ftyp box,在檔案的開始位置,描述的檔案的版本、相容協議等;

mfra box,一般在檔案末尾,**的索引檔案,可通過查詢直接定位所需時間點的**資料。

這種box一般情況下都會出現在mp4檔案的開頭,它可以作為mp4容器格式的可表示資訊。就像flv頭』f』 『l』 『v』 3位元組,mkv頭部的1a 45 df a3 、asf_header_object 可以作為asf容器格式的可辨識資訊一樣。

aligned(8) class

filetypebox

extends

box('type')

什麼是brands?官方是這樣描述的:

each brand is a printable four-character code, registered with iso, that identifies a precise specification.//在iso註冊的4個字元。

下表**於網路,列出了幾種常見的基於基礎檔案格式的,**封裝格式標識。

全檔案唯一的(乙個檔案中只能包含乙個mvhd box),對整個檔案所包含的**資料作全面的全域性的描述。包含了**的建立與修改時間時間刻度、預設音量、色域、時長等資訊。

包括media header box(mdhd)、handler reference box(hdlr)(這個box裡面,可以獲得這個track的型別資訊handler_type)、media information box(minf)( minf 裡包含著一系列的box。裡面是track有關的特徵資訊。

一般情況minf 包含:media information header boxes、data information box(dinf)、sample table box。

media information header boxes 根據型別分『vmhd』, 『smhd』, 』hmhd』, 『nmhd』)。

二、工具

想真正了解mp4檔案格式的話,有乙個開源工具專案可以學習:mp4 explorer。一方面,這個工具可以按mpeg-4標準去解析mp4檔案,直觀上幫助大家去看mp4檔案的格式。另一方面,認真學習其**,就可以了解mp4檔案是如何被訪問和訪問的,對致力於底層研究的同學是個福音。其官網:mp4 explorer。

nginx支援MP4模組

nginx的安裝參考 安裝步驟 解壓。注釋掉解壓目錄下src ngx http streaming module.c檔案的158 161行的 如下圖。跳轉到nginx解壓目錄,配置安裝mp4模組支援。configure prefix server nginx add module nginx mod...

高畫質MP4晶元方案點評

09可謂高畫質數碼年,在華芯飛cc1600所推動的四核四匯流排架構勢頭正猛之際,隨著ti方案近日的強推讓09年的晶元之戰開始蔓延,此時凌陽v800 0晶元和adi卻沒有多大動靜而顯得更為遜色,而1月份君正發布4750晶元後卻一直再沒訊息傳出。今天,我們就來簡單談談近期幾大晶元的特點,並針對其功能特色...

MP4格式詳解

mp4由多個box組成,box又由header和data組成。header 包含box的型別 type 和大小 size 當size為0時,表示檔案中的最後乙個box 當size為1時,會定義largesize描述box長度 當type為uuid時,表示box是使用者自定義擴充套件型別。data 包...