流媒体之HLS——综述
[時(shí)間:2018-01] [狀態(tài):Open]
[關(guān)鍵詞:流媒體,stream,HLS]
0 HLS背景及初衷
HLS是由蘋果公司發(fā)起的流媒體網(wǎng)絡(luò)傳輸協(xié)議,可參考rfc8261 HTTP Live Streaming。它的工作原理是把整個(gè)流分成一個(gè)個(gè)小的基于HTTP的文件來下載,每次只下載一些。當(dāng)媒體流正在播放時(shí),客戶端可以選擇從許多不同的備用源中以不同的速率下載同樣的資源,允許流媒體會(huì)話適應(yīng)不同的數(shù)據(jù)速率。在開始一個(gè)流媒體會(huì)話時(shí),客戶端會(huì)下載一個(gè)包含元數(shù)據(jù)的extended M3U (m3u8) playlist文件,用于尋找可用的媒體流。
HLS只請(qǐng)求基本的HTTP報(bào)文,與實(shí)時(shí)傳輸協(xié)議(RTP)不同,HLS可以穿過任何允許HTTP數(shù)據(jù)通過的防火墻或者代理服務(wù)器。它也很容易使用內(nèi)容分發(fā)網(wǎng)絡(luò)來傳輸媒體流。
在網(wǎng)上已經(jīng)有很多關(guān)于HLS的資料,本文主要按照我的理解整理下HLS流媒體協(xié)議基礎(chǔ)知識(shí)。
0.1 HLS協(xié)議格式要求
視頻的封裝格式TS
保存ts索引的m3u8文件
視頻的編碼格式:H264 (只要MPEG-TS支持,基本都可以,只是有些格式不是免費(fèi)的;音頻類似)
音頻的編碼格式:AAC、MP3、AC-3
0.2 HLS優(yōu)勢(shì)
使用標(biāo)準(zhǔn)HTTP傳輸數(shù)據(jù),具有較好的網(wǎng)絡(luò)穿透及防屏蔽性,更易于內(nèi)容分發(fā)網(wǎng)絡(luò)傳輸。
HLS協(xié)議本身是支持碼率自適應(yīng)的,客戶端可以根據(jù)實(shí)際網(wǎng)絡(luò)狀況切換到合適的碼率播放。
HLS內(nèi)容發(fā)布服務(wù)更簡(jiǎn)單,對(duì)系統(tǒng)設(shè)備要求較低,更容易實(shí)現(xiàn)負(fù)載均衡,并且HLS是無狀態(tài)協(xié)議的HTTP,客戶端只需要下載即可。
0.3 HLS劣勢(shì)
延時(shí)較大,尤其是在直播的情況下,很難做到10s以內(nèi)的延時(shí)(不排除網(wǎng)上各種改進(jìn)版本及算法)。
內(nèi)容生成時(shí)對(duì)編碼端性能要求較高。
1 HLS系統(tǒng)及基本架構(gòu)
HLS支持直播或者點(diǎn)播,同時(shí)支持加密和認(rèn)證。從概念上來說,HTTP通常包括三部分:服務(wù)器端、發(fā)布端、客戶端。
1.1 HLS服務(wù)器端
服務(wù)器端主要負(fù)責(zé)將輸入的媒體數(shù)據(jù)進(jìn)行編碼、封裝,并將封裝之后的文件切片,以滿足發(fā)布端的要求。其輸出可以是音視頻原始數(shù)據(jù),也可以是編碼之后的數(shù)據(jù),也可以是封裝好的TS數(shù)據(jù)。這也輸入最終會(huì)通過分片工具切分成發(fā)布端需要的格式。這里涉及三部分:
多媒體編碼器 (Media Encoder)
多媒體編碼器主要把采集自音視頻設(shè)備的實(shí)時(shí)信號(hào)編碼,封裝。編碼中必須選擇客戶端支持的格式,比如h264視頻+aac音頻。目前HLS支持的封裝格式是MPEG-TS或者M(jìn)PEG基本流(MPEG-ES,僅支持純音頻)。編碼完成之后,編碼器可以把封裝之后的格式通過本地網(wǎng)絡(luò)或者其他機(jī)制傳遞給分片工具(segmenter)。
分片工具(segmenter)
按照輸入源的不同,通常分為流分片器、文件分片器。
顧名思義,二者主要區(qū)別在于輸入的文件格式上:流分片器輸出的是從本地網(wǎng)絡(luò)滴入的MPEG-TS流,而文件分片器處理的是封裝好的TS文件。它們的工作原理類似:將MPEG-TS切分成一系列等時(shí)長(zhǎng)的媒體文件,但保證這些小的分片是可以無縫重建的,播放時(shí)音視頻是連續(xù)的。
分片工具還會(huì)創(chuàng)建索引文件(.M3U8),其中包含指向單獨(dú)媒體文件的索引信息。每當(dāng)分片器完成一個(gè)新的媒體文件,它將更新索引文件。該索引用于記錄媒體文件的位置及可訪問性。在此過程中,分片工具可以加密每個(gè)分片,并為其創(chuàng)建密鑰文件。
下文會(huì)詳細(xì)介紹.M3U8的格式。
1.2 HLS分發(fā)端
HLS分發(fā)端較為簡(jiǎn)單,只要使用標(biāo)準(zhǔn)的網(wǎng)絡(luò)服務(wù)器即可。它們負(fù)責(zé)接受客戶端請(qǐng)求,并將處理好的多媒體文件和資源發(fā)送給客戶端。如果并發(fā)量較大,可能需要邊緣網(wǎng)絡(luò)或其他內(nèi)容分發(fā)網(wǎng)絡(luò)。
分發(fā)系統(tǒng)是一個(gè)web服務(wù)器或者web緩存系統(tǒng),它們能夠通過HTTP向客戶端發(fā)送媒體文件及索引文件。多數(shù)情況下,分發(fā)內(nèi)容之前無需額外配置服務(wù)器、模塊,僅需很少的配置就在web服務(wù)器上正常工作。對(duì)于詳細(xì)的配置建議參考Deploying HTTP Live Streaming。
1.3 HLS客戶端
客戶端負(fù)責(zé)選擇合適的請(qǐng)求資源,下載器資源,然后解碼顯示(整成播放器的功能)。
客戶端從獲取索引文件開始,通常使用給定的URL來識(shí)別該流的信息。這個(gè)索引文件一般給出了可用媒體文件、解密密鑰和其他可選流的位置。客戶端選定流之后,就開始順序下載每個(gè)可用的媒體文件。每個(gè)文件中包含特定流的連續(xù)分片。只要客戶端下載到足夠的數(shù)據(jù),就可以開始解碼數(shù)據(jù)并顯示了。
如果需要,客戶端負(fù)責(zé)讀取所有解密密鑰、認(rèn)證或?yàn)橛脩籼峁┯糜谡J(rèn)證或解密的接口。
客戶端可以一直持續(xù)這個(gè)過程,直到它遇到索引文件中的#EXT-X-ENDLIST標(biāo)簽;若不存在該標(biāo)簽,則表示該索引文件是一個(gè)直播源,客戶端需要定期更新索引文件,重復(fù)上述過程。
較為常用的HLS系統(tǒng)中,使用硬編碼器將輸入的音頻編碼為AAC、將輸入的視頻編碼為h264,并將二者復(fù)用到MPEG-TS中,之后使用分片工具將其切分為一系列小的ts文件;這些文件將可以放到web服務(wù)器上。分片工具同時(shí)會(huì)創(chuàng)建并維護(hù)一個(gè)索引文件(HLS中稱為.M3U8),其中包含可用媒體文件的列表。索引文件的URL會(huì)在web服務(wù)器上發(fā)布??蛻舳丝梢宰x取該索引文件,然后順序請(qǐng)求列出的媒體文件,這些分片可以無縫播放。一個(gè)典型的系統(tǒng)配置如下圖:
HLS也支持純音頻格式,通常是MPEG基本音頻文件,比如帶有ADTS頭的AAC、MP3或者AC-3。
(未完待續(xù))
總結(jié)
以上是生活随笔為你收集整理的流媒体之HLS——综述的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: js 判断window操作系统 2种方法
- 下一篇: ant使用指南详细入门教程