如何降低延時(shí)?
按正常情況,RTMP 推流 + FLV 播放的正常延遲在 2-3s 左右,如果太長(zhǎng)則是有問題的。如果您發(fā)現(xiàn)直播延遲時(shí)間特別長(zhǎng),可按照如下思路來排查:
以下方法僅適用于 RTMP 與 FLV
阿里云提供 FLV、HLS、RTMP 三種播放協(xié)議,不少用戶采用 HLS 的播放協(xié)議。HLS 是蘋果研發(fā)的協(xié)議,對(duì)瀏覽器兼容較好,并且跨終端的支持。是很多用戶的首選。但是 HLS 本身機(jī)制的問題,是基于大顆粒的 TS 分片的流媒體協(xié)議,每個(gè)分片都有 5s 以上的時(shí)長(zhǎng),分片數(shù)量一般為 3-4 個(gè),所以總延遲在 20-30s 左右。很多用戶通過設(shè)置 TS 切片的時(shí)間來減少延時(shí),雖然能有效的減少一些延時(shí),但基于協(xié)議本身的特性也無法像 rtmp 與 flv 協(xié)議一樣將延遲降低到很低。
GOP 幀設(shè)置
GOP 幀是視頻的關(guān)鍵幀,是一組連續(xù)的畫面,由一張 I 幀和數(shù)張 B / P 幀組成,是視頻圖像編碼器和解碼器存取的基本單位,它的排列順序?qū)?huì)一直重復(fù)到影像結(jié)束。直播會(huì)將每一幀數(shù)據(jù)打上時(shí)序標(biāo)簽后進(jìn)行在網(wǎng)絡(luò)上進(jìn)行傳輸,減少 GOP 幀的數(shù)量,減少播放器加載 GOP 幀所用的時(shí)間。一般情況下設(shè)置為 1-2s。
服務(wù)器緩存設(shè)置
一般情況服務(wù)器會(huì)先緩存一部分直播數(shù)據(jù),再將數(shù)據(jù)通過網(wǎng)絡(luò)傳輸至終端。這樣能保證數(shù)據(jù)傳輸?shù)牧鲿承裕芯彺鏀?shù)據(jù)也就會(huì)造成一定的直播延時(shí),對(duì)直播要求較高的場(chǎng)景就會(huì)要求將緩存調(diào)小以達(dá)到較小的延遲。
當(dāng)然,相對(duì)應(yīng)的緩存越小,當(dāng)網(wǎng)絡(luò)環(huán)境不好時(shí),數(shù)據(jù)無法及時(shí)的下載,就會(huì)出現(xiàn)卡頓的現(xiàn)象。
確認(rèn)使用的播放協(xié)議
不少用戶播放協(xié)議采用 HLS(m3u8),并感覺延遲較大,這是正常的。蘋果主推的 HLS 是基于 TS 分片文件的流媒體協(xié)議,每個(gè)分片都有 5s 以上的時(shí)長(zhǎng),分片數(shù)量一般為 3-4 個(gè),所以總延遲基本都在在 20-30s。
換用 FLV 作為播放協(xié)議即可解決這個(gè)問題。但是要注意,如果您要在手機(jī)瀏覽器上觀看直播視頻,只有 HLS (m3u8) 這一種播放協(xié)議可以選擇,其它的直播協(xié)議在蘋果的 Safari 瀏覽器上都是不支持的。
知識(shí)戶播放協(xié)議采用 HLS(m3u8)