HTTP Live Streaming(縮寫是HLS)是一個(gè)由蘋果公司提出的基于HTTP的流媒體網(wǎng)絡(luò)傳輸協(xié)議。是蘋果公司QuickTime X和iPhone軟件系統(tǒng)的一部分。它的工作原理是把整個(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ò)CDN進(jìn)行分發(fā)來傳輸媒體流。
蘋果公司把HLS協(xié)議作為一個(gè)互聯(lián)網(wǎng)草案(逐步提交),在第一階段中已作為一個(gè)非正式的標(biāo)準(zhǔn)提交到IETF。但是,即使蘋果偶爾地提交一些小的更新,IETF卻沒有關(guān)于制定此標(biāo)準(zhǔn)的有關(guān)進(jìn)一步的動(dòng)作。
HLS協(xié)議規(guī)定:
視頻的封裝格式是TS。
視頻的編碼格式為H264,音頻編碼格式為MP3、AAC或者AC-3。
除了TS視頻文件本身,還定義了用來控制播放的m3u8文件(文本文件)。
鏈接:http://www.itdecent.cn/p/426425cad08a
Apple的動(dòng)態(tài)碼率自適應(yīng)技術(shù)。主要用于PC和Apple終端的音視頻服務(wù)。包括一個(gè)m3u(8)的索引文件,TS媒體分片文件和key加密串文件。可實(shí)現(xiàn)流媒體的直播和點(diǎn)播,主要應(yīng)用在iOS系統(tǒng),為iOS設(shè)備(如iPhone、iPad)提供音視頻直播和點(diǎn)播方案。HLS點(diǎn)播,基本上就是常見的分段HTTP點(diǎn)播,不同在于,它的分段非常小。
1.HLS 直播原理:通過相關(guān)設(shè)備采集攝像頭的視頻和麥克風(fēng)的音頻,并實(shí)時(shí)進(jìn)行 H264視頻編碼和 AAC 音頻音頻編碼,并按照 HLS協(xié)議規(guī)范,轉(zhuǎn)換為標(biāo)準(zhǔn)的 TS文件以及m3u8(是一個(gè)地址,里面記錄了服務(wù)器多對(duì)應(yīng)的文件)索引文件.
2. HLS 點(diǎn)播:就是對(duì) HTTP 進(jìn)行分段播放,不同的就是在于對(duì) HTTP 進(jìn)行的分段非常小,因此可以說, HLS 點(diǎn)播的重點(diǎn)就是對(duì) HTTP 進(jìn)行分段.(現(xiàn)在的分段技術(shù)比較常見不在贅述)
3 HLS 直播原理:和其他的常見的直播協(xié)議(如: RTMP,RTSP,MMS)不同, 遵守HLS 協(xié)議的直播在客戶端接收到的并不是完整的數(shù)據(jù)流. 即HLS 協(xié)議的服務(wù)器將最新獲取到的片段進(jìn)行分割為小片段,客戶端獲取服務(wù)器剛編好的最新的片段進(jìn)行播放.這樣服務(wù)器端不斷的獲取新的數(shù)據(jù)進(jìn)行分割成新的片段,客戶端不斷的從服務(wù)器端獲取最近的片段進(jìn)行播放.由此可以說 HLS 是以點(diǎn)播的形式實(shí)現(xiàn)的直播.
HLS協(xié)議在服務(wù)器端將直播數(shù)據(jù)流存儲(chǔ)為連續(xù)的、很短時(shí)長的媒體文件(MPEG-TS格式),而客戶端則不斷的下載并播放這些小文件,因?yàn)榉?wù)器端總是會(huì)將最新的直播數(shù)據(jù)生成新的小文件,這樣客戶端只要不停的按順序播放從服務(wù)器獲取到的文件,就實(shí)現(xiàn)了直播。由此可見,基本上可以認(rèn)為,HLS是以點(diǎn)播的技術(shù)方式來實(shí)現(xiàn)直播。直播的 m3u8 文件會(huì)不斷更新, 而點(diǎn)播的 m3u8 文件是不會(huì)變的, 只需要客戶端在開始時(shí)請(qǐng)求一次即可.
常用的流媒體協(xié)議主要有 HTTP 漸進(jìn)下載和基于 RTSP/RTP 的實(shí)時(shí)流媒體協(xié)議,這二種基本是完全不同的東西,目前比較方便又好用的是用 HTTP 漸進(jìn)下載方法。在這個(gè)中 apple 公司的 HTTP Live Streaming 是這個(gè)方面的代表。它最初是蘋果公司針對(duì)iPhone、iPod、iTouch和iPad等移動(dòng)設(shè)備而開發(fā)的流.現(xiàn)在見到在桌面也有很多應(yīng)用了,HTML5 是直接支持這個(gè)。
但是HLS協(xié)議的小切片方式會(huì)生成大量的文件,存儲(chǔ)或處理這些文件會(huì)造成大量資源浪費(fèi)。如果要實(shí)現(xiàn)數(shù)天的時(shí)移,索引量將會(huì)是個(gè)巨額數(shù)字,并明顯影響請(qǐng)求速度。因此,HLS協(xié)議對(duì)存儲(chǔ)I/O要求相當(dāng)苛刻。
新型點(diǎn)播服務(wù)器系統(tǒng),獨(dú)創(chuàng)了內(nèi)存緩存數(shù)據(jù)實(shí)時(shí)切片技術(shù),顛覆了這種傳統(tǒng)實(shí)現(xiàn)方法,從根本上解決了大量切片的碎片問題,使得單臺(tái)服務(wù)器的切片與打包能力不再是瓶頸。其基本原理如下:
不將TS切片文件存到磁盤,而是存在內(nèi)存當(dāng)中,這種技術(shù)使得服務(wù)器的磁盤上面不再會(huì)有“數(shù)以噸計(jì)”的文件碎片,極大減少了磁盤的I/O次數(shù),延長了服務(wù)器磁盤的使用壽命,極大提高了服務(wù)器運(yùn)行的穩(wěn)定性。同時(shí),由于使用這種技術(shù),使得終端請(qǐng)求數(shù)據(jù)時(shí)直接從服務(wù)器的內(nèi)存中獲取,極大提高了對(duì)終端數(shù)據(jù)請(qǐng)求的反應(yīng)速度,優(yōu)化了視頻觀看體驗(yàn)。
總結(jié):
優(yōu)點(diǎn):
客戶端支持簡單, 只需要支持 HTTP 請(qǐng)求, 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 也加入了對(duì) HLS 的支持.
缺點(diǎn):
相比 RTMP 這類長連接協(xié)議, 延時(shí)較高, 難以用到互動(dòng)直播場景.
對(duì)于點(diǎn)播服務(wù)來說, 由于 TS 切片通常較小, 海量碎片在文件分發(fā), 一致性緩存, 存儲(chǔ)等方面都有較大挑戰(zhàn)。由于客戶端每次請(qǐng)求 TS 或 M3U8 有可能都是一個(gè)新的連接請(qǐng)求, 所以, 我們無法有效的標(biāo)識(shí)客戶端, 一旦出現(xiàn)問題, 基本無法有效的定位問題
改進(jìn):通過一個(gè)唯一的 id 來標(biāo)識(shí)一條流, 這樣在排查問題時(shí)就可以根據(jù)這個(gè) id 來定位播放過程中的問題.