流媒體DASH簡(jiǎn)介及使用方法(FFmpeg, MP4Box)(轉(zhuǎn))

網(wǎng)頁(yè)端的視頻觀看體驗(yàn)存在以下問(wèn)題:

  1. 切換畫質(zhì)(1080P/高清/標(biāo)清)時(shí)默垄,播放器會(huì)黑屏,并回退到關(guān)鍵幀重新播放朦前。
  2. 不能根據(jù)網(wǎng)絡(luò)狀況自適應(yīng)調(diào)整碼率(YouTube默認(rèn)啟用自適應(yīng)碼率,對(duì)照畫質(zhì)選項(xiàng)中的“Auto”)

要解決以上問(wèn)題春哨,需要引入流媒體解決方案棒仍。

DASH

為什么選擇DASH
YouTube采用DASH!其網(wǎng)頁(yè)端及移動(dòng)端APP都使用了DASH癞尚。DASH的其他采用者包括:Netflix, Hulu, …

什么是DASH

一種服務(wù)端乱陡、客戶端的流媒體解決方案:
服務(wù)端:
將視頻內(nèi)容分割為一個(gè)個(gè)分片,每個(gè)分片可以存在不同的編碼形式(不同的codec胳徽、profile爽彤、分辨率、碼率等)往核;
播放器端:
就可以根據(jù)自由選擇需要播放的媒體分片嚷节;可以實(shí)現(xiàn)adaptive bitrate streaming技術(shù)。不同畫質(zhì)內(nèi)容無(wú)縫切換衩婚,提供更好的播放體驗(yàn)效斑。

DASH中的重要概念

  • MPD
    媒體文件的描述文件(manifest),作用類似HLS的m3u8文件税娜。MPD文件以XML格式組織藏研,其層次結(jié)構(gòu)參圖1。

  • Representation
    對(duì)應(yīng)一個(gè)可選擇的輸出(alternative)弧岳。如,480p video涧卵,720p video, 44100采樣 audio腹尖,22050采樣audio,都使用Representation描述乐设。

  • Segment(分片)
    每個(gè)Representation會(huì)劃分為多個(gè)Segment绎巨。Segment分為4類,其中戈锻,最重要的是:Initialization Segment(每個(gè)Representation都包含1個(gè)Init Seg)和媳,Media Segment(每個(gè)Representation的媒體內(nèi)容包含若干Media Seg)留瞳!


    1.png

圖1. MPD的層次示意圖 (每個(gè)Rrepresentation使用fMP4文件格式)

fMP4

fMP4(fragmented MP4),可以簡(jiǎn)單理解為分片化的MP4,是DASH采用的媒體文件格式帝牡,文件擴(kuò)展名通常為(.m4s或直接用.mp4)蒙揣。

2.png

圖2. 普通MP4與fMP4組織結(jié)構(gòu)對(duì)比,fMP4與DASH 分片概念對(duì)照
圖2說(shuō)明:
普通MP4 由索引文件頭文件moov box和媒體數(shù)據(jù)mdat box組成罩息。
fMP4 由分片組成个扰,可以按整個(gè)文件存儲(chǔ)递宅,也可以按分片存儲(chǔ):

  • 如果按照單個(gè)文件存儲(chǔ)苍狰,每個(gè)輸出是一個(gè)m4s文件烘绽。 完整的fMP4視頻可以描述為如下形式:
    moov + (moof + mdat) * N
    其中moof box是分片(fragment)的標(biāo)識(shí), mdat box存放的是當(dāng)前分片的媒體數(shù)據(jù)翔忽;

  • 如果按照分片存儲(chǔ)盏檐,每個(gè)分片是一個(gè)m4s文件,輸出對(duì)應(yīng)了多個(gè)m4s贬丛。

fMP4中的第一個(gè)分片给涕,對(duì)應(yīng)了DASH協(xié)議中Initialization Segment够庙;其后的分片,則對(duì)應(yīng)Media Segment耘眨。

YouTube調(diào)研

一段15’ 720分辨率視頻剔难,YouTube有如下Representation:

  1. audio1 id:139 codec:HE-AAC 采樣率22050 分片:5
  2. audio2 id:140 codec:AAC-LC 采樣率44100 分片:5
  3. video1 id:133 codec:264 main profile level1.2 240p 分片:4
  4. video2 id:134 codec:264 main profile level2.0 360p 分片:4
  5. video3 id:135 codec:264 main profile level2.0 480p 分片:4
  6. video4 id:160 codec:264 main profile level1.1 144p 分片:4
  7. video5 id:136 codec:264 main profile level3.0 720p 分片:4

關(guān)注視頻部分,4個(gè)分片包含:1個(gè)Init Seg非迹,3個(gè)Media Seg纯趋,視頻內(nèi)容部分分別為5.12s 5.12s 4.76s。

正常順序播放


3.png

圖3. 正常順序播放的時(shí)序圖

(1)下載MPD
(2)下載Init Seg
(3)下載Media Seg(s)
在第6s已經(jīng)完成所有視頻分片的下載纯命。

切換行為

4.png

圖4. 發(fā)生switch的時(shí)序圖

切換前亿汞,Representation 0的所有分片已經(jīng)下載完成揪阿,交互流程同上匙铡,
第8s進(jìn)行畫質(zhì)切換:

  1. 下載Representation 1的Init Seg # 每次切換都會(huì)先下載Init Seg
  2. 下載Representation 1 當(dāng)前所在分片鳖眼!Seg2
  3. 下載后續(xù)分片嚼摩。

說(shuō)明:YouTube在播放Rep0 Seg2期間發(fā)生切換,會(huì)下載Repr1的Seg2愿卒,這屬于YouTube的播放策略潮秘。很多DASH播放器,此時(shí)會(huì)直接請(qǐng)求Repr1的Seg3枕荞。

DASH應(yīng)用

1)FFmpeg 轉(zhuǎn)碼
FFmpeg支持DASH封裝柜候,仿YouTube格式的命令:

ffmpeg -hide_banner -y -threads 0 -i INPUT_VIDEO -filter_complex 'split=2[s0][s1];[s0]scale=480:-2[480s];[s1]scale=360:-2[360s]' -map '[480s]' -c:v:0 libx264 -crf 25 -preset veryslow -map '[360s]' -c:v:1 libx264 -crf 27 -preset veryslow -map a -c:a:0 libfdk_aac -ar:a:0 22050 -map a -c:a:1 libfdk_aac -ar:a:1 44100 -g 150 -sc_threshold 0 -b_strategy 0 -min_seg_duration 5000 -use_timeline 0 -use_template 1 -single_file  1 -window_size 5 -adaptation_sets "id=0,streams=v id=1,streams=a" -f dash OUTPUT.mpd

輸出:

  • mpd描述文件
  • m4s 輸出文件
    視頻兩個(gè)文件分別是480p crf25 和360p crf 27。
    音頻兩個(gè)文件分別是22050采樣率和44100采樣率躏精。
    獨(dú)立文件內(nèi)部每個(gè)分片時(shí)長(zhǎng)5s渣刷。

2)FFmpeg 轉(zhuǎn)封裝

若存在兼容普通mp4轉(zhuǎn)碼的需求,可以直接對(duì)已編碼視頻轉(zhuǎn)封裝得到DASH文件矗烛,避免重復(fù)編碼辅柴。
要點(diǎn)在于保證編碼命令中的GOP length與DASH要求匹配,否則會(huì)發(fā)生卡頓問(wèn)題瞭吃,需要在播放器端做額外處理碌嘀。

3) MP4Box 轉(zhuǎn)封裝

mp4box -dash 5000 -frag 5000 -rap -frag-rap -profile dashavc264:onDemand ld.mp4 hd.mp4 audio.m4a -out OUTPUT.mpd

4)DASH播放

使用開(kāi)源的網(wǎng)頁(yè)端DASH player dash.js可以播放歪架,如下圖股冗。


5.png

圖5. 后臺(tái)轉(zhuǎn)碼的實(shí)際播放效果

原文:https://blog.csdn.net/yue_huang/article/details/78466537

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市牡拇,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌穆律,老刑警劉巖惠呼,帶你破解...
    沈念sama閱讀 206,968評(píng)論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異峦耘,居然都是意外死亡剔蹋,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,601評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門辅髓,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)泣崩,“玉大人少梁,你說(shuō)我怎么就攤上這事〗酶叮” “怎么了凯沪?”我有些...
    開(kāi)封第一講書人閱讀 153,220評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)买优。 經(jīng)常有香客問(wèn)我妨马,道長(zhǎng),這世上最難降的妖魔是什么杀赢? 我笑而不...
    開(kāi)封第一講書人閱讀 55,416評(píng)論 1 279
  • 正文 為了忘掉前任烘跺,我火速辦了婚禮,結(jié)果婚禮上脂崔,老公的妹妹穿的比我還像新娘滤淳。我一直安慰自己,他們只是感情好砌左,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,425評(píng)論 5 374
  • 文/花漫 我一把揭開(kāi)白布脖咐。 她就那樣靜靜地躺著,像睡著了一般绊困。 火紅的嫁衣襯著肌膚如雪文搂。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書人閱讀 49,144評(píng)論 1 285
  • 那天秤朗,我揣著相機(jī)與錄音煤蹭,去河邊找鬼。 笑死取视,一個(gè)胖子當(dāng)著我的面吹牛硝皂,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播作谭,決...
    沈念sama閱讀 38,432評(píng)論 3 401
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼稽物,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了折欠?” 一聲冷哼從身側(cè)響起贝或,我...
    開(kāi)封第一講書人閱讀 37,088評(píng)論 0 261
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎锐秦,沒(méi)想到半個(gè)月后咪奖,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,586評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡酱床,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,028評(píng)論 2 325
  • 正文 我和宋清朗相戀三年羊赵,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片扇谣。...
    茶點(diǎn)故事閱讀 38,137評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡昧捷,死狀恐怖闲昭,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情靡挥,我是刑警寧澤序矩,帶...
    沈念sama閱讀 33,783評(píng)論 4 324
  • 正文 年R本政府宣布,位于F島的核電站芹血,受9級(jí)特大地震影響贮泞,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜幔烛,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,343評(píng)論 3 307
  • 文/蒙蒙 一啃擦、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧饿悬,春花似錦令蛉、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 30,333評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至弟劲,卻和暖如春祷安,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背兔乞。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 31,559評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工汇鞭, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人庸追。 一個(gè)月前我還...
    沈念sama閱讀 45,595評(píng)論 2 355
  • 正文 我出身青樓霍骄,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親淡溯。 傳聞我的和親對(duì)象是個(gè)殘疾皇子读整,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,901評(píng)論 2 345

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