HLS
HTTP Live Streaming(縮寫(xiě)是HLS)是一個(gè)由蘋(píng)果公司提出的基于HTTP的流媒體網(wǎng)絡(luò)傳輸協(xié)議。是蘋(píng)果公司QuickTime X和iPhone軟件系統(tǒng)的一部分。它的工作原理是把整個(gè)流分成一個(gè)個(gè)小的基于HTTP的文件來(lái)下載,每次只下載一些。當(dāng)媒體流正在播放時(shí),客戶(hù)端可以選擇從許多不同的備用源中以不同的速率下載同樣的資源,允許流媒體會(huì)話適應(yīng)不同的數(shù)據(jù)速率。在開(kāi)始一個(gè)流媒體會(huì)話時(shí),客戶(hù)端會(huì)下載一個(gè)包含元數(shù)據(jù)的extended M3U (m3u8)playlist文件,用于尋找可用的媒體流。
HLS協(xié)議規(guī)定
l 視頻的封裝格式是TS。
l 視頻的編碼格式為H264,音頻編碼格式為MP3、AAC或者AC-3。
l 除了TS視頻文件本身,還定義了用來(lái)控制播放的m3u8文件(文本文件)。
RTMP
RMP協(xié)議是Real Time Message Protocol(實(shí)時(shí)信息傳輸協(xié)議)的縮寫(xiě),它是由Adobe公司提出的一種應(yīng)用層的協(xié)議,用來(lái)解決多媒體數(shù)據(jù)傳輸流的多路復(fù)用(Multiplexing)和分包(packetizing)的問(wèn)題。RTMP協(xié)議是應(yīng)用層協(xié)議,是要靠底層可靠的傳輸層協(xié)議(通常是TCP)來(lái)保證信息傳輸?shù)目煽啃缘摹T诨趥鬏攲訁f(xié)議的鏈接建立完成后,RTMP協(xié)議也要客戶(hù)端和服務(wù)器通過(guò)“握手”來(lái)建立基于傳輸層鏈接之上的RTMP Connection鏈接,在Connection鏈接上會(huì)傳輸一些控制信息,如SetChunkSize,SetACKWindowSize。
C++音視頻開(kāi)發(fā)學(xué)習(xí)資料:點(diǎn)擊 音視頻開(kāi)發(fā)(資料文檔+視頻教程+面試題)(FFmpeg+WebRTC+RTMP+RTSP+HLS+RTP)
HLS協(xié)議的優(yōu)勢(shì)(相比RTMP協(xié)議)
這個(gè)協(xié)議的產(chǎn)生是為了解決RTMP協(xié)議存在的一些問(wèn)題。 比如RTMP協(xié)議不使用標(biāo)準(zhǔn)的HTTP接口傳輸數(shù)據(jù),所以在一些特殊的網(wǎng)絡(luò)環(huán)境下可能被防火墻屏蔽掉。但是HLS由于使用的HTTP協(xié)議傳輸數(shù)據(jù),不會(huì)遇到被防火墻屏蔽的情況(該不會(huì)有防火墻連80接口都不放過(guò)吧)。
另外于負(fù)載,RTMP是一種有狀態(tài)協(xié)議,很難對(duì)視頻服務(wù)器進(jìn)行平滑擴(kuò)展,因?yàn)樾枰獮槊恳粋€(gè)播放視頻流的客戶(hù)端維護(hù)狀態(tài)。而HLS基于無(wú)狀態(tài)協(xié)議(HTTP),客戶(hù)端只是按照順序使用下載存儲(chǔ)在服務(wù)器的普通TS文件,做負(fù)責(zé)均衡如同普通的HTTP文件服務(wù)器的負(fù)載均衡一樣簡(jiǎn)單。
另外HLS協(xié)議本身實(shí)現(xiàn)了碼率自適應(yīng),不同帶寬的設(shè)備可以自動(dòng)切換到最適合自己碼率的視頻播放。其實(shí)HLS最大的優(yōu)勢(shì)就是蘋(píng)果。蘋(píng)果在自家的IOS設(shè)備上只提供對(duì)HLS的原生支持,并且放棄了flash。Android也原生支持了HLS。這樣一來(lái)flv,rtmp這些Adobe的視頻方案要想在移動(dòng)設(shè)備上播放需要額外下點(diǎn)功夫。當(dāng)然flash對(duì)移動(dòng)設(shè)備造成很大的性能壓力確實(shí)也是自身的問(wèn)題。
HLS協(xié)議的劣勢(shì)(相比RTMP協(xié)議)
HLS也有一些無(wú)法跨越的坑,比如采用HLS協(xié)議直播的視頻延遲時(shí)間無(wú)法下到10秒以下,而RTMP協(xié)議的延遲最低可以到3、4秒左右。所以說(shuō)對(duì)直播延遲比較敏感的服務(wù)請(qǐng)慎用HLS。