多媒體封裝格式(容器)介紹

封裝格式:在觀看已經下載好的視頻的時候,經常會看到一些視頻文件後綴,如.mp4,.flv,.avi,.mkv等等,這些擴展名就可以簡單理解爲視頻的封裝格式或者視頻的容器格式。

封裝:所謂視頻的封裝,就是將已經編碼好的音頻,視頻,還可能有字幕,腳本之類的文件按照一定的規範放到一起,形成一個封裝格式的文件(封裝和編碼是兩個不同的概念,封裝是在“視頻流水線”上,編碼以後的一個過程,一個容器可以封裝多種編碼格式的文件,但是隻支持特定的編碼格式)。封裝格式有很多,比如flv,mp4,ts,avi ,mkv等等。

幾種常見的封裝格式:

1.TS封裝格式

TS流最早應用於數字電視領域,視頻格式主要是mpeg2。後來,蘋果公司發明HLS協議也是基於TS文件的。hls流媒體視頻編碼的主要格式爲h264/mpeg4,音頻爲aac/mp3。

TS文件分爲三層:ts層(如下圖)pes(Packet Elemental Stream)層,es層(Elementary Stream)。

es層就是音視頻數據,pes層是在音視頻數據上加了時間戳等對數據幀的說明信息,ts層是在pes層上加入了數據流識別和傳輸的必要信息。

ts流結構
由上圖可以看出,ts流是由一個個固定大小的包組成的,每個packet大小固定188個字節。

在這裏說一下TS流的生產,就不再畫深一層的結構圖了,深一層結構圖自行腦補:

TS流的形成過程:

  1. 將原始音視頻數據壓縮之後,壓縮結果組成一個基本碼流(ES)。
  2. 對ES(基本碼流)進行打包形成PES。
  3. 在PES包中加入時間戳信息(PTS/DTS)。
  4. 將PES包內容分配到一系列固定長度的傳輸包(TS Packet)中。
  5. 在傳輸包中加入定時信息(PCR)。
  6. 在傳輸包中加入節目專用信息(PSI) 。
  7. 連續輸出傳輸包形成具有恆定比特率的MPEG-TS流。
2.MP4封裝格式

MP4,全稱MPEG-4 Part 14,是一種使用MPEG-4的多媒體電腦檔案格式,其基本存儲結構是box,box可以理解爲數據對象塊,所有數據都必須保存在box中,而且必須包含一個File Type box(ftpy),作爲MP4格式的標誌幷包含關於文件的一些信息。以下是MP4文件的結構樹:
MP4文件結構樹

ftpy:通常放在文件的開始,作爲MP4格式的標誌包含關於文件的一些信息

moov:它是一種container box,子box包含了媒體的metadata信息

mdat:包含MP4文件的媒體數據

free:“free”中的內容是無關緊要的,可以被忽略。該box被刪除後,不會對播放產生任何影響,只能是size+type,這樣組成8個字節的頭數據

mvhd:一般作爲“moov”的第一個子box出現,相當於整個moov box的“header”

概念:

track表示一些sample的集合,對於媒體數據來說,track表示一個視頻或音頻序列。

hint track這個特殊的track並不包含媒體數據,而是包含了一些將其他數據track打包成流媒體的指示信息。

sample對於非hint track來說,video sample即爲一幀視頻,或一組連續視頻幀,audio sample即爲一段連續的壓縮音頻,它們統稱sample。對於hint track,sample定義一個或多個流媒體包的格式。

sample table指明sampe時序和物理佈局的表。

chunk一個track的幾個sample組成的單元。

MP4文件結構:

1、 文件,由很多Box和FullBox組成。

2、 Box,每一個Box由Header和Data組成。

3、 FullBox,是Box的擴展,Box結構的基礎上在Header中添加8bits version和24bits flags。

4、 Header,包括了整個Box的長度size和類型type。當size==0時,代表這是文件裏最後一個Box;當size==1時,意味着Box長度須要很多其它bits來描寫敘述,在後面會定義一個64bits的largesize描寫敘述Box的長度;當type是uuid時,代表Box中的數據是用戶自己定義擴展類型。

5、 Data,是Box的實際數據,可以是純數據也可以是很多其它的子Boxes。

6、 當一個Box的Data中是一系列子Box時,這個Box又可成爲Container Box。

鏈接:https://www.jianshu.com/p/bc06344a91ce

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章