Fragmented MPEG-4 (fMP4)

0 縮略語(yǔ)解析

  1. DASH:Dynamic Adaptive Streaming over HTTP,是一項(xiàng)自適性串流技術(shù)绪妹,可將多媒體文件分割為一個(gè)或多個(gè)片段,并使用超文本傳輸協(xié)議傳遞給客戶端。
  2. HLS:HTTP Live Streaming器钟,蘋果公司提出基于HTTP的流媒體網(wǎng)絡(luò)傳輸協(xié)議。
  3. CMAF:Common Media Application Format妙蔗,是一種可擴(kuò)展的編碼標(biāo)準(zhǔn)傲霸,通過(guò)指定一致的媒體包裝和加密來(lái)實(shí)現(xiàn)內(nèi)容和設(shè)備之間的互操作性。

1 fMP4 是什么眉反?

fMP4(Fragmented MPEG-4) 是基于 MPEG-4 Part 12 的流媒體格式昙啄,其優(yōu)點(diǎn)在于使用 DASH 或 HLS 進(jìn)行流傳輸時(shí),播放器僅需要下載觀眾想要看的片段寸五。

其格式與 MP4(參考MP4格式詳解)相似梳凛,主要的區(qū)別有:

  1. fMP4 不需要一個(gè) moov Box 來(lái)進(jìn)行 initialization,moov Box 只包含了一些 track 信息梳杏;
  2. fMP4 的 metadata 信息與數(shù)據(jù)都存在一個(gè)個(gè) Segment(moof + mdat)韧拒。
image.png

2 MP4 to fMP4

在了解 fMP4 格式之前,先通過(guò) bento4 來(lái)將普通的 MP4 文件轉(zhuǎn)換成 fMP4 文件十性,來(lái)了解 fMP4 文件具體的存儲(chǔ)形態(tài)與播放方式叛溢。

2.1 安裝 bento4

這里通過(guò) bento4 對(duì) MP4 文件轉(zhuǎn)換成 fMP4,可以通過(guò)官網(wǎng)下載安裝劲适,也通過(guò)通過(guò) hombrew :

brew install bento4

2.2 工具轉(zhuǎn)封裝

bento4 提供了工具集雇初,可以通過(guò)其官方文檔查閱,這里主要用到了mp4fragmentmp4dump兩個(gè)工具:

image.png

使用 mp4fragment减响,轉(zhuǎn)換為 fMP4 格式靖诗,命令格式為(指定fragment時(shí)長(zhǎng)為2s):

mp4fragment --fragment-duration 2000 original.mp4 fragment.mp4

通過(guò) mp4dump fragment.mp4命令查詢確認(rèn) fragment.mp4 已經(jīng)轉(zhuǎn)為 fMP4 格式:

image.png

使用 mp4dash 對(duì) fmp4 文件進(jìn)行切片:

mp4dash fragment.mp4

可查看其 MPEG DASH 數(shù)據(jù):

├── audio
│   └── und
│       └── mp4a.40.2
│           ├── init.mp4
│           ├── seg-1.m4s
│           ├── seg-2.m4s
│           ├── seg-3.m4s
│           ├── seg-4.m4s
│           ├── seg-5.m4s
│           ├── seg-6.m4s
│           ├── seg-7.m4s
│           └── seg-8.m4s
├── stream.mpd
└── video
    └── avc1
        ├── init.mp4
        ├── seg-1.m4s
        ├── seg-2.m4s
        ├── seg-3.m4s
        ├── seg-4.m4s
        ├── seg-5.m4s
        ├── seg-6.m4s
        └── seg-7.m4s

2.3 DASH 數(shù)據(jù)播放

DASH 數(shù)據(jù),可以通過(guò) VLC 播放器打開(kāi) stream.mpd 文件播放支示,以驗(yàn)證是否正常:

image.png

3 fMP4 格式

fMP4 主要組成:ftyp + Movie Metadata * Fragment * N

image.png

可以通過(guò) MP4Box 或者 ISOViewer 查看 fMP4 文件格式刊橘,與 MP4 重復(fù)的內(nèi)容這里就不重復(fù)陳述。

image.png

3.1 moov:mvex

mvex 是 fMP4 的標(biāo)準(zhǔn) box颂鸿,作用是告訴解碼器這是一個(gè)fMP4的文件促绵,具體的 samples 信息內(nèi)容不再放到 trak 里面,而是在每一個(gè) moof 中嘴纺。

image.png

mehd:查看分片的時(shí)長(zhǎng)等信息

trex:給 fMP4 的 sample 設(shè)置默認(rèn)值

3.2 moof:traf

Track Fragment Box败晴,存在 tfhd、tfdt栽渴、sdtp尖坤、trun 的容器。

image.png

3.2.1 tfhd

Track Fragment Header Box闲擦,主要是對(duì)指定的 trak進(jìn)行相關(guān)的默認(rèn)設(shè)置慢味。

3.2.2 tfdt

Track Fragment Decode Time Box场梆,存放相關(guān) sample 編碼的絕對(duì)時(shí)間的。因?yàn)?fMP4 是流式的格式纯路,所以不像 MP4一樣
可以直接根據(jù) sample 直接 seek 到具體位置或油。這里就需要一個(gè)標(biāo)準(zhǔn)時(shí)間參考,來(lái)快速定位都某個(gè)具體的 fragment驰唬。

3.2.3 sdtp

Independent and Disposable Samples Box顶岸,主要是用來(lái)描述具體某個(gè) sample 是否是 i 幀,是否是 leading frame 等相關(guān)屬性值叫编,
主要用來(lái)作為當(dāng)進(jìn)行點(diǎn)播回放時(shí)的同步參考信息蜕琴,不是必須 Box。

3.2.4 trun

Track Fragment Run Box宵溅,存儲(chǔ)該 moof 里面相關(guān)的 sample 內(nèi)容凌简。例如,每個(gè) sample 的 size恃逻、 duration雏搂、offset等。

4 fMP4 優(yōu)勢(shì)

4.1 Trick-play

實(shí)現(xiàn) Trick-play(快進(jìn)寇损、快退凸郑、慢動(dòng)作等)支持,需要快速找到播放流中的關(guān)鍵幀矛市,依據(jù) fMP4 的特征芙沥,保證每個(gè)分片以 IDR 幀開(kāi)始的,這就使得上述的方案實(shí)現(xiàn)非常簡(jiǎn)單浊吏。相對(duì) TS 流時(shí)而昨,沒(méi)有辦法保證關(guān)鍵幀的所在位置,需要解析多個(gè) TS Packets 才能找到關(guān)鍵幀的位置找田,fMP4 具體更快的優(yōu)勢(shì)歌憨。

image.png

4.2 無(wú)縫碼流切換

無(wú)縫碼流切換的關(guān)鍵在于:當(dāng)?shù)谝粋€(gè)碼流播放結(jié)束時(shí),也就是發(fā)生切換的時(shí)間墩衙,第二個(gè)碼流一定要以關(guān)鍵幀開(kāi)始播放务嫡。

比如 TS 流因?yàn)椴荒鼙WC每個(gè) chunk 一定以關(guān)鍵幀開(kāi)始,碼流切換需要同時(shí)下載兩個(gè)碼流的相應(yīng)分片漆改,并同時(shí)解析兩個(gè)碼流心铃,找到關(guān)鍵幀對(duì)應(yīng)的位置才能切換。如果網(wǎng)絡(luò)不好時(shí)挫剑,切換低碼流時(shí)同時(shí)下載兩個(gè)碼流去扣,會(huì)使卡頓變得更加明顯。

fMP4中暮顺,保證每個(gè)分片以 IDR 幀開(kāi)始的厅篓,還保證不同碼流的分片在時(shí)間線上是對(duì)齊的秀存。而且 fMP4 流音頻視頻數(shù)據(jù)分開(kāi)存儲(chǔ)捶码,視頻和音頻的同步點(diǎn)可以不一樣羽氮,視頻可以以 GOP 邊界作為同步點(diǎn),音頻可以以 sync frame 作為同步點(diǎn)惫恼,使得無(wú)縫碼流切換更簡(jiǎn)單档押。無(wú)縫碼流切換流程參看下圖:

image.png

5 fMP4 與 CMAF

CMAF(Common Media Application Format)是由 Microsoft、Apple祈纯、MLBAM令宿、Akamai 等多媒體行業(yè)巨頭向 MPEG 提出并于 2017 年獲批準(zhǔn)的國(guó)際標(biāo)準(zhǔn)。旨在解決媒體擴(kuò)展性腕窥、傳輸?shù)脱舆t粒没、內(nèi)容可緩存性等通用問(wèn)題的綜合性解決方案,降低流媒體傳輸?shù)某杀疽约疤嵘脩趔w驗(yàn)簇爆。

相對(duì) fMP4癞松,需要下載整個(gè)片段才能播放。使用 CMAF 的分塊編碼入蛆,加載到第一個(gè)分塊即可播放响蓉,可以邊下邊播放,因此可實(shí)現(xiàn)更低時(shí)延的傳輸哨毁。

它們的本質(zhì)區(qū)別是:fMP4 是切片文件流枫甲,CMAF 則是連續(xù)流。

image.png

6 參考文章

  1. Fun with Container Formats – Part 2
  2. MPEG-DASH (Dynamic Adaptive Streaming over HTTP)
  3. HTTP Live Streaming
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末扼褪,一起剝皮案震驚了整個(gè)濱河市想幻,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌话浇,老刑警劉巖举畸,帶你破解...
    沈念sama閱讀 206,839評(píng)論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異凳枝,居然都是意外死亡抄沮,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,543評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門岖瑰,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)叛买,“玉大人,你說(shuō)我怎么就攤上這事蹋订÷收酰” “怎么了?”我有些...
    開(kāi)封第一講書人閱讀 153,116評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵露戒,是天一觀的道長(zhǎng)椒功。 經(jīng)常有香客問(wèn)我捶箱,道長(zhǎng),這世上最難降的妖魔是什么动漾? 我笑而不...
    開(kāi)封第一講書人閱讀 55,371評(píng)論 1 279
  • 正文 為了忘掉前任丁屎,我火速辦了婚禮,結(jié)果婚禮上旱眯,老公的妹妹穿的比我還像新娘晨川。我一直安慰自己,他們只是感情好删豺,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,384評(píng)論 5 374
  • 文/花漫 我一把揭開(kāi)白布共虑。 她就那樣靜靜地躺著,像睡著了一般呀页。 火紅的嫁衣襯著肌膚如雪妈拌。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書人閱讀 49,111評(píng)論 1 285
  • 那天蓬蝶,我揣著相機(jī)與錄音尘分,去河邊找鬼。 笑死疾党,一個(gè)胖子當(dāng)著我的面吹牛音诫,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播雪位,決...
    沈念sama閱讀 38,416評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼竭钝,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了雹洗?” 一聲冷哼從身側(cè)響起香罐,我...
    開(kāi)封第一講書人閱讀 37,053評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎时肿,沒(méi)想到半個(gè)月后庇茫,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,558評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡螃成,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,007評(píng)論 2 325
  • 正文 我和宋清朗相戀三年旦签,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片寸宏。...
    茶點(diǎn)故事閱讀 38,117評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡宁炫,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出氮凝,到底是詐尸還是另有隱情羔巢,我是刑警寧澤,帶...
    沈念sama閱讀 33,756評(píng)論 4 324
  • 正文 年R本政府宣布,位于F島的核電站竿秆,受9級(jí)特大地震影響启摄,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜幽钢,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,324評(píng)論 3 307
  • 文/蒙蒙 一歉备、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧搅吁,春花似錦威创、人聲如沸落午。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 30,315評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)溃斋。三九已至界拦,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間梗劫,已是汗流浹背享甸。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 31,539評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留梳侨,地道東北人蛉威。 一個(gè)月前我還...
    沈念sama閱讀 45,578評(píng)論 2 355
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像走哺,于是被迫代替她去往敵國(guó)和親蚯嫌。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,877評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容