《直播疑难杂症排查》之三:首开慢
本系列會(huì)涵蓋的內(nèi)容包括但不限于如下一些主題:
-
播放失敗
-
播放卡頓
-
首開慢
-
延時(shí)高
-
音畫不同步
-
馬賽克嚴(yán)重
-
播放黑屏、花屏、綠屏
-
播放雜音、噪音、回聲
-
點(diǎn)播拖動(dòng)不準(zhǔn)
-
直播發(fā)熱問題
-
其他問題(待續(xù))
本文是 《直播疑難雜癥排查》系列的第三篇文章,我們來看看直播過程中,最重要的一個(gè)性能指標(biāo):首開。
首開慢的表現(xiàn)
點(diǎn)擊播放后,需要好幾秒才能顯示播放畫面。
##常見首開慢問題排查
####點(diǎn)擊播放后才從服務(wù)器取播放地址
播放視頻,第一件事就是要拿到播放地址,大多數(shù)直播 App,主播的播放地址是由 App 向服務(wù)端發(fā) HTTP GET 請(qǐng)求才能拿到的,因此,什么時(shí)候去「拿」?這個(gè)播放地址,顯得至關(guān)重要,常見的做法有如下兩種:
####App 拉取正在視頻列表的時(shí)候
用戶點(diǎn)擊某個(gè)視頻,跳轉(zhuǎn)到播放界面之后
顯然,后者的用戶體驗(yàn)明顯會(huì)比前者差,因?yàn)橥ㄟ^ HTTP GET 請(qǐng)求播放地址的過程,無形增加了首開時(shí)間,特別是在弱網(wǎng)下,會(huì)更慢。
####DNS 解析慢
不同的播放域名,DNS 解析有快有慢,再加上 DNS 解析服務(wù)的緩存策略,在本地沒有該域名緩存的情況下,會(huì)逐級(jí)向更高級(jí)的域名服務(wù)器查詢域名,因此,播放域名解析的耗時(shí),會(huì)對(duì)首開產(chǎn)生不小的影響。
為了有效降低 DNS 解析對(duì)首開的影響,我們可以提前完成播放域名->IP 地址的解析,并緩存起來,播放的時(shí)候,直接傳入帶 IP 地址的播放地址,從而省去了 DNS 解析的耗時(shí)。
如果要支持用?IP?地址播放,是需要修改底層 ffmpeg 源碼的,目前我們七牛的?PLDroidPlayer?就支持這樣的播放地址: URL 格式「protocol://ip/path?domain=xxxx.com」
####播放策略原因
播放首開時(shí)間的定義,就是從點(diǎn)擊播放到第一幀畫面顯示出來的耗時(shí),因此,我們需要盡一切可能加快播放進(jìn)度。
很多側(cè)重點(diǎn)播的播放器,為了減少卡頓,會(huì)有一些緩沖策略,當(dāng)緩沖足夠多的數(shù)據(jù)之后 ,再送入解碼播放。
而為了加快首開效果,需要對(duì)播放的緩沖策略做一些調(diào)整,如果第一幀還沒有渲染出來的情況下,不要做任何緩沖,直接送入解碼器解碼播放,這樣就可以保證沒有任何因?yàn)椤钢鲃?dòng)」緩沖帶來的首開延時(shí)。
####播放參數(shù)配置
所有基于 ffmpeg 的播放器,都會(huì)遇到?avformat_find_stream_info??這個(gè)函數(shù)耗時(shí)比較久,從而增大了首開時(shí)間,該函數(shù)主要作用是通過讀取一定字節(jié)的碼流數(shù)據(jù),來分析碼流的基本信息,如編碼信息、時(shí)長(zhǎng)、碼率、幀率等等,它由兩個(gè)參數(shù)來控制其讀取的數(shù)據(jù)量大小和時(shí)長(zhǎng),一個(gè)是 probesize,一個(gè)是 analyzeduration。
減少 probesize 和 analyzeduration 可以有效地減少??avformat_find_stream_info? 的函數(shù)耗時(shí),從而加快首開,但是需要注意的是,設(shè)置地太小可能會(huì)導(dǎo)致讀取的數(shù)據(jù)量不足,從而無法解析出碼流信息,導(dǎo)致播放失敗,或者出現(xiàn)只有音頻沒有視頻,只有視頻沒有音頻的問題。
####服務(wù)端線路原因
當(dāng)播放端的優(yōu)化做到極限后,剩下的首開快慢的決定性因素就是服務(wù)端的線路了,服務(wù)端的線路主要有哪些方面會(huì)影響首開呢?
- 冷熱流
當(dāng)你去附近的邊緣服務(wù)器節(jié)點(diǎn)拉取某個(gè)流的時(shí)候,如果最近沒有任何人從該服務(wù)器拉過這個(gè)流,那么這臺(tái)服務(wù)器就需要逐級(jí)向源頭拉流,而且該服務(wù)器也沒有任何 GOP 緩存,從而產(chǎn)生比較大的首開延時(shí)。
- 邊緣節(jié)點(diǎn)的 TTL
同等大小的數(shù)據(jù),客戶端距離服務(wù)器越近,ttl 越小,那么傳輸速度也就越快,首開也會(huì)越快。 服務(wù)器的響應(yīng)速度
影響服務(wù)器響應(yīng)速度的因素,一個(gè)是跟服務(wù)器的協(xié)議層優(yōu)化有關(guān),另一個(gè)就是服務(wù)端的負(fù)載和性能了,服務(wù)器當(dāng)前負(fù)載越大,響應(yīng)自然越慢。
下面給出一張圖,來直觀的感受一下服務(wù)端在加速首開這件事上的關(guān)鍵作用:
七牛的實(shí)時(shí)流網(wǎng)絡(luò) (LiveNet),我們會(huì)根據(jù)網(wǎng)絡(luò)流量、各節(jié)點(diǎn)的連接、負(fù)載狀況及到用戶網(wǎng)絡(luò)的響應(yīng)時(shí)間等綜合信息,實(shí)時(shí)地將用戶的請(qǐng)求調(diào)度到最佳服務(wù)節(jié)點(diǎn)上,同時(shí)可計(jì)算出最佳服務(wù)節(jié)點(diǎn)與視頻源節(jié)點(diǎn)的最佳網(wǎng)絡(luò)路徑,使用戶可以更快速的獲取到視頻內(nèi)容,提高視頻服務(wù)的響應(yīng)速度和用戶體驗(yàn)。
##小結(jié)
關(guān)于首開慢的排查大致就介紹到這里了,下篇我們將對(duì)延遲高這個(gè)話題進(jìn)行探討。
轉(zhuǎn)自:七牛云的個(gè)人空間
總結(jié)
以上是生活随笔為你收集整理的《直播疑难杂症排查》之三:首开慢的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Git submodule子模块
- 下一篇: 《直播疑难杂症排查》之四:延时高