背景
目前QQ直播的觀眾使用者眾多,在不同網路環境等客觀因素下,特別是在行動網路中,觀看體驗還有很多細分項有待提升。在行動網路、弱網、不穩定網路等情況下,直播播放出首幀的速度非常慢,觀看直播過程非常卡頓,不流暢,使用者體驗差。網路波動,會造成影片幀接收不及時,直播時延增大,造成多人連麥等互動性強的玩法體驗大大下降。基於這些現狀,開展了QQ直播觀看端播放體驗最佳化專項,針對首幀、卡頓等問題,逐個分析解決,提升使用者體驗。
目標
測試發現在正常網路下,QQ直播和競品APP的播放體驗效果一致。但是在弱網環境下有很大差距,QQ直播播放質量有很大的提升空間。
測試方法:
播放5分鐘,統計首幀時長、卡頓次數與卡頓總時長。
最佳化目標:
提升在弱網下首幀速度、流暢度等指標。
降低播放卡頓率,卡時間佔比。
名詞解釋:
首幀耗時 = 首幀渲染時間戳 - 點選進房時間戳
卡時間佔比% = 卡頓時長 / 播放時長
卡頓率% = 卡頓次數 / 播放次數
最佳化效果
注:1Mbps網路下測試播放卡頓效果示意圖
QQ直播播放首幀耗時從30秒最佳化到平均3秒,效果提升了10倍。
播放5分鐘的卡頓次數,從平均卡頓次數為24次,降低到平均4次,卡頓次數降低了6倍。
播放5分鐘的卡頓時長,從90秒降低到25秒,卡時間佔比從平均29。43%,降低到5。33%,卡頓時長降低了3倍以上。
最佳化前:
注:弱網最佳化前資料,弱網播放QQ893版本的播放效能資料表(2022-08-01)
最佳化後:
注:弱網最佳化後QQ898版本的播放效能資料表(2022-08-26)
最佳化方案
一、測試環境與測試方法
使用網路損傷儀裝置,搭建了弱網環境,對QQ直播、多款競品直播APP等產品的首幀、卡頓情況進行測試;
設定弱網環境:1Mbps 延時85ms
操作前開啟手機錄屏,點選進入直播間,等待直播播放出首幀,在直播間觀看5分鐘。透過對錄屏的影片,進行逐幀分析點選時間點、首幀時間點、卡頓時間點。
二、收集測試資料
測試方法:從大廳頁點選進房,測試首幀播放速度,播放5分鐘,測試5分鐘內影片的卡頓次數與卡頓時間。最後從9組測試資料中求平均得出。
三、 測試結論
弱網下,從大廳頁進入直播間,播放出首幀的耗時遠遠高於競品,有很大的最佳化空間。
前3分鐘QQ直播卡的時間更多。
播放卡頓體驗:其它直播APP的卡頓次數和總時間最小,播放最流暢,體驗最好;和其它直播對比,整體卡頓率雖然略微高於其它直播,但其它直播平均卡頓時間基本在1秒左右。
(雖然卡頓次數數倍於QQ直播,但很多播放卡頓時間遠小於1s,卡頓感知不強),整體播放體驗還是優於QQ直播
分析問題
QQ直播播放全鏈路分析
點選進房播放流程圖
播放器拉流、解碼、渲染的鏈路流程圖
經過上述流程分析,我們發現播放卡頓的問題點可能出現在以下環節。
一、開播推流位元速率不一致問題
推流端存在多種推流方式,各個推流方式的上行位元速率不一致,我們配置了統一轉碼模組,將不同位元速率的直播流轉碼為統一碼流。
在大型活動的直播間,如果將10Mbps的原始流下發,會造成網路頻寬的需求急劇升高,同時對於行動網路和弱網的使用者,觀看流暢度將下降,卡頓率升高。因此透過轉碼伺服器,統一轉碼模組,將影片流轉碼為多個不同檔位的直播流,來滿足不同網路狀態的使用者需求。
在QQ直播有17個不同的觀看入口,每個入口的下發直播地址需要做檔位處理。
二、CDN回源問題分析
根據直播監控平臺查詢,發現QQ直播的域名沒有開啟非同步鑑權的問題。
注:紅框中標記的“LiveAuth正常返回”,“首次” 兩個步驟處理時間超過900ms,正常情況耗時小於100ms
根據直播監控平臺查詢回源鏈路,發現CDN的內部存在回源慢的問題。
注:回源耗時超過10秒,這個是CDN核心偶現問題導致的異常
根據直播監控平臺查詢回源鏈路,發現CDN的內部存在回源慢的問題。
注:回源耗時超過1700ms,由於主播資料不穩定導致首幀慢
根據直播監控平臺查詢回源鏈路,發現CDN吐流很快但客戶端首幀耗時超過6秒。
為排查這類問題,在客戶端增加了播放流量上報,每2秒取樣一次,30秒上報一次當前週期內的流量開銷,協助排查首幀慢的問題。
注:某現網使用者訪問直播房間的網路取樣圖,透過上圖可以發現網速是逐步攀升上去的,看著有些不太正常。
流量上報的實現原理:
在ThumbPlayer 收流模組中獲取到播放器“當前緩衝大小”,透過計算單位時間內的緩衝增量,可以得到“當前網速”,最終按照一定頻率上報到伺服器,上報格式如下。
欄位
含義
time
起始時間戳
freq
頻率(例項中2秒採用一個,可配置)
net_data
網速資料陣列KB/s
cache_data
快取資料陣列KB
cache_duration
快取的可播放時長ms
report_time
取樣30秒個點(可配置)
三、播放器緩衝策略分析
經過反覆測試驗證,在播放器引數和策略方面存在以下差異點
名詞解釋:
解析度自適應:
不同網路狀態下,播放器自動播放對應檔位的清晰度,保證直播流暢度。
首緩策略:
首次播放時拉取的直播流大小。
二緩策略:
出現卡頓時,播放器需要拉取的資料大小,才開始播放。
預載入策略:
為加快直播間的首幀速度,提前使用播放器拉取直播流資料,準備首次播放需要的資料。
最佳化前QQ直播點選進房預載入所需流量網速如下
點選進房時,開始播放當前直播間,會同時啟動下一個直播間的預載入,會預載入12秒的影片資料(由播放器的首緩策略決定)。此時會同時拉取兩條直播流,每條流的位元速率都是4Mpbs,導致在開始播放時的頻寬要求在8Mbps以上。
最佳化前QQ直播上下切房預載入所需流量網速如下
上下切房時,開始播放當前直播間,會同時啟動上下兩個直播間的預載入,上下兩個直播間預載入12秒的影片資料(12秒資料由首緩策略決定)。此時同時拉取三條直播流,每條流的位元速率都是4Mpbs,導致在開始階段的網路頻寬要求是12Mbps以上。
從上圖可以看出以下問題:
預載入網路開銷較大,按照QQ直播的位元速率計算,12秒時長的位元組大小為6MB,計算方法:位元組大小 = 時長 * 位元速率 / 8
在弱網下,沒有足夠的網路頻寬來支援藍光檔位的影片流播放,從這個點來看,弱網下需要降低播放檔位。
點選進房預設開始了下一個直播間的預載入,上下進房會開啟上下直播間的預載入,最高需要12Mbps的網速,弱網下需要判斷是否開啟預載入。
預載入資料過多,預設預載入12秒影片資料原因:ThumbPlayer配置的最小快取大小為4秒,開啟了追幀後,PlayerCore會預設調整快取大小為最小快取的3倍,即12秒快取,因此這裡會預載入12秒的影片資料,預載入資料過長的問題也需要解決。
四、協議棧分析-直播流編碼資訊
QQ直播流編碼資訊
目前QQ直播的直播流都是H264編碼格式,秀場直播間是20FPS幀率,遊戲直播間是30FPS幀率。
競品直播的碼流資訊
透過抓網路包等方式,分析影片流的編碼資訊、幀率、位元速率等資訊。
root過的手機:tcpdump -i wlan0 -w 1。pcap
抓取播放過程的網路包:
找到網路包中的FLV直播流資料,FLV影片流是以“FLV”開頭
將資料回包儲存為FLV檔案,將該檔案放至到flvAnalyser中進行解析,即可得到媒體資訊
其它直播1和其它直播2,都有H265編碼格式。
碼流資訊分析結果
從對比的媒體資料來看,其它直播1和其它直播2,都使用了H265編碼格式,同分辨率下,位元速率更低。因此QQ直播也可以透過下發H265直播流,來進一步降低直播流的位元速率。
解決問題
一、解決上述問題的措施
在大廳頁,開發測試模組,檢測當前網速狀態,是否為弱網。
根據網路評估結果,大廳頁優先選擇播放低位元速率的影片,提高首幀的播放速度。
根據網路評估結果,決定大廳頁是否要自動播放。
根據網路評估結果,決定直播間內是否需要做直播間預載入。
降低標清直播流的位元速率,當前標清位元速率為800Kpbs,在1Mbps無法穩定播放,結合清晰度適當降低位元速率。
當前預載入資料過長,需要解決預載入資料過長問題。
下發H265的影片流,進一步降低播放端的位元速率頻寬要求。
播放器增加IP上報,監控CDN節點是否有聚集性拉流失敗問題。
CDN開啟非同步鑑權,對比同步鑑權,減少CDN回源時長,加快拉取首幀資料的速度。
二、實施技術方案
網路測試模組與MSF測試模組開發,評估網路狀態。根據網路狀態,判斷當前網路狀態是否支援預載入播放、已經適合播放的檔位。
2。 根據網路狀態、判斷當前網路是否支援大廳頁自動播放,弱網下關閉播放可以提高收發業務信令的速度。
3。 根據網路狀態選擇對應的清晰度,以及是否支援房間內的預載入。
4。 整體的弱網策略根據Toggle動態下發,根據灰度效果調試出最優的配置引數。
5。 預載入資料過長處理方案,在開始預載入時,啟動定時器查詢快取的資料大小,在預載入資料大於4秒(4秒可以配置),暫停下載。等使用者播放該直播間時,再恢復下載。
6。 CDN回源慢問題監控,對播放器解析連線CDN的IP地址進行上報,開啟CDN的非同步鑑權功能。對異常CASE實時提醒,實時跟進。
7。 競品直播都支援H265影片下發預載入,因此QQ直播也進行H265解碼驗證與測試,灰度測試H265直播流。下發H265的編碼影片流,藍光的位元速率下降了35%,標清位元速率下降37。5%。整體位元速率大幅度下降,在弱網下播放的流暢度更高,同時也節省頻寬成本。同時驗證了在各個業務場景下的H265解碼情況,目前各個場景都是解碼正常的。
三、最終效果與資料
整體資料對比:
IOS端部分測試資料:
Android端部分測試資料:
作者:
fangguozeng
騰訊VATeam
出處:https://mp。weixin。qq。com/s/az3tP8SRMq3pxJ_7FS317A