MOV及MP4檔案格式中幾個重要的Table

2021-09-22 20:04:24 字數 3742 閱讀 4083

mp4,全稱是mpeg4 part 14,是一種使用mpeg-4的多**檔案格式,擴充套件名為.mp4。

在mov和mp4檔案格式中包括幾個重要的table,對應的atoms分別為:stts、ctts、stss、stsc、stsz以及stco/co64。

1、sample時間表stts

stts:time-to-sample atoms,儲存了**sample的時常資訊,提供了時間和相關sample之間的對映關係。該atom包含了乙個表,關於time和sample號之間的索引關係。表的每個entry給出了具有相同時間間隔的連續的sample的個數和這些sample的時間間隔值。將這些時間間隔相加在一起,就可以得到乙個完整的time與sample之間的對映。將所有的時間間隔相加在一起,就可以得到該track的時間總長。

每個sample的顯示時間可以通過如下的公式得到:

d(n+1) = d(n) + stts(n)

其中,stts(n)是sample n的時間間隔,包含在**中;d(n)是sample n的顯示時間。

time-to-sample的table entry布局如圖1-1所示:

圖1-1 time-to-sample的table entry布局

table entries根據每個sample在**流中的順序和時長對他們進行描述。如果連續的samples有相同的時長,他們會被放在同乙個table entry中。特別的,如果所有的sample具有相同的時長,那麼table中就只有乙個entry。

乙個簡單的例子如圖1-2所示。這個**流包括9個samples,通過3個entries來描述。需要說明的一點是,這裡的entry和chunk不是對應的。比如,sample 4、5和6在同乙個chunk中,但是,由於他們的時長不一樣,sample 4的時長為3,而sample 5和6的時長為1,因此,通過不同的entry來描述。

圖1-2 關於time-to-sample的乙個簡單例子

2、時間合成偏移表ctts

(1)如果解碼順序和顯示順序是一致的,composition offset atom就不會出現。time-to-sample atoms既提供瞭解碼順序也提供了顯示順序,並能夠計算出每個sample的開始時間和結束時間。

(2)如果解碼順序和顯示順序不一致,那麼time-to-sample atoms既提供解碼順序,composition offset atom則通過差值的形式來提供顯示時間。

composition offset atom提供了乙個從解碼時間到顯示時間的sample一對一的對映,具有如下的對映關係:

ct(n) = dt(n) + ctts(n)

其中,ctts(n)是sample n在table中的entry(這裡假設乙個entry只對應乙個sample)可以是正值也可是負值;dt(n)是sample n的解碼時間,通過time-to-sample atoms計算獲得;ct(n)便是sample n的顯示時間。

composition offset atom的table entry的布局和time-to-sample atoms的一樣,如圖2-1所示:

圖2-1 composition offset atom的table entry布局

3、同步sample表stss

stss:sync sample atom,標識了**流中的關鍵幀,提供了隨機訪問點標記。sync sample atom包含了乙個table,table的每個entry標識了乙個sample,該sample是**流的關鍵幀。table中的sample號是嚴格按照增長的順序排列的,如果該table不存在,那麼每乙個sample都可以作為隨機訪問點。換句話說,如果sync sample atom不存在,那麼所有的sample都是關鍵幀。

sync sample table的布局如圖3-1所示:

圖3-1 sync sample table的布局

4、chunk中的sample資訊表stsc

stsc:sample-to-chunk atom。為了優化資料訪問,通常把sample封裝到chunk中,乙個chunk可能會包含乙個或者幾個sample。每個chunk會有不同的size,每個chunk中的sample也會有不同的size。在sample-to-chunk atom中包含了個table,這個table提供了從sample到chunk的乙個對映,每個table entry可能包含乙個或者多個chunk。table entry包含的內容包括第乙個chunk號、每個chunk包含的sample的個數以及sample的描述id。sample-to-chunk atom的table entry布局如圖4-1所示。

圖4-1 sample-to-chunk atom的table entry布局

每個table entry包含一組chunk,enrty中的每個chunk包含相同數目的sample。而且,這些chunk中的每個sample都必須使用相同的sample description。任何時候,如果chunk中的sample數目或者sample description改變,必須建立乙個新的table entry。如果所有的chunk包含的sample數目相同,那麼該table只有乙個entry。

乙個簡單的例子,如圖4-2所示。圖中看不出來總共有多少個chunk,因為entry中只包含第乙個chunk號,因此,對於最後乙個entry,在某些情況下需要特殊的處理,因為無法判斷什麼時候結束。

圖4-2 乙個關於sample-to-chunk table的例子

5、sample大小表stsz

stsz:sample size atom,指定了每個sample的size。sample size atom給出了sample的總數和一張表,這個表包含了每個sample的size。如果指定了預設的sampe size,那麼這個table就不存在了。即每個sample使用這個預設的sample size。sample size table的布局如圖5-1所示。

圖5-1 sample size table的布局

6、chunk的偏移量表stco/co64

stco/co64:chunk offset atom,指定了每個chunk在檔案中的位置。chunk offset atom包含了乙個table,表中的每個entry給出了每個chunk在檔案中的位置。有兩種形式來表示每個entry的值,即chunk的偏移量,32位和64位。如果chunk offset atom的型別為stco,則使用的是32位的,如果是co64,那麼使用的就是64位的。chunk offset table的布局如圖6-1所示。

圖6-1 chunk offset table的布局

MP4檔案格式詳解

一 基本概念 1 檔案,由許多box和fullbox組成。2 box,每個box由header和data組成。3 fullbox,是box的擴充套件,box結構的基礎上在header中增加8bits version和24bits flags。4 header,包含了整個box的長度size和型別ty...

mp4 檔案格式系列

不同。sample to chunk atom儲存sample與chunk的對映關係。sample to chunk atoms的型別是 stsc 它也有乙個表來對映sample和trunk之間的關係,檢視這張表,就可以找到包含指定sample的trunk,從而找到這個sample。字段 長度 位元...

mp4檔案格式解析

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