不同。sample-to-chunk atom儲存sample與chunk的對映關係。
sample-to-chunk atoms的型別是'stsc'。它也有乙個表來對映sample和trunk之間的關係,檢視這張表,就可以找到包含指定sample的trunk,從而找到這個sample。
字段 長度(位元組) 描述
尺寸 4 這個atom的位元組數 型別 4 stsc
版本 1 這個atom的版本 標誌 3 這裡為0
條目數目 4 sample-to-chunk的數目 sample-to-chunk sample-to-chunk表的結構
first chunk 4 這個table使用的第乙個chunk序號 samples per chunk 4 當前trunk內的sample數目
sample description id 4 與這些sample關聯的sample description的序號
mp4檔案格式系列25(續) - sample-to-chunk atoms - stsc
first chunk samples per chunk sample description id 1 4 1 4 3 1 5 4 1 8 3 1 9 4 1 … … …
這個表類似於行程編碼,第乙個first chunk減去第二個first chunk就是一共有多少個trunk包含相同的sample數目,這樣通過不斷的疊加,就可以得到一共有280個trunk,每個trunk包含多少個sample,以及每個trunk對應的description。
mp4檔案格式系列26 - sample size atoms - stsz
sample size atoms定義了每個sample的大小,它的型別是'stsz',包含了**中全部sample
的數目和一張給出每個sample大小的表。這樣,**資料自身就可以沒有邊框的限制。
字段 長度(位元組) 描述
尺寸 4 這個atom的位元組數 型別 4 stsz
版本 1 這個atom的版本 標誌 3 這裡為0
sample size 4 全部sample的數目。如果所有的sample有相同的長度,這個字段就是
這個值。否則,這個欄位的值就是0。那些長度存在sample size表中
條目數目 4 sample size的數目
sample size sample size表的結構。這個表根據sample number索引,第一項就是第
乙個sample,第二項就是第二個sample
大小 4 每個sample的大小
mp4檔案格式系列27 - chunk offset atoms - stco
chunk offset atoms 定義了每個trunk在**流中的位置,它的型別是'stco'。位置有兩種可能,32位的和64位的,後者對非常大的電影很有用。在乙個表中只會有一種可能,這個位置是在整個檔案中的,而不是在任何atom中的,這樣做就可以直接在檔案中找到**資料,而不用解釋atom。需要注意的是一旦前面的atom有了任何改變,這張表都要重新建立,因為位置資訊已經改變了。
字段 長度(位元組) 描述
尺寸 4 這個atom的位元組數 型別 4 stco
版本 1 這個atom的版本 標誌 3 這裡為0
條目數目 4 chunk offset的數目
chunk offset 位元組偏移量從檔案開始到當前chunk。這個表根據chunk number
索引,第一項就是第乙個trunk,第二項就是第二個trunk
大小 4 每個sample的大小
[mp4檔案格式]獲取mp4檔案資訊1 - 計算電影長度wqyuwss
方法1: 從mvhd - movie header atom中找到time scale和duration,duration除以time scale即是整部電影的長度。time scale相當於定義了標準的1秒在這部電影裡面的刻度是多少。 例如audio track的time scale = 8000, duration = 560128,所以總長度是70.016,video track的time scale = 600, duration = 42000,所以總長度是70
方法2 :首先計算出共有多少個幀,也就是sample(從sample size atoms中得到),然後 整部電影的duration = 每個幀的duration之和(從time-to-sample atoms中得出)
例如audio track共有547個sample,每個sample的長度是1024,則總duration是560128,電影長度是70.016;video track共有1050個sample,每個sample的長度是40,則總duration是42000,電影長度是70
mp4檔案格式]獲取mp4檔案資訊3 - 計算電影聲音取樣頻率wqyuwss
從tkhd – track header atom中找出audio track的time scale即是聲音的取樣頻率。
[mp4檔案格式]獲取mp4檔案資訊2 - 計算電影影象寬度和
高度wqyuwss
從tkhd – track header atom中找到寬度和高度即是。
首先計算出整部電影的duration,和幀的數目然後 幀率 = 整部電影的duration / 幀的數目
[mp4檔案格式]獲取mp4檔案資訊5 - 計算電影的位元率wqyuwss
整部電影的尺寸除以長度,即是位元率,此電影的位元率為846623/70 = 12094 bps
[mp4檔案格式]獲取mp4檔案資訊6 - 查詢samplewqyuwss
2.檢查time-to-sample atom來確定給定時間的sample序號。 3.檢查sample-to-chunk atom來發現對應該sample的chunk。 4.從chunk offset atom中提取該trunk的偏移量。
4. 檢查chunk offset atom找到第5個trunk的偏移量是20472
[mp4檔案格式]獲取mp4檔案資訊7 - 查詢關鍵幀wqyuwss
查詢過程與查詢sample的過程非常類似,只是需要利用sync sample atom來確定key frame的sample序號
確定給定時間的sample序號
檢查sync sample atom來發現這個sample序號之後的key frame
檢查sample-to-chunk atom來發現對應該sample的chunk 從chunk offset atom中提取該trunk的偏移量
利用sample size atom找到sample在trunk內的偏移量和sample的大小
[mp4檔案格式]獲取mp4檔案資訊8 - random accesswqyuwss
seeking主要是利用sample table box裡面包含的子box來實現的,還需要考慮edit list的影響。
可以按照以下步驟seek某乙個track到某個時間t,注意這個t是以movie header box裡定義的time scale為單位的:
如果track有乙個edit list,遍歷所有的edit,找到t落在哪個edit裡面。將edit的開始時間變換為以movie time scale為單位,得到est,t減去est,得到t',就是在這個edit裡面的duration,注意此時t'是以movie的time scale為單位的。然後將t'轉化成track**的time scale,得到t''。t''與edit的開始時間相加得到以track**的time scale為單位的時間點t'''。 這個track的time-to-sample表說明了該track中每個sample對應的時間資訊,利用這個表就可以得到t'''對應的sample nt。
sample nt可能不是乙個random access point,這樣就需要其他表的幫助來找到最近的random access point。乙個表是sync sample表,定義哪些sample是random access point。使用這個表就可以找到指定時間點最近的sync sample。如果沒有這個表,就說明所有的sample都是synchronization points,問題就變得更容易了。另乙個shadow sync box可以幫助內容作者定義一些特殊的samples,它們不用在網路中傳輸,但是可以作為額外的random access point。這就改進了random access,同時不會影響正常的傳輸位元率。這個表指出了非random access point和random access point之間的關係。如果要尋找指定sample之前最近的shadow sync sample,就需要查詢這個表。總之,利用sync sample和shadow sync表,就可以seek到nt之前的最近的access point sample nap。
找到用於access point的sample nap之後,利用sample-to-chunk表來確定sample位於哪個chunk內。
找到chunk後,使用chunk offset找到這個chunk的開始位置。
使用sample-to-chunk表和sample size表中的資料,找到nap在此chunk內的位置,再加上此chunk的開始位置,就找到了nap在檔案中的位置。
MP4檔案格式詳解
一 基本概念 1 檔案,由許多box和fullbox組成。2 box,每個box由header和data組成。3 fullbox,是box的擴充套件,box結構的基礎上在header中增加8bits version和24bits flags。4 header,包含了整個box的長度size和型別ty...
mp4檔案格式解析
想真正了解mp4檔案格式的話,有乙個開源工具專案可以學習 mp4 explorer。一方面,這個工具可以按mpeg 4標準去解析mp4檔案,直觀上幫助大家去看mp4檔案的格式。另一方面,認真學習其 就可以了解mp4檔案是如何被訪問和訪問的,對致力於底層研究的同學是個福音。其官網 本文介紹的一種mp4...
mp4檔案格式解析(四)
5 free space box free 或skip free 中的內容是無關緊要的,可以被忽略。該 box6 meida data box mdat 該box包含於檔案層,可以有多個,也可以沒有 當 資料全部為外部檔案引用時 用來儲存 資料。資料直接跟在box type欄位後面,具體資料結構的意...