HTTP Live Streaming(縮寫是HLS)是一個由蘋果公司提出的基于HTTP的流媒體網(wǎng)絡(luò)傳輸協(xié)議眷柔。是蘋果公司QuickTime X和iPhone軟件系統(tǒng)的一部分江咳。它的工作原理是把整個流分成一個個小的基于HTTP的文件來下載胖齐,每次只下載一些。當(dāng)媒體流正在播放時孟抗,客戶端可以選擇從許多不同的備用源中以不同的速率下載同樣的資源震叮,允許流媒體會話適應(yīng)不同的數(shù)據(jù)速率。在開始一個流媒體會話時舅世,客戶端會下載一個包含元數(shù)據(jù)的extended M3U (m3u8)playlist文件旦委,用于尋找可用的媒體流。
HLS只請求基本的HTTP報文雏亚,與實時傳輸協(xié)議(RTP)不同缨硝,HLS可以穿過任何允許HTTP數(shù)據(jù)通過的防火墻或者代理服務(wù)器。它也很容易使用內(nèi)容分發(fā)網(wǎng)絡(luò)CDN進行分發(fā)來傳輸媒體流罢低。
蘋果公司把HLS協(xié)議作為一個互聯(lián)網(wǎng)草案(逐步提交)查辩,在第一階段中已作為一個非正式的標(biāo)準(zhǔn)提交到IETF。但是网持,即使蘋果偶爾地提交一些小的更新宜岛,IETF卻沒有關(guān)于制定此標(biāo)準(zhǔn)的有關(guān)進一步的動作。
HLS協(xié)議規(guī)定:
視頻的封裝格式是TS功舀。
視頻的編碼格式為H264,音頻編碼格式為MP3萍倡、AAC或者AC-3。
除了TS視頻文件本身辟汰,還定義了用來控制播放的m3u8文件(文本文件)列敲。
鏈接:http://www.reibang.com/p/426425cad08a
Apple的動態(tài)碼率自適應(yīng)技術(shù)阱佛。主要用于PC和Apple終端的音視頻服務(wù)。包括一個m3u(8)的索引文件戴而,TS媒體分片文件和key加密串文件凑术。可實現(xiàn)流媒體的直播和點播填硕,主要應(yīng)用在iOS系統(tǒng)麦萤,為iOS設(shè)備(如iPhone、iPad)提供音視頻直播和點播方案扁眯。HLS點播壮莹,基本上就是常見的分段HTTP點播,不同在于姻檀,它的分段非常小命满。
1.HLS 直播原理:通過相關(guān)設(shè)備采集攝像頭的視頻和麥克風(fēng)的音頻,并實時進行 H264視頻編碼和 AAC 音頻音頻編碼,并按照 HLS協(xié)議規(guī)范,轉(zhuǎn)換為標(biāo)準(zhǔn)的 TS文件以及m3u8(是一個地址,里面記錄了服務(wù)器多對應(yīng)的文件)索引文件.
2. HLS 點播:就是對 HTTP 進行分段播放,不同的就是在于對 HTTP 進行的分段非常小,因此可以說, HLS 點播的重點就是對 HTTP 進行分段.(現(xiàn)在的分段技術(shù)比較常見不在贅述)
3 HLS 直播原理:和其他的常見的直播協(xié)議(如: RTMP,RTSP,MMS)不同, 遵守HLS 協(xié)議的直播在客戶端接收到的并不是完整的數(shù)據(jù)流. 即HLS 協(xié)議的服務(wù)器將最新獲取到的片段進行分割為小片段,客戶端獲取服務(wù)器剛編好的最新的片段進行播放.這樣服務(wù)器端不斷的獲取新的數(shù)據(jù)進行分割成新的片段,客戶端不斷的從服務(wù)器端獲取最近的片段進行播放.由此可以說 HLS 是以點播的形式實現(xiàn)的直播.
HLS協(xié)議在服務(wù)器端將直播數(shù)據(jù)流存儲為連續(xù)的、很短時長的媒體文件(MPEG-TS格式)绣版,而客戶端則不斷的下載并播放這些小文件胶台,因為服務(wù)器端總是會將最新的直播數(shù)據(jù)生成新的小文件,這樣客戶端只要不停的按順序播放從服務(wù)器獲取到的文件杂抽,就實現(xiàn)了直播诈唬。由此可見,基本上可以認(rèn)為缩麸,HLS是以點播的技術(shù)方式來實現(xiàn)直播铸磅。直播的 m3u8 文件會不斷更新, 而點播的 m3u8 文件是不會變的, 只需要客戶端在開始時請求一次即可.
常用的流媒體協(xié)議主要有 HTTP 漸進下載和基于 RTSP/RTP 的實時流媒體協(xié)議,這二種基本是完全不同的東西杭朱,目前比較方便又好用的是用 HTTP 漸進下載方法阅仔。在這個中 apple 公司的 HTTP Live Streaming 是這個方面的代表。它最初是蘋果公司針對iPhone弧械、iPod八酒、iTouch和iPad等移動設(shè)備而開發(fā)的流.現(xiàn)在見到在桌面也有很多應(yīng)用了,HTML5 是直接支持這個刃唐。
但是HLS協(xié)議的小切片方式會生成大量的文件羞迷,存儲或處理這些文件會造成大量資源浪費。如果要實現(xiàn)數(shù)天的時移唁桩,索引量將會是個巨額數(shù)字闭树,并明顯影響請求速度。因此荒澡,HLS協(xié)議對存儲I/O要求相當(dāng)苛刻报辱。
新型點播服務(wù)器系統(tǒng),獨創(chuàng)了內(nèi)存緩存數(shù)據(jù)實時切片技術(shù),顛覆了這種傳統(tǒng)實現(xiàn)方法碍现,從根本上解決了大量切片的碎片問題幅疼,使得單臺服務(wù)器的切片與打包能力不再是瓶頸。其基本原理如下:
不將TS切片文件存到磁盤昼接,而是存在內(nèi)存當(dāng)中爽篷,這種技術(shù)使得服務(wù)器的磁盤上面不再會有“數(shù)以噸計”的文件碎片,極大減少了磁盤的I/O次數(shù)慢睡,延長了服務(wù)器磁盤的使用壽命逐工,極大提高了服務(wù)器運行的穩(wěn)定性。同時漂辐,由于使用這種技術(shù)泪喊,使得終端請求數(shù)據(jù)時直接從服務(wù)器的內(nèi)存中獲取,極大提高了對終端數(shù)據(jù)請求的反應(yīng)速度髓涯,優(yōu)化了視頻觀看體驗袒啼。
總結(jié):
優(yōu)點:
客戶端支持簡單, 只需要支持 HTTP 請求, HTTP 協(xié)議無狀態(tài), 只需要按順序下載媒體片段。
使用 HTTP 協(xié)議網(wǎng)絡(luò)兼容性好, HTTP 數(shù)據(jù)包也可以方便地通過防火墻或者代理服務(wù)器, CDN 支持良好.
Apple 的全系列產(chǎn)品支持, 由于 HLS 是蘋果提出的, 所以在 Apple 的全系列產(chǎn)品包括 iphone, ipad, safari 都不需要安裝任何插件就可以原生支持播放 HLS, 現(xiàn)在, Android 也加入了對 HLS 的支持.
缺點:
相比 RTMP 這類長連接協(xié)議, 延時較高, 難以用到互動直播場景.
對于點播服務(wù)來說, 由于 TS 切片通常較小, 海量碎片在文件分發(fā), 一致性緩存, 存儲等方面都有較大挑戰(zhàn)纬纪。由于客戶端每次請求 TS 或 M3U8 有可能都是一個新的連接請求, 所以, 我們無法有效的標(biāo)識客戶端, 一旦出現(xiàn)問題, 基本無法有效的定位問題
改進:通過一個唯一的 id 來標(biāo)識一條流, 這樣在排查問題時就可以根據(jù)這個 id 來定位播放過程中的問題.