問題
項(xiàng)目包含實(shí)時(shí)音視頻模塊功能所踊,直接采用的是Agora的教育專版sdk泛粹,具體的業(yè)務(wù)功能包含:1v1私聊
沙咏、1vN群聊
(備注:Agora最多支持17路的音視頻會(huì)話
)食茎,線上經(jīng)常會(huì)收到一些關(guān)于音視頻卡頓的單子丹锹,亟需一輪優(yōu)化稀颁。
分析
通過分析單子,卡頓的問題可以歸為兩類:性能
楣黍、網(wǎng)絡(luò)帶寬
,關(guān)于性能的問題匾灶,這篇文章不做展開,如有大神路過租漂,請(qǐng)不吝賜教阶女。對(duì)于帶寬的問題,不可能讓所有的用戶直接升級(jí)網(wǎng)絡(luò)套餐哩治,所以問題點(diǎn)就出現(xiàn)怎么在保證通話質(zhì)量的前提下秃踩,減少音視頻對(duì)帶寬的依賴。
優(yōu)化
優(yōu)化可以從以下幾個(gè)維度出發(fā)
- 降低直播音視頻質(zhì)量
- 網(wǎng)絡(luò)環(huán)境差時(shí)业筏,自動(dòng)切換畫質(zhì)
- 降級(jí)服務(wù)
降低直播音視頻質(zhì)量
- 默認(rèn)的音視頻配置
//Video
size: AgoraVideoDimension320x240
frameRate: AgoraVideoFrameRateFps15
bitrate: 200
//Audio
audioProfile: AgoraAudioProfileMusicStandard
scenario: AgoraAudioScenarioEducation
碼率與帶寬因素強(qiáng)相關(guān)吞瞪,比如以上這個(gè)配置,需要網(wǎng)絡(luò)的上行帶寬是 200kbps驾孔,但網(wǎng)絡(luò)一般消耗最多的是下行芍秆,下行的話就需要根據(jù)接收的媒體流路數(shù)來計(jì)算了,訂閱遠(yuǎn)端用戶的媒體流的并發(fā)路數(shù)翠勉,這個(gè)只是視頻流的妖啥,還有音頻流,保守還需要50kbps对碌,假如一個(gè)房間里面只有1個(gè)老師一個(gè)學(xué)生荆虱,可以理解音視頻上行加起來最保守需要250kbps
- 降低碼率
選取以下三種碼率,進(jìn)行實(shí)際應(yīng)用對(duì)比效果
- AgoraVideoDimension160x120
- AgoraVideoDimension240x180
- AgoraVideoDimension320x240
結(jié)論:AgoraVideoDimension240x180的畫質(zhì)體驗(yàn)感與AgoraVideoDimension320x240相差無幾,最終選定采用AgoraVideoDimension240x180
3.理論優(yōu)化值
假設(shè)房間1v1教學(xué)
碼率 | 視頻上行帶寬 | 視頻上行帶寬 | 總帶寬(上下行) |
---|---|---|---|
AgoraVideoDimension320x240 | 200 | 50 | 250*2 = 500 |
AgoraVideoDimension240x180 | 120 | 50 | 170*2 = 340 |
帶寬占用降低:160/500 = 32%
網(wǎng)絡(luò)環(huán)境差時(shí)怀读,自動(dòng)切換畫質(zhì)
想法很好诉位,but與Agora溝通之后,被告知目前使用教育專版不支持自動(dòng)切換菜枷,但是又另一種方案叫“雙流模式”苍糠。Aogra文檔
大概的意思是:直播間實(shí)時(shí)音視頻互動(dòng)過程中,一個(gè)用戶只需要推一路流啤誊,也就是初始化sdk配置的碼率岳瞭,可以稱為“大流”。如果開啟了雙流模式蚊锹,這個(gè)用戶除了會(huì)推“大流”瞳筏,還會(huì)自動(dòng)額外發(fā)送一路低分辨率、低碼率的視頻流牡昆,稱為“小流” 姚炕。
特點(diǎn):
- 大流:分辨率更大、碼率更高
- 小流:模糊丢烘、尺寸更小
如果給學(xué)生開啟了雙流模式钻心,會(huì)額外增加學(xué)生的上行帶寬的占用,而且學(xué)生的網(wǎng)絡(luò)環(huán)境會(huì)更加的復(fù)雜铅协,雙流會(huì)帶來更大的消耗,所以學(xué)生不能開摊沉,老師一般都是在公司指定的網(wǎng)絡(luò)環(huán)境中上課狐史,網(wǎng)絡(luò)相對(duì)更加有報(bào)障,因此需要教師端開啟雙流模式说墨。
AgoraVideoDimension240x180碼率下的大小流對(duì)照表
流狀態(tài) | 配置 | 視頻上行帶寬(kbps) | 音頻上行帶寬(kbps) | 總帶寬(kbps) |
---|---|---|---|---|
大流 | 240*180 15 120 | 120 | 50 | 340 |
小流 | 120*160 5 45 | 45 | 50 | 190 |
帶寬占用降低: 150/340 = 44%
降級(jí)服務(wù)
提到降級(jí)服務(wù)骏全,首先想到的就是后端服務(wù)降級(jí),當(dāng)服務(wù)器壓力劇增的情況下,根據(jù)當(dāng)前業(yè)務(wù)情況及流量對(duì)一些服務(wù)和頁(yè)面有策略的降級(jí),以此釋放服務(wù)器資源以保證核心任務(wù)的正常運(yùn)行。
這里講的降級(jí)指的是音視頻回退機(jī)制尼斧,詳細(xì)細(xì)節(jié)解釋參見Agora
這個(gè)方案其實(shí)在教育客戶場(chǎng)景中不太推薦使用姜贡,需要做好完善的UI交互,否則有可能回退會(huì)導(dǎo)致用戶端上報(bào)很多工單棺棵,用戶端會(huì)誤認(rèn)為是故障楼咳。
同時(shí)如果需要使用的話,一般只建議在接收端做處理烛恤,老師端作為發(fā)送端的網(wǎng)絡(luò)一般是有保障的母怜,并且需要在觸發(fā)回退后可以有UI提示給到用戶端去識(shí)別。
補(bǔ)充
Agora SDK內(nèi)部有一套非常復(fù)雜的算法缚柏,會(huì)基于單位時(shí)間內(nèi)的上行苹熏、下行的網(wǎng)絡(luò)數(shù)據(jù),設(shè)備的CPU數(shù)據(jù),結(jié)合配置的videoprofile數(shù)據(jù)計(jì)算后確認(rèn)大小流切換以及音視頻流回退轨域,且沒有提供一個(gè)明確的標(biāo)準(zhǔn)袱耽,因此在測(cè)試的時(shí)候,會(huì)帶來一些難度干发。