在直播應(yīng)用中,RTMP 和 HLS 是兩種較為成熟且廣泛應(yīng)用的流媒體協(xié)議,基本上可以覆蓋所有客戶端。RTMP 是互聯(lián)網(wǎng) TCP/IP 五層體系結(jié)構(gòu)中應(yīng)用層的協(xié)議,主要優(yōu)勢(shì)就是實(shí)時(shí)性高,基本可將直播延時(shí)控制在3秒以內(nèi),因此廣泛應(yīng)用于低延時(shí)直播。
HLS是由 Apple 公司實(shí)現(xiàn)的基于 HTTP 的流媒體傳輸協(xié)議,擁有性能高、完美支持 iOS等優(yōu)勢(shì)。相比于 RTMP 協(xié)議,HLS 無(wú)需在移動(dòng)端安裝 APP,同時(shí)兼容HTML5,因此在移動(dòng)直播的傳播和體驗(yàn)上都擁有巨大的優(yōu)勢(shì)。不過(guò)HLS 的實(shí)時(shí)性較差,業(yè)界的平均直播延時(shí)達(dá)在10s ~35s。
在讓許多用戶最頭痛的 HLS 延時(shí)問(wèn)題上,又拍云做了針對(duì)性的技術(shù)優(yōu)化,實(shí)現(xiàn)了 HLS 的超低延時(shí),將 HLS 延時(shí)穩(wěn)定控制在了 4 秒左右。
HLS 高延時(shí)原因分析
HLS 理論上延時(shí)=1個(gè)切片的時(shí)長(zhǎng)+ 0-1個(gè)td(td是EXT-X-TARGETDURATION,可簡(jiǎn)單理解為播放器取片的間隔時(shí)間) + 0-n個(gè)啟動(dòng)切片(蘋(píng)果官方建議是請(qǐng)求到3個(gè)片之后才開(kāi)始播放) + 播放器最開(kāi)始請(qǐng)求的片的網(wǎng)絡(luò)延時(shí)(網(wǎng)絡(luò)連接耗時(shí))。
從延時(shí)組成公式可以看出,HLS 的延時(shí)主要是以下四部分組成:
服務(wù)器端的編碼器和流分割器生成 TS 文件的時(shí)常,HLS 協(xié)議應(yīng)用于直播視頻傳輸時(shí),是將媒體文件切割成了對(duì)應(yīng)于媒體分段的 TS 文件。
播放器取片的間隔時(shí)間,在客戶端開(kāi)始下載之前,必須等待服務(wù)器端的編碼器和流分割器至少生成一個(gè)TS 文件。
客戶端下載切片的時(shí)間及啟動(dòng)播放所需的切片個(gè)數(shù),通常下載完兩個(gè)媒體文件后才能保證不同分段音視頻間的無(wú)縫連接。
客戶端最開(kāi)始解碼并開(kāi)始播放的時(shí)間。
HLS的延時(shí)優(yōu)化主要是針對(duì)前三個(gè)部分,第四個(gè)