Android視頻開(kāi)發(fā)進(jìn)階(part4-自適應(yīng)視頻播放技術(shù)(Adaptive Streaming))

好久沒(méi)有更新了多矮,這次來(lái)簡(jiǎn)單的介紹一下自適應(yīng)視頻播放的相關(guān)技術(shù)。

說(shuō)到自適應(yīng)視頻播放(Adaptive Streaming)哈打,網(wǎng)上的資料不多塔逃,可以供大家測(cè)試的視頻播放器也沒(méi)有多少,所以很多朋友都無(wú)從下手學(xué)習(xí)料仗。這次來(lái)給大家分享一下自適應(yīng)視頻播放技術(shù)的基礎(chǔ)原理湾盗,具體實(shí)現(xiàn)可以參考Exoplayer的源碼,這篇文章也會(huì)稍微介紹一下格粪。


1.自適應(yīng)視頻播放技術(shù)的原理

首先,我們所謂的自適應(yīng)視頻播放技術(shù)中的自適應(yīng)颜阐,適應(yīng)的到底是什么呢平窘?

在在線視頻播放中凳怨,最重要的一個(gè)要素應(yīng)該就屬于客戶端的網(wǎng)絡(luò)狀況了瑰艘,如果網(wǎng)絡(luò)狀況很差,俗稱的網(wǎng)速很慢肤舞,那么大家一般的體驗(yàn)都是視頻很卡拇泛,看一會(huì)就停一會(huì)。那么有沒(méi)有可能讓我們的播放器自動(dòng)檢測(cè)網(wǎng)絡(luò)狀況拌禾,在網(wǎng)絡(luò)差的情況下播放清晰度較差,數(shù)據(jù)量較小的視頻,當(dāng)網(wǎng)絡(luò)情況變得好的時(shí)候播放清晰度好嘁捷,但是數(shù)據(jù)量大的視頻呢?

哈哈答案是肯定的现诀,自適應(yīng)視頻播放技術(shù)就解決了這個(gè)問(wèn)題。先給大家看一個(gè)前端播放器的示意圖。

通常來(lái)講,自適應(yīng)播放技術(shù)一般包括前端的支持還有后臺(tái)的支持奴艾,后臺(tái)提供一個(gè)索引表(Manifest)潭苞,上面記錄了同一個(gè)視頻不同清晰度的版本的Url(比如視頻的240p,480p秀菱,720p不同的版本文件)衍菱。前端的播放器在拿到這個(gè)索引表之后,會(huì)根據(jù)自身的網(wǎng)絡(luò)狀態(tài)肩豁,在不同清晰度直接的視頻文件轉(zhuǎn)換脊串。

就如上圖所示辫呻,橫軸是時(shí)間,豎軸是清晰度琼锋。在示例里面放闺,我們有三種不同清晰度的視頻文件,同時(shí)每個(gè)視頻文件一般是切割成以五秒或者十秒為一個(gè)單位的塊(Chunk)缕坎,每次播放器加載播放都是以塊為單位怖侦。

所以說(shuō)到底,自適應(yīng)視頻并不是同一個(gè)容器文件(container)里面封裝了所有視頻軌道數(shù)據(jù)(當(dāng)然理論上來(lái)說(shuō)也不是不行),而是根據(jù)索引表的內(nèi)容谜叹,和自身網(wǎng)絡(luò)的下載速度決定播放哪一個(gè)具體的容器文件罷了匾寝。


2.自適應(yīng)視頻播放的規(guī)范

現(xiàn)在市面上的Adaptive Streaming肯定以??的HLS,還有另一個(gè)叫DASH的規(guī)范最為流行荷腊,我們這次以DASH這個(gè)規(guī)范來(lái)深入了解一下自適應(yīng)視頻播放的一些細(xì)節(jié)艳悔。

2.1 DASH里面的MPD文件

MPD文件格式,就是我們?cè)诘谝徊糠种姓f(shuō)到的索引表Manifest了(HLS對(duì)應(yīng)的索引表格式叫M3u8),它包含了所有DASH自適應(yīng)視頻的信息女仰。
我們以一個(gè)mpd為例子猜年,點(diǎn)擊這里下載。

讓我們用xml reader來(lái)看看具體里面有什么內(nèi)容:

2.1.1 adaptionset

每個(gè)mpd文件都會(huì)有至少一個(gè)adaptionset,用來(lái)記錄音頻/視頻文件們的位置疾忍,如上圖所示乔外,該MPd有兩組數(shù)據(jù),一組是視頻一罩,一組是音頻

2.1.2 representation

每個(gè)adaptionset里面又會(huì)有多個(gè)representation杨幼,每一個(gè)representation其實(shí)就是代表了一個(gè)分辨率的視頻(或者音頻,這里主要以視頻講解為主)擒抛。最重要的三個(gè)參數(shù)我都打上了注解推汽,注意到視頻的url是相對(duì)Url补疑,也就是相對(duì)于該mpd文件的位置歧沪。比如第一個(gè)mp4文件絕對(duì)地址就是mpd的path+file name = http://yt-dash-mse-test.commondatastorage.googleapis.com/media/car-20120827-88.mp4

2.2 DASH對(duì)播放器行為的規(guī)范

mpd文件相信大家也有大致的了解了,那么播放器既然有了mpd文件莲组,那怎么進(jìn)行視頻文件的選擇呢诊胞?

其實(shí)很簡(jiǎn)單,大家都看到了不同的representation都有一個(gè)bandwith的參數(shù)锹杈,這個(gè)參數(shù)規(guī)定了要使用該視頻文件的最低帶寬(如果沒(méi)記錯(cuò)應(yīng)該是以bit為單位撵孤。

以上述mpd為例竭望,視頻分辨率由高到低的bandwith排列是:4190760 bit(4.2MB/s) ,2073921 bit(2.1 MB/s) , 869460 bit(0.9MB/s)....... 播放器每下載一些內(nèi)容邪码,都會(huì)計(jì)算當(dāng)前的下載速度,然后根據(jù)當(dāng)前的下載速度咬清,從最高的分辨率開(kāi)始闭专,一路遍歷直到找到合適的視頻文件奴潘。

這里附上一段ExoPlayer的源代碼,可以更加清晰的了解播放器怎么選擇不同分辨率(其實(shí)代碼非常的簡(jiǎn)單)

2.3 DASH - Fragmented MP4

我們?cè)诘谝徊糠终f(shuō)過(guò)影钉,自適應(yīng)視頻的文件會(huì)被切割成塊画髓,但是貌似我們看到的都是完整的mp4文件呀,說(shuō)好的切割呢平委?

在DASH規(guī)范中奈虾,每個(gè)mp4都不是普通的mp4,而是一種叫Fragmented Mp4廉赔,中文可以翻譯為分段式MP4文件肉微。它的特殊之處在于,一般的mp4視頻都是一個(gè)moov header昂勉,后面跟上一組mdat數(shù)據(jù)(不清楚文件結(jié)構(gòu)可以參考我的第一篇文章)浪册,而fragmented MP4則會(huì)將視頻數(shù)據(jù)分為多個(gè)mdat塊。

我們用mp4 parser 來(lái)分析一下

上圖是一個(gè)普通的mp4文件

上圖則是一個(gè)分段式的mp4文件岗照,我們可以看到文件的mdat被分為了若干塊村象,同時(shí)還有多一個(gè)sdix header,這個(gè)header記錄了每個(gè)mdat的位置和相應(yīng)的大小攒至,和時(shí)間的長(zhǎng)度(一般每個(gè)mdat的時(shí)間長(zhǎng)度都一樣厚者,為若干秒)

3.播放器對(duì)應(yīng)的細(xì)節(jié)

(略)。迫吐。库菲。

這次就稍微分享一下自適應(yīng)視頻的大概原理,具體的技術(shù)志膀,例如播放器如何進(jìn)行下載的控制熙宇,下載單位是什么,等等會(huì)在之后對(duì)ExoPlayer源碼的分析中分享溉浙,如果有著急的問(wèn)題可以留言烫止。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市戳稽,隨后出現(xiàn)的幾起案子馆蠕,更是在濱河造成了極大的恐慌,老刑警劉巖惊奇,帶你破解...
    沈念sama閱讀 216,919評(píng)論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件互躬,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡颂郎,警方通過(guò)查閱死者的電腦和手機(jī)吼渡,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,567評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)乓序,“玉大人寺酪,你說(shuō)我怎么就攤上這事舟奠。” “怎么了房维?”我有些...
    開(kāi)封第一講書(shū)人閱讀 163,316評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵沼瘫,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我咙俩,道長(zhǎng)耿戚,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,294評(píng)論 1 292
  • 正文 為了忘掉前任阿趁,我火速辦了婚禮膜蛔,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘脖阵。我一直安慰自己皂股,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,318評(píng)論 6 390
  • 文/花漫 我一把揭開(kāi)白布命黔。 她就那樣靜靜地躺著呜呐,像睡著了一般。 火紅的嫁衣襯著肌膚如雪悍募。 梳的紋絲不亂的頭發(fā)上蘑辑,一...
    開(kāi)封第一講書(shū)人閱讀 51,245評(píng)論 1 299
  • 那天,我揣著相機(jī)與錄音坠宴,去河邊找鬼洋魂。 笑死,一個(gè)胖子當(dāng)著我的面吹牛喜鼓,可吹牛的內(nèi)容都是我干的副砍。 我是一名探鬼主播,決...
    沈念sama閱讀 40,120評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼庄岖,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼豁翎!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起顿锰,我...
    開(kāi)封第一講書(shū)人閱讀 38,964評(píng)論 0 275
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤谨垃,失蹤者是張志新(化名)和其女友劉穎启搂,沒(méi)想到半個(gè)月后硼控,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,376評(píng)論 1 313
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡胳赌,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,592評(píng)論 2 333
  • 正文 我和宋清朗相戀三年牢撼,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片疑苫。...
    茶點(diǎn)故事閱讀 39,764評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡熏版,死狀恐怖纷责,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情撼短,我是刑警寧澤再膳,帶...
    沈念sama閱讀 35,460評(píng)論 5 344
  • 正文 年R本政府宣布,位于F島的核電站曲横,受9級(jí)特大地震影響喂柒,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜禾嫉,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,070評(píng)論 3 327
  • 文/蒙蒙 一灾杰、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧熙参,春花似錦艳吠、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,697評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至黍匾,卻和暖如春题禀,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背膀捷。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,846評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工迈嘹, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人全庸。 一個(gè)月前我還...
    沈念sama閱讀 47,819評(píng)論 2 370
  • 正文 我出身青樓秀仲,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親壶笼。 傳聞我的和親對(duì)象是個(gè)殘疾皇子神僵,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,665評(píng)論 2 354

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