[時間:2018-01] [狀態:Open]
[關鍵詞:流媒體,stream,HLS]
0 HLS背景及初衷
HLS是由蘋果公司發起的流媒體網絡傳輸協議,可參考rfc8261 HTTP Live Streaming。它的工作原理是把整個流分成一個個小的基於HTTP的文件來下載,每次只下載一些。當媒體流正在播放時,客戶端可以選擇從許多不同的備用源中以不同的速率下載同樣的資源,允許流媒體會話適應不同的數據速率。在開始一個流媒體會話時,客戶端會下載一個包含元數據的extended M3U (m3u8) playlist文件,用於尋找可用的媒體流。
HLS只請求基本的HTTP報文,與實時傳輸協議(RTP)不同,HLS可以穿過任何允許HTTP數據通過的防火牆或者代理服務器。它也很容易使用內容分發網絡來傳輸媒體流。
在網上已經有很多關於HLS的資料,本文主要按照我的理解整理下HLS流媒體協議基礎知識。
0.1 HLS協議格式要求
- 視頻的封裝格式TS
- 保存ts索引的m3u8文件
- 視頻的編碼格式:H264 (只要MPEG-TS支持,基本都可以,只是有些格式不是免費的;音頻類似)
- 音頻的編碼格式:AAC、MP3、AC-3
0.2 HLS優勢
- 使用標准HTTP傳輸數據,具有較好的網絡穿透及防屏蔽性,更易於內容分發網絡傳輸。
- HLS協議本身是支持碼率自適應的,客戶端可以根據實際網絡狀況切換到合適的碼率播放。
- HLS內容發布服務更簡單,對系統設備要求較低,更容易實現負載均衡,並且HLS是無狀態協議的HTTP,客戶端只需要下載即可。
0.3 HLS劣勢
- 延時較大,尤其是在直播的情況下,很難做到10s以內的延時(不排除網上各種改進版本及算法)。
- 內容生成時對編碼端性能要求較高。
1 HLS系統及基本架構
HLS支持直播或者點播,同時支持加密和認證。從概念上來說,HTTP通常包括三部分:服務器端、發布端、客戶端。
1.1 HLS服務器端
服務器端主要負責將輸入的媒體數據進行編碼、封裝,並將封裝之后的文件切片,以滿足發布端的要求。其輸出可以是音視頻原始數據,也可以是編碼之后的數據,也可以是封裝好的TS數據。這也輸入最終會通過分片工具切分成發布端需要的格式。這里涉及三部分:
多媒體編碼器 (Media Encoder)
多媒體編碼器主要把采集自音視頻設備的實時信號編碼,封裝。編碼中必須選擇客戶端支持的格式,比如h264視頻+aac音頻。目前HLS支持的封裝格式是MPEG-TS或者MPEG基本流(MPEG-ES,僅支持純音頻)。編碼完成之后,編碼器可以把封裝之后的格式通過本地網絡或者其他機制傳遞給分片工具(segmenter)。
分片工具(segmenter)
按照輸入源的不同,通常分為流分片器、文件分片器。
顧名思義,二者主要區別在於輸入的文件格式上:流分片器輸出的是從本地網絡滴入的MPEG-TS流,而文件分片器處理的是封裝好的TS文件。它們的工作原理類似:將MPEG-TS切分成一系列等時長的媒體文件,但保證這些小的分片是可以無縫重建的,播放時音視頻是連續的。
分片工具還會創建索引文件(.M3U8),其中包含指向單獨媒體文件的索引信息。每當分片器完成一個新的媒體文件,它將更新索引文件。該索引用於記錄媒體文件的位置及可訪問性。在此過程中,分片工具可以加密每個分片,並為其創建密鑰文件。
下文會詳細介紹.M3U8的格式。
1.2 HLS分發端
HLS分發端較為簡單,只要使用標准的網絡服務器即可。它們負責接受客戶端請求,並將處理好的多媒體文件和資源發送給客戶端。如果並發量較大,可能需要邊緣網絡或其他內容分發網絡。
分發系統是一個web服務器或者web緩存系統,它們能夠通過HTTP向客戶端發送媒體文件及索引文件。多數情況下,分發內容之前無需額外配置服務器、模塊,僅需很少的配置就在web服務器上正常工作。對於詳細的配置建議參考Deploying HTTP Live Streaming。
1.3 HLS客戶端
客戶端負責選擇合適的請求資源,下載器資源,然后解碼顯示(整成播放器的功能)。
客戶端從獲取索引文件開始,通常使用給定的URL來識別該流的信息。這個索引文件一般給出了可用媒體文件、解密密鑰和其他可選流的位置。客戶端選定流之后,就開始順序下載每個可用的媒體文件。每個文件中包含特定流的連續分片。只要客戶端下載到足夠的數據,就可以開始解碼數據並顯示了。
如果需要,客戶端負責讀取所有解密密鑰、認證或為用戶提供用於認證或解密的接口。
客戶端可以一直持續這個過程,直到它遇到索引文件中的#EXT-X-ENDLIST標簽;若不存在該標簽,則表示該索引文件是一個直播源,客戶端需要定期更新索引文件,重復上述過程。
較為常用的HLS系統中,使用硬編碼器將輸入的音頻編碼為AAC、將輸入的視頻編碼為h264,並將二者復用到MPEG-TS中,之后使用分片工具將其切分為一系列小的ts文件;這些文件將可以放到web服務器上。分片工具同時會創建並維護一個索引文件(HLS中稱為.M3U8),其中包含可用媒體文件的列表。索引文件的URL會在web服務器上發布。客戶端可以讀取該索引文件,然后順序請求列出的媒體文件,這些分片可以無縫播放。一個典型的系統配置如下圖:
HLS也支持純音頻格式,通常是MPEG基本音頻文件,比如帶有ADTS頭的AAC、MP3或者AC-3。
(未完待續)