MOV及MP4文件格式中几个重要的Table
MP4,全稱是MPEG4 Part 14,是一種使用MPEG-4的多媒體文件格式,擴(kuò)展名為.mp4。
MOV,是QuickTime影片格式,它是Apple公司開發(fā)的一種音頻、視頻文件格式,用于存儲(chǔ)常用數(shù)字媒體類型。其擴(kuò)展名為.mov。
在MOV和MP4文件格式中包括幾個(gè)重要的Table,對(duì)應(yīng)的atoms分別為:stts、ctts、stss、stsc、stsz以及stco/co64。
1、Sample時(shí)間表stts
stts:Time-To-Sample Atoms,存儲(chǔ)了媒體sample的時(shí)常信息,提供了時(shí)間和相關(guān)sample之間的映射關(guān)系。該atom包含了一個(gè)表,關(guān)于time和sample號(hào)之間的索引關(guān)系。表的每個(gè)entry給出了具有相同時(shí)間間隔的連續(xù)的sample的個(gè)數(shù)和這些sample的時(shí)間間隔值。將這些時(shí)間間隔相加在一起,就可以得到一個(gè)完整的time與sample之間的映射。將所有的時(shí)間間隔相加在一起,就可以得到該track的時(shí)間總長(zhǎng)。
每個(gè)sample的顯示時(shí)間可以通過(guò)如下的公式得到:
D(n+1) = D(n) + STTS(n)
其中,STTS(n)是sample n的時(shí)間間隔,包含在表格中;D(n)是sample n的顯示時(shí)間。
Time-To-Sample的table entry布局如圖1-1所示:
圖1-1?Time-To-Sample的table entry布局
Table entries根據(jù)每個(gè)sample在媒體流中的順序和時(shí)長(zhǎng)對(duì)他們進(jìn)行描述。如果連續(xù)的samples有相同的時(shí)長(zhǎng),他們會(huì)被放在同一個(gè)table entry中。特別的,如果所有的sample具有相同的時(shí)長(zhǎng),那么table中就只有一個(gè)entry。
一個(gè)簡(jiǎn)單的例子如圖1-2所示。這個(gè)媒體流包括9個(gè)samples,通過(guò)3個(gè)entries來(lái)描述。需要說(shuō)明的一點(diǎn)是,這里的entry和chunk不是對(duì)應(yīng)的。比如,sample 4、5和6在同一個(gè)chunk中,但是,由于他們的時(shí)長(zhǎng)不一樣,sample 4的時(shí)長(zhǎng)為3,而sample 5和6的時(shí)長(zhǎng)為1,因此,通過(guò)不同的entry來(lái)描述。
圖1-2 關(guān)于Time-To-Sample的一個(gè)簡(jiǎn)單例子
2、時(shí)間合成偏移表ctts
ctts:Composition Offset Atom。每一個(gè)視頻sample都有一個(gè)解碼順序和一個(gè)顯示順序。對(duì)于一個(gè)sample來(lái)說(shuō),解碼順序和顯示順序可能不一致,比如H.264格式,因此,Composition Offset Atom就是在這種情況下被使用的。
(1)如果解碼順序和顯示順序是一致的,Composition Offset Atom就不會(huì)出現(xiàn)。Time-To-Sample Atoms既提供了解碼順序也提供了顯示順序,并能夠計(jì)算出每個(gè)sample的開始時(shí)間和結(jié)束時(shí)間。
(2)如果解碼順序和顯示順序不一致,那么Time-To-Sample Atoms既提供解碼順序,Composition Offset Atom則通過(guò)差值的形式來(lái)提供顯示時(shí)間。
Composition Offset Atom提供了一個(gè)從解碼時(shí)間到顯示時(shí)間的sample一對(duì)一的映射,具有如下的映射關(guān)系:
CT(n) = DT(n) + CTTS(n)
其中,CTTS(n)是sample n在table中的entry(這里假設(shè)一個(gè)entry只對(duì)應(yīng)一個(gè)sample)可以是正值也可是負(fù)值;DT(n)是sample n的解碼時(shí)間,通過(guò)Time-To-Sample Atoms計(jì)算獲得;CT(n)便是sample n的顯示時(shí)間。
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,標(biāo)識(shí)了媒體流中的關(guān)鍵幀,提供了隨機(jī)訪問(wèn)點(diǎn)標(biāo)記。Sync Sample Atom包含了一個(gè)table,table的每個(gè)entry標(biāo)識(shí)了一個(gè)sample,該sample是媒體流的關(guān)鍵幀。Table中的sample號(hào)是嚴(yán)格按照增長(zhǎng)的順序排列的,如果該table不存在,那么每一個(gè)sample都可以作為隨機(jī)訪問(wèn)點(diǎn)。換句話說(shuō),如果Sync Sample Atom不存在,那么所有的sample都是關(guān)鍵幀。
Sync Sample Table的布局如圖3-1所示:
圖3-1?Sync Sample Table的布局
4、Chunk中的Sample信息表stsc
stsc:Sample-To-Chunk Atom。為了優(yōu)化數(shù)據(jù)訪問(wèn),通常把sample封裝到chunk中,一個(gè)chunk可能會(huì)包含一個(gè)或者幾個(gè)sample。每個(gè)chunk會(huì)有不同的size,每個(gè)chunk中的sample也會(huì)有不同的size。在Sample-To-Chunk Atom中包含了個(gè)table,這個(gè)table提供了從sample到chunk的一個(gè)映射,每個(gè)table entry可能包含一個(gè)或者多個(gè)chunk。Table entry包含的內(nèi)容包括第一個(gè)chunk號(hào)、每個(gè)chunk包含的sample的個(gè)數(shù)以及sample的描述ID。Sample-To-Chunk Atom的table entry布局如圖4-1所示。
圖4-1?Sample-To-Chunk Atom的table entry布局
每個(gè)table entry包含一組chunk,enrty中的每個(gè)chunk包含相同數(shù)目的sample。而且,這些chunk中的每個(gè)sample都必須使用相同的sample description。任何時(shí)候,如果chunk中的sample數(shù)目或者sample description改變,必須創(chuàng)建一個(gè)新的table entry。如果所有的chunk包含的sample數(shù)目相同,那么該table只有一個(gè)entry。
一個(gè)簡(jiǎn)單的例子,如圖4-2所示。圖中看不出來(lái)總共有多少個(gè)chunk,因?yàn)閑ntry中只包含第一個(gè)chunk號(hào),因此,對(duì)于最后一個(gè)entry,在某些情況下需要特殊的處理,因?yàn)闊o(wú)法判斷什么時(shí)候結(jié)束。
圖4-2 一個(gè)關(guān)于Sample-To-Chunk table的例子
5、Sample大小表stsz
stsz:Sample Size Atom,指定了每個(gè)sample的size。Sample Size Atom給出了sample的總數(shù)和一張表,這個(gè)表包含了每個(gè)sample的size。如果指定了默認(rèn)的sampe size,那么這個(gè)table就不存在了。即每個(gè)sample使用這個(gè)默認(rèn)的sample size。sample size table的布局如圖5-1所示。
圖5-1?sample size table的布局
6、Chunk的偏移量表stco/co64
stco/co64:Chunk Offset Atom,指定了每個(gè)chunk在文件中的位置。Chunk Offset Atom包含了一個(gè)table,表中的每個(gè)entry給出了每個(gè)chunk在文件中的位置。有兩種形式來(lái)表示每個(gè)entry的值,即chunk的偏移量,32位和64位。如果Chunk Offset Atom的類型為stco,則使用的是32位的,如果是co64,那么使用的就是64位的。chunk offset table的布局如圖6-1所示。
圖6-1?chunk offset table的布局
需要注意的是,table中只是給出了每個(gè)chunk的偏移量,并沒(méi)有給出每個(gè)sample的偏移量。因此,如果要獲得每個(gè)sample的偏移量,還需要用到Sample Size Table和Sample-To-Chunk Table。
---------------------?
作者:MultiMedia之旅?
來(lái)源:CSDN?
原文:https://blog.csdn.net/yu_yuan_1314/article/details/9078287?
版權(quán)聲明:本文為博主原創(chuàng)文章,轉(zhuǎn)載請(qǐng)附上博文鏈接!
總結(jié)
以上是生活随笔為你收集整理的MOV及MP4文件格式中几个重要的Table的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Mp4文件解析
- 下一篇: ffmpeg基础库编程开发 读书笔记