QQ直播觀看端播放體驗最佳化

背景

目前QQ直播的觀眾使用者眾多,在不同網路環境等客觀因素下,特別是在行動網路中,觀看體驗還有很多細分項有待提升。在行動網路、弱網、不穩定網路等情況下,直播播放出首幀的速度非常慢,觀看直播過程非常卡頓,不流暢,使用者體驗差。網路波動,會造成影片幀接收不及時,直播時延增大,造成多人連麥等互動性強的玩法體驗大大下降。基於這些現狀,開展了QQ直播觀看端播放體驗最佳化專項,針對首幀、卡頓等問題,逐個分析解決,提升使用者體驗。

目標

測試發現在正常網路下,QQ直播和競品APP的播放體驗效果一致。但是在弱網環境下有很大差距,QQ直播播放質量有很大的提升空間。

測試方法:

播放5分鐘,統計首幀時長、卡頓次數與卡頓總時長。

最佳化目標:

提升在弱網下首幀速度、流暢度等指標。

降低播放卡頓率,卡時間佔比。

名詞解釋:

首幀耗時 = 首幀渲染時間戳 - 點選進房時間戳

卡時間佔比% = 卡頓時長 / 播放時長

卡頓率% = 卡頓次數 / 播放次數

最佳化效果

QQ直播觀看端播放體驗最佳化

注:1Mbps網路下測試播放卡頓效果示意圖

QQ直播播放首幀耗時從30秒最佳化到平均3秒,效果提升了10倍。

播放5分鐘的卡頓次數,從平均卡頓次數為24次,降低到平均4次,卡頓次數降低了6倍。

播放5分鐘的卡頓時長,從90秒降低到25秒,卡時間佔比從平均29。43%,降低到5。33%,卡頓時長降低了3倍以上。

最佳化前:

QQ直播觀看端播放體驗最佳化

注:弱網最佳化前資料,弱網播放QQ893版本的播放效能資料表(2022-08-01)

最佳化後:

QQ直播觀看端播放體驗最佳化

注:弱網最佳化後QQ898版本的播放效能資料表(2022-08-26)

最佳化方案

一、測試環境與測試方法

使用網路損傷儀裝置,搭建了弱網環境,對QQ直播、多款競品直播APP等產品的首幀、卡頓情況進行測試;

QQ直播觀看端播放體驗最佳化

設定弱網環境:1Mbps 延時85ms

操作前開啟手機錄屏,點選進入直播間,等待直播播放出首幀,在直播間觀看5分鐘。透過對錄屏的影片,進行逐幀分析點選時間點、首幀時間點、卡頓時間點。

二、收集測試資料

測試方法:從大廳頁點選進房,測試首幀播放速度,播放5分鐘,測試5分鐘內影片的卡頓次數與卡頓時間。最後從9組測試資料中求平均得出。

QQ直播觀看端播放體驗最佳化

三、 測試結論

弱網下,從大廳頁進入直播間,播放出首幀的耗時遠遠高於競品,有很大的最佳化空間。

前3分鐘QQ直播卡的時間更多。

播放卡頓體驗:其它直播APP的卡頓次數和總時間最小,播放最流暢,體驗最好;和其它直播對比,整體卡頓率雖然略微高於其它直播,但其它直播平均卡頓時間基本在1秒左右。

(雖然卡頓次數數倍於QQ直播,但很多播放卡頓時間遠小於1s,卡頓感知不強),整體播放體驗還是優於QQ直播

分析問題

QQ直播播放全鏈路分析

點選進房播放流程圖

QQ直播觀看端播放體驗最佳化

播放器拉流、解碼、渲染的鏈路流程圖

QQ直播觀看端播放體驗最佳化

經過上述流程分析,我們發現播放卡頓的問題點可能出現在以下環節。

QQ直播觀看端播放體驗最佳化

一、開播推流位元速率不一致問題

推流端存在多種推流方式,各個推流方式的上行位元速率不一致,我們配置了統一轉碼模組,將不同位元速率的直播流轉碼為統一碼流。

QQ直播觀看端播放體驗最佳化

在大型活動的直播間,如果將10Mbps的原始流下發,會造成網路頻寬的需求急劇升高,同時對於行動網路和弱網的使用者,觀看流暢度將下降,卡頓率升高。因此透過轉碼伺服器,統一轉碼模組,將影片流轉碼為多個不同檔位的直播流,來滿足不同網路狀態的使用者需求。

在QQ直播有17個不同的觀看入口,每個入口的下發直播地址需要做檔位處理。

二、CDN回源問題分析

根據直播監控平臺查詢,發現QQ直播的域名沒有開啟非同步鑑權的問題。

QQ直播觀看端播放體驗最佳化

注:紅框中標記的“LiveAuth正常返回”,“首次” 兩個步驟處理時間超過900ms,正常情況耗時小於100ms

根據直播監控平臺查詢回源鏈路,發現CDN的內部存在回源慢的問題。

QQ直播觀看端播放體驗最佳化

注:回源耗時超過10秒,這個是CDN核心偶現問題導致的異常

根據直播監控平臺查詢回源鏈路,發現CDN的內部存在回源慢的問題。

QQ直播觀看端播放體驗最佳化

注:回源耗時超過1700ms,由於主播資料不穩定導致首幀慢

根據直播監控平臺查詢回源鏈路,發現CDN吐流很快但客戶端首幀耗時超過6秒。

QQ直播觀看端播放體驗最佳化

為排查這類問題,在客戶端增加了播放流量上報,每2秒取樣一次,30秒上報一次當前週期內的流量開銷,協助排查首幀慢的問題。

注:某現網使用者訪問直播房間的網路取樣圖,透過上圖可以發現網速是逐步攀升上去的,看著有些不太正常。

流量上報的實現原理:

在ThumbPlayer 收流模組中獲取到播放器“當前緩衝大小”,透過計算單位時間內的緩衝增量,可以得到“當前網速”,最終按照一定頻率上報到伺服器,上報格式如下。

欄位

含義

time

起始時間戳

freq

頻率(例項中2秒採用一個,可配置)

net_data

網速資料陣列KB/s

cache_data

快取資料陣列KB

cache_duration

快取的可播放時長ms

report_time

取樣30秒個點(可配置)

三、播放器緩衝策略分析

經過反覆測試驗證,在播放器引數和策略方面存在以下差異點

名詞解釋:

解析度自適應:

不同網路狀態下,播放器自動播放對應檔位的清晰度,保證直播流暢度。

首緩策略:

首次播放時拉取的直播流大小。

二緩策略:

出現卡頓時,播放器需要拉取的資料大小,才開始播放。

預載入策略:

為加快直播間的首幀速度,提前使用播放器拉取直播流資料,準備首次播放需要的資料。

最佳化前QQ直播點選進房預載入所需流量網速如下

QQ直播觀看端播放體驗最佳化

點選進房時,開始播放當前直播間,會同時啟動下一個直播間的預載入,會預載入12秒的影片資料(由播放器的首緩策略決定)。此時會同時拉取兩條直播流,每條流的位元速率都是4Mpbs,導致在開始播放時的頻寬要求在8Mbps以上。

最佳化前QQ直播上下切房預載入所需流量網速如下

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

抓取播放過程的網路包:

QQ直播觀看端播放體驗最佳化

找到網路包中的FLV直播流資料,FLV影片流是以“FLV”開頭

QQ直播觀看端播放體驗最佳化

將資料回包儲存為FLV檔案,將該檔案放至到flvAnalyser中進行解析,即可得到媒體資訊

QQ直播觀看端播放體驗最佳化

其它直播1和其它直播2,都有H265編碼格式。

QQ直播觀看端播放體驗最佳化

碼流資訊分析結果

QQ直播觀看端播放體驗最佳化

從對比的媒體資料來看,其它直播1和其它直播2,都使用了H265編碼格式,同分辨率下,位元速率更低。因此QQ直播也可以透過下發H265直播流,來進一步降低直播流的位元速率。

解決問題

一、解決上述問題的措施

在大廳頁,開發測試模組,檢測當前網速狀態,是否為弱網。

根據網路評估結果,大廳頁優先選擇播放低位元速率的影片,提高首幀的播放速度。

根據網路評估結果,決定大廳頁是否要自動播放。

根據網路評估結果,決定直播間內是否需要做直播間預載入。

降低標清直播流的位元速率,當前標清位元速率為800Kpbs,在1Mbps無法穩定播放,結合清晰度適當降低位元速率。

當前預載入資料過長,需要解決預載入資料過長問題。

下發H265的影片流,進一步降低播放端的位元速率頻寬要求。

播放器增加IP上報,監控CDN節點是否有聚集性拉流失敗問題。

CDN開啟非同步鑑權,對比同步鑑權,減少CDN回源時長,加快拉取首幀資料的速度。

二、實施技術方案

網路測試模組與MSF測試模組開發,評估網路狀態。根據網路狀態,判斷當前網路狀態是否支援預載入播放、已經適合播放的檔位。

QQ直播觀看端播放體驗最佳化

2。 根據網路狀態、判斷當前網路是否支援大廳頁自動播放,弱網下關閉播放可以提高收發業務信令的速度。

QQ直播觀看端播放體驗最佳化

3。 根據網路狀態選擇對應的清晰度,以及是否支援房間內的預載入。

QQ直播觀看端播放體驗最佳化

4。 整體的弱網策略根據Toggle動態下發,根據灰度效果調試出最優的配置引數。

QQ直播觀看端播放體驗最佳化

5。 預載入資料過長處理方案,在開始預載入時,啟動定時器查詢快取的資料大小,在預載入資料大於4秒(4秒可以配置),暫停下載。等使用者播放該直播間時,再恢復下載。

QQ直播觀看端播放體驗最佳化

6。 CDN回源慢問題監控,對播放器解析連線CDN的IP地址進行上報,開啟CDN的非同步鑑權功能。對異常CASE實時提醒,實時跟進。

QQ直播觀看端播放體驗最佳化

7。 競品直播都支援H265影片下發預載入,因此QQ直播也進行H265解碼驗證與測試,灰度測試H265直播流。下發H265的編碼影片流,藍光的位元速率下降了35%,標清位元速率下降37。5%。整體位元速率大幅度下降,在弱網下播放的流暢度更高,同時也節省頻寬成本。同時驗證了在各個業務場景下的H265解碼情況,目前各個場景都是解碼正常的。

QQ直播觀看端播放體驗最佳化

QQ直播觀看端播放體驗最佳化

QQ直播觀看端播放體驗最佳化

三、最終效果與資料

整體資料對比:

QQ直播觀看端播放體驗最佳化

IOS端部分測試資料:

QQ直播觀看端播放體驗最佳化

QQ直播觀看端播放體驗最佳化

Android端部分測試資料:

QQ直播觀看端播放體驗最佳化

QQ直播觀看端播放體驗最佳化

作者:

fangguozeng

騰訊VATeam

出處:https://mp。weixin。qq。com/s/az3tP8SRMq3pxJ_7FS317A