HLS同時支持流媒體的實時廣播和點播服務(wù)江醇。同時也支持不同bit速率的多個備用流润梯,允許根據(jù)當(dāng)前網(wǎng)絡(luò)的寬度去智能調(diào)整當(dāng)前使用的視頻流质况。
安全方面横堡,HLS提供了通過HTTPS加密對媒體文件進(jìn)行加密并對用戶進(jìn)行驗證,允許視頻發(fā)布者去保護(hù)自己的網(wǎng)絡(luò)谴返。
當(dāng)媒體流正在播放時煞肾,客戶端可以選擇從許多不同的備用源中以不同的速率下載同樣的資源,允許流媒體會話適應(yīng)不同的數(shù)據(jù)速率嗓袱。在開始一個流媒體會話時籍救,客戶端會下載一個包含元數(shù)據(jù)的extended M3U(m3u8) playlist文件,用于尋找可用的媒體流渠抹。
當(dāng)你的直播內(nèi)容持續(xù)10分鐘或者每五分鐘內(nèi)超過5M時蝙昙,你的APP直播服務(wù)必須采用HLS架構(gòu),否則不允許上架梧却。
HLS架構(gòu):
其中輸入視頻源是由攝像機預(yù)先錄制好的奇颠,之后這些源會被編碼MPEG-4(H.264視頻 ;AAC 音頻)格式放航,然后用硬件打包到MPEG-2的傳輸流中烈拒。MPEG-2傳輸流會被分散為小片段然后保存為一個或多個系列的.ts格式的媒體文件。這個過程需要借助編碼工具來完成广鳍,比如Apple stream segmenter荆几。
純音頻會被編碼為一些音頻小片段,通常為ADTS頭的AAC赊时、MP3或者AC-3格式吨铸。
上面提及的切片器(segmenter)也會創(chuàng)建一個索引文件,通常會包含這些媒體文件的一個列表蛋叼,也能包含元數(shù)據(jù)焊傅。他一般都是一個.M3U8的列表剂陡,列表元素會關(guān)聯(lián)一個URL用于客戶端訪問狈涮,然后按序去請求這些URL狐胎。
服務(wù)器端可以采用硬件編碼和軟件編碼兩種形式,其功能都是按照上文描述的規(guī)則對現(xiàn)有的媒體文件進(jìn)行切片并使用索引文件進(jìn)行管理歌馍。
媒體編碼器獲取到音視頻設(shè)備的實時信號握巢,將其編碼后壓縮用于傳輸。而編碼格式必須配置為客戶端所支持的格式松却,比如H.264視頻和ACC音頻暴浦。當(dāng)前,支持用于視頻的MPEG-2傳輸流和純音頻MPEG基本流晓锻。編碼器通過本地網(wǎng)絡(luò)將MPEG-2傳輸流分發(fā)出去歌焦,送到流切片器那里。標(biāo)準(zhǔn)傳輸流和壓縮傳輸流無法混合使用砚哆。
流切片器(通常是一個軟件)會通過本地網(wǎng)絡(luò)從上面的媒體編碼器中讀取數(shù)據(jù)独撇,然后將這些數(shù)據(jù)切割為一組相等的時間間隔的媒體文件,雖然每一個片段都是一個單獨的文件躁锁,但是它們的來源是一個連續(xù)的流纷铣,切完照樣可以無縫重構(gòu)回去。
媒體片段是由切片器生成的战转,基于編碼后的媒體源搜立,并且是由一些列的.ts格式的文件組成,其中包含了你想通過MPEG-2傳送流攜帶的H.264視頻和AAC/MP3/AC-3音頻槐秧。對于純音頻的廣播啄踊,切片器可以生產(chǎn)MPEG基礎(chǔ)音頻流,其中包含了ADTS頭的AAC刁标、MP3颠通、AC3等音頻。
在編碼中途命雀,不要修改視頻編碼器的設(shè)置蒜哀,比如視頻大小或者編碼解碼器類型,如果避免不了吏砂,那修改動作必須發(fā)生在一個片段邊界撵儿。并且需要在之后相連的片段上用EXT-X-DISCONTINUITY進(jìn)行標(biāo)記。
索引文件(PlayLists)通常由切片器附帶生成狐血,保存為.M3U8格式淀歇,.m3u格式用于MP3音頻的索引文件。
下面這個.m3u8的playlist文件樣例匈织,其中包含了13個沒有加密的12秒鐘的媒體文件浪默。
分布式部分
分布式系統(tǒng)是一個網(wǎng)絡(luò)服務(wù)或者一個網(wǎng)絡(luò)緩存系統(tǒng)牡直,用于通過HTTP向客戶端發(fā)送媒體文件和索引文件。不用自定義模塊發(fā)送內(nèi)容功能纳决,僅需要簡單的網(wǎng)絡(luò)配置即可使用碰逸,這種配置就是限定.M3U8文件和.ts文件的MIME類型。
客戶端部分
客戶端開始時會去抓取索引文件(.m3u8/.m3u)阔加,其中用URL來標(biāo)記不同的流饵史。索引文件可以指定可用媒體文件的位置,解密的密鑰胜榔,以及任何可以切換的流胳喷。對于選中的流,客戶端會有序的下載每一個可獲得的文件夭织。每一個文件都包含流中的連環(huán)碎片吭露。一旦下載到足夠量的數(shù)據(jù),客戶端會開始向用戶展示重新裝配好的媒體資源尊惰。
客戶端負(fù)責(zé)抓取任何解密密鑰讲竿、認(rèn)證或者展示一個用于認(rèn)證的界面,之后再解密需要的文件择浊。這個過程會一直持續(xù)戴卜,直到出現(xiàn)結(jié)束標(biāo)記#EXT-X-ENDLIST。如果結(jié)束標(biāo)記不出現(xiàn)琢岩,該索引就是用于持續(xù)廣播的投剥,客戶端會定期的加載一些新的索引文件〉?祝客戶端會從新更新的索引文件中去查找加密密鑰江锨,并且將關(guān)聯(lián)的URL加入到請求隊列中去。
會話模式
通常包含Live和VOD兩種
點播VOD的特點就是可以獲取到一個靜態(tài)的索引文件糕篇,其中那個包含一套完整的資源文件地址啄育。這種模式允許客戶端訪問全部節(jié)目。VOD點播擁有先進(jìn)的下載技術(shù)拌消,包括加密認(rèn)證技術(shù)和動態(tài)切換文件傳輸速率的功能(用于不同分辨率視頻之間的切換)挑豌。
Live會話就是實時時間的錄制展示,它的索引文件一直處于動態(tài)變化的墩崩,你需要不斷的更新索引文件playlist氓英,然后移除舊的索引文件。這種類型通過向索引文件添加媒體地址就很容易的轉(zhuǎn)化為VOD類型鹦筹。在轉(zhuǎn)化時不要移除原來舊的源铝阐,而是通過添加一個#EXT-X-ENDLIST標(biāo)記來終止實時事件。轉(zhuǎn)化時如果你的索引文件中包含EXT-X-PLAYLIST-TYPE標(biāo)簽铐拐,你需要將值從EVENT改為VOD徘键。
流切換
如果你的視頻具備流切換功能练对,這對用戶來說是一個非常棒的體驗,處于不同的帶寬吹害、不同的網(wǎng)速播放不同清晰度的視頻流螟凭,如此智能的流切換會讓用戶感覺到非常流暢的觀影體驗,同時不同的設(shè)備也可以作為選擇的條件赠制,比如視網(wǎng)膜屏可以在網(wǎng)速良好的情況下播放清晰度更高的視頻流赂摆。
這種功能的實現(xiàn)在于挟憔,索引文件的特殊結(jié)構(gòu):
具備流切換的索引通常由主索引和鏈接不同寬帶速率的資源的子索引構(gòu)成钟些,由子索引再鏈接對應(yīng)的.ts視頻切片文件。其中主索引只下載一次绊谭,而子索引則會不定期的下載政恍,通常會先使用主索引中列出的第一個子索引,之后才會根據(jù)當(dāng)時的網(wǎng)絡(luò)情況去動態(tài)切換適合的流达传「莺模客戶端會在任何時間去切換不同的流,比如連入或者退出一個wifi熱點宪赶。所有的切換都會使用相同的音頻文件宗弯,在不同的流之間平滑的進(jìn)行切換。
這一套不同速率的視頻都是由工具生成的搂妻。
HLS小結(jié):
加油~