前言:
HTTP Live Streaming(縮寫是HLS)是一個(gè)由蘋果公司提出的基于HTTP的流媒體網(wǎng)絡(luò)傳輸協(xié)議叠国。
相關(guān)模塊:
Media encoder:用于將設(shè)備輸出的流進(jìn)行轉(zhuǎn)碼,并封裝成MPEG-2傳輸流。
Stream segmenter:用于直播迁沫,將MPEG-2流分割成多個(gè)小片段后輸出(m3u8和ts切片)。
File segmenter:用于點(diǎn)播,將MPEG-2流分割成多個(gè)小片段后輸出(m3u8和ts切片)。
原理:
簡(jiǎn)單講就是把整個(gè)流分成一個(gè)個(gè)小段传藏,基于HTTP的文件來(lái)下載,每次只下載一些彤守,傳輸內(nèi)容包括兩部分:一是m3u8純文本索引文件毯侦,二是TS媒體文件。簡(jiǎn)單的傳輸方式就是在一個(gè)m3u8中包含ts切片的url列表遗增,依次下載播放叫惊。如下圖所示:
還有就是有多級(jí)索引款青,如下圖所示做修,客戶端先下載一級(jí)Index file,它里面記錄了二級(jí)索引文件(Alternate-A抡草、Alternate-B饰及、Alternate-C)的地址,然后客戶端再去下載二級(jí)索引文件康震,該文件是按照帶寬不同劃分了不同分辨率的切片文件燎含,然后客戶端就可以根據(jù)實(shí)際的貸款按順序下載TS視頻文件并連續(xù)播放以實(shí)現(xiàn)碼率自適應(yīng)。
一般為了加快速度腿短,.m3u8放在web服務(wù)器上屏箍,ts文件放在cdn上。.m3u8文件橘忱,其實(shí)就是以UTF-8編碼的m3u文件赴魁,這個(gè)文件本身不能播放,只是存放了播放信息的文本文件:
備注:
A:#EXTINF指示出下面TS片的時(shí)間長(zhǎng)度钝诚,單位是秒颖御,可以是整數(shù)也可以浮點(diǎn)數(shù),浮點(diǎn)數(shù)一般精確到小數(shù)點(diǎn)后面3位凝颇。在示例中潘拱,第一個(gè)ts的時(shí)長(zhǎng)為8秒疹鳄。
同時(shí),EXTINF也影響了播放器刷新M3U8文件的間隔芦岂,正常情況下瘪弓,播放器會(huì)把當(dāng)前下載的TS片的EXTINF的值作為每次刷新M3U8文件的間隔;如果播放器發(fā)現(xiàn)本次取到的M3U8文件內(nèi)容沒(méi)有更新禽最,會(huì)在1-2秒內(nèi)再次刷新杠茬。
B:ts切片的時(shí)長(zhǎng)不能大于#EXT-X-TARGETDURATION的值
C:#EXT-X-ENDLIST這個(gè)表示視頻結(jié)束,有這個(gè)標(biāo)志同時(shí)也說(shuō)明當(dāng)前的流是一個(gè)非直播流弛随。
D:#EXT-X-PLAYLIST-TYPE:VOD的意思是當(dāng)前的視頻流并不是一個(gè)直播流瓢喉,而是點(diǎn)播流
直播:
1.http請(qǐng)求m3u8的url(包含部分播放列表,沒(méi)有結(jié)束標(biāo)識(shí))舀透。
2.服務(wù)端返回一個(gè)m3u8的播放列表栓票,這個(gè)播放列表是實(shí)時(shí)更新的(類似于滑動(dòng)窗口機(jī)制),一般一次給出5段數(shù)據(jù)的url愕够。
3.客戶端解析m3u8的播放列表走贪,再按序請(qǐng)求每一段的url,獲取ts數(shù)據(jù)流惑芭。
點(diǎn)播:
1.http請(qǐng)求m3u8的url坠狡。(包含所有播放列表,有結(jié)束標(biāo)識(shí))遂跟。
2.解析m3u8的播放列表逃沿,再按序請(qǐng)求每一段的url,獲取ts數(shù)據(jù)流幻锁。
備注:hls協(xié)議是將直播流分成一段一段的小段視頻去下載播放的凯亮,所以假設(shè)列表里面的包含5個(gè)ts文件,每個(gè)TS文件包含5秒的視頻內(nèi)容哄尔,那么整體的延遲就是25秒假消。因?yàn)楫?dāng)你看到這些視頻時(shí),已經(jīng)將視頻錄制好上傳上去了岭接,所以時(shí)這樣產(chǎn)生的延遲富拗。當(dāng)然可以縮短列表的長(zhǎng)度和單個(gè)ts文件的大小來(lái)降低延遲,極致來(lái)說(shuō)可以縮減列表長(zhǎng)度為1鸣戴,并且ts的時(shí)長(zhǎng)為1s啃沪,但是這樣會(huì)造成請(qǐng)求次數(shù)增加,增大服務(wù)器壓力葵擎,當(dāng)網(wǎng)速慢時(shí)回造成更多的緩沖谅阿,所以蘋果官方推薦的ts時(shí)長(zhǎng)時(shí)10s,所以這樣就會(huì)大概有30s的延遲。
弊端:
1.采用HLS協(xié)議直播的視頻延遲時(shí)間無(wú)法下到10秒以下签餐,所以說(shuō)對(duì)直播延遲比較敏感的服務(wù)請(qǐng)慎用HLS寓涨。(偽直播)。
2.對(duì)于點(diǎn)播服務(wù)來(lái)說(shuō),由于TS切片通常較小,海量碎片在文件分發(fā),一致性緩存,存儲(chǔ)等方面都有較大挑戰(zhàn)氯檐。
測(cè)試:(央視網(wǎng)H5)
測(cè)試:(央視網(wǎng)H5)
測(cè)試環(huán)境:win10 64位
測(cè)試平臺(tái):chorm
播放器類型:H5
協(xié)議:HLS協(xié)議
測(cè)試結(jié)果:
(測(cè)試類型:直播)
M3u8每次更新一個(gè)戒良,類似于滑動(dòng)窗口機(jī)制,第一次是列表12345冠摄,第二次是23456糯崎,第三次事34567,然后按列表地址下載ts切片河泳,直播暫停沃呢,m3u8文件繼續(xù)更新,ts文件停止下載拆挥。直播播放薄霜,繼續(xù)下載ts切片。下圖為央視網(wǎng)直播時(shí)連續(xù)更新三次m3U8文件的截圖:
(測(cè)試類型:點(diǎn)播)
M3u8一次性包含所有ts文件播放列表纸兔,依次進(jìn)行下載播放惰瓜,暫停的時(shí)候ts切片不下載,播放繼續(xù)下載汉矿,seek進(jìn)度條的時(shí)候崎坊,ts切片會(huì)從選擇位置開始下載。下圖為央視網(wǎng)點(diǎn)播seek的ts片段洲拇。如下圖: