腾讯云低延时直播系统架构设计与弱网优化实践
“直播帶貨”可能是2020年最具代表性的詞匯之一,那么傳統(tǒng)電商該如何融合直播系統(tǒng),直播過(guò)程如何保障用戶的最佳觀看體驗(yàn)?本文由騰訊云資深架構(gòu)師何書(shū)照在LiveVideoStack線上分享中的內(nèi)容整理而成,詳解了大規(guī)模、低延時(shí)電商直播系統(tǒng)架構(gòu)設(shè)計(jì)以及電商直播的難點(diǎn)、技術(shù)挑戰(zhàn)與突破。
?
文 / 何書(shū)照
整理 / LiveVideoStack
直播回放:
http://scrmtech.gensee.com/webcast/site/vod/play-6ced83f94af24094b6d8329948addb09
?
本次主要為大家分享最近騰訊云在低延時(shí)電商直播系統(tǒng)架構(gòu)的設(shè)計(jì)與弱網(wǎng)優(yōu)化實(shí)踐。
- 電商直播的難點(diǎn)、挑戰(zhàn)與技術(shù)突破
- 大規(guī)模、低延時(shí)電商直播系統(tǒng)架構(gòu)設(shè)計(jì)
- 低延時(shí)直播系統(tǒng)弱網(wǎng)優(yōu)化與互動(dòng)連麥實(shí)踐
?電商直播的難點(diǎn)、挑戰(zhàn)與技術(shù)突破
電商直播主要分為兩種:其一,當(dāng)前直播或短視頻公司正在擁抱電商,其面臨的挑戰(zhàn)并非直播相關(guān)技術(shù),反而是電商系統(tǒng)的設(shè)計(jì)架構(gòu)。其二,線下電商類客戶正在接觸直播,擁抱疫情期間出現(xiàn)的新形勢(shì),其面臨的挑戰(zhàn)是如何將直播引入到電商系統(tǒng)中。
電商直播其實(shí)是“電商+直播”的過(guò)程,直播過(guò)程是實(shí)時(shí)的流媒體,該流媒體強(qiáng)烈依賴從主播端到觀眾端的整條鏈路,整條鏈路中任何一個(gè)環(huán)節(jié)出問(wèn)題,都可能導(dǎo)致用戶無(wú)法搶購(gòu)商品、轉(zhuǎn)化率降低。
?大規(guī)模、低延時(shí)電商直播系統(tǒng)架構(gòu)設(shè)計(jì)
標(biāo)準(zhǔn)的電商系統(tǒng)的設(shè)計(jì)流程有7步:瀏覽產(chǎn)品 → 拍下訂單 → 支付商品 → 查看訂單 → 查看物流 → 確認(rèn)收貨 → 退貨流程。
如上圖所示有三個(gè)模塊:便捷入口和渠道;快捷、交互、專家導(dǎo)購(gòu)、購(gòu)物體驗(yàn);更好服務(wù)的支持。我認(rèn)為直播屬于第二模塊的直播導(dǎo)購(gòu)。
電商直播最近成為熱點(diǎn),一方面是疫情原因;另一方面,以前的頁(yè)面式或貨架式的電商,是客戶通過(guò)發(fā)現(xiàn)需求尋找不同的產(chǎn)品,再?zèng)Q定是否購(gòu)買。隨著新技術(shù)的逐漸引入,這個(gè)過(guò)程需要更加切合用戶需求,而電商直播符合該趨勢(shì)。趨勢(shì)在于有一個(gè)專業(yè)導(dǎo)購(gòu),幫你匹配痛點(diǎn),替代用戶進(jìn)行貨比三家等購(gòu)物時(shí)普遍的痛點(diǎn),也就是將線下在商場(chǎng)中的體驗(yàn)搬到線上。
從我的觀察來(lái)看,電商直播領(lǐng)域剛剛開(kāi)始,因?yàn)槟壳半娚讨辈サ哪J絼倓偱d起,大家開(kāi)始探討其中的一些體驗(yàn)、互動(dòng)甚至試穿等,未來(lái)還有很大的發(fā)展空間,電商直播將會(huì)是一個(gè)比較火熱的趨勢(shì)。
若要在現(xiàn)有的直播技術(shù)基礎(chǔ)上做好電商直播,首先需要了解業(yè)界的直播架構(gòu)是怎樣的。如上圖,業(yè)界端到端的直播架構(gòu)主要分為四部分,整體的直播流程是:主播端和源站通過(guò)推流SDK或開(kāi)源工具,通過(guò)RTMP協(xié)議推流到流媒體處理中心(一個(gè)中心節(jié)點(diǎn)或中心機(jī)房),其中會(huì)進(jìn)行很多處理,后通過(guò)CDN進(jìn)行分發(fā),最后觀眾端通過(guò)SDK或者Web頁(yè)面的H5觀看直播。
通過(guò)圖中的四大接入流程,將直播融入電商,最重要的接入流程是主播端和觀眾端。主播端需要通過(guò)APP進(jìn)行宏觀的定制開(kāi)發(fā),將以前的電商系統(tǒng)結(jié)合到直播系統(tǒng)中,進(jìn)行界面的互動(dòng),并且集成一些SDK等的推流支持。最重要的是觀眾體驗(yàn)要好,讓觀眾通過(guò)直播引起購(gòu)買欲直至下單。因此,觀眾端需要將當(dāng)前電商能力與音視頻領(lǐng)域的技術(shù)能力良好結(jié)合。
另外直播后臺(tái)需要與電商后臺(tái)互通,做到人、貨、主播間的管理良好匹配,當(dāng)出現(xiàn)大規(guī)模秒殺時(shí),可以及時(shí)更新數(shù)據(jù)。
如圖是根據(jù)近期的客戶需求整理的流程以及工作量
- 主播端的工作量主要在產(chǎn)品和UI側(cè),需要設(shè)計(jì)比較好的產(chǎn)品,產(chǎn)生較好的用戶體驗(yàn)。剩余的技術(shù)工作可以基于原有系統(tǒng)迭代,根據(jù)云上的直播SDK接口很容易接入。
- 服務(wù)端的挑戰(zhàn)是研發(fā)能力,是在電商能力基礎(chǔ)上快速迭代直播CDN能力。由于能力全部云化,因此集成工作很簡(jiǎn)單,其次需要做的是對(duì)房間和用戶的管理。騰訊云有很多DSMO可直接使用,集成工作完成后,再與電商系統(tǒng)相結(jié)合即可。
- 用戶端主要將商品相關(guān)和UI能力復(fù)用。
對(duì)于產(chǎn)品評(píng)估,個(gè)人認(rèn)為方向有兩方面:一是產(chǎn)品和UI側(cè),根據(jù)能力設(shè)計(jì)體驗(yàn)。二是技術(shù)調(diào)研,即主播端、服務(wù)端、用戶端平行開(kāi)發(fā)利用云的能力。
?低延時(shí)直播系統(tǒng)弱網(wǎng)優(yōu)化與互動(dòng)連麥實(shí)踐
圖中架構(gòu)省略了某些直播過(guò)程中需要關(guān)注的、需要處理的點(diǎn)
如上圖為騰訊云直播架構(gòu),主播端通過(guò)SDK推流到上行接入點(diǎn)的數(shù)據(jù)中心,在數(shù)據(jù)中心進(jìn)行相關(guān)處理后,進(jìn)行轉(zhuǎn)碼,再利用CDN三級(jí)回源架構(gòu),通過(guò)用戶被動(dòng)觸發(fā)進(jìn)行拉流。騰訊云的設(shè)計(jì)宗旨是不做無(wú)謂的浪費(fèi),只有當(dāng)觀眾需要某一條數(shù)據(jù)流,發(fā)起拉流轉(zhuǎn)碼時(shí),再轉(zhuǎn)碼。
圍繞整個(gè)騰訊云直播架構(gòu)進(jìn)行拆分,上行分為三種方式:
最常用的是通過(guò)HTTP-FLV協(xié)議分發(fā);通過(guò)HLS協(xié)議分發(fā)大多用在Web端或長(zhǎng)視頻的處理,較少的使用RTMP協(xié)議處理。
主要看下行進(jìn)行對(duì)應(yīng)協(xié)議的選擇,若關(guān)心延時(shí)問(wèn)題,則正常情況下會(huì)選擇RTMP上行推流,端到端的延時(shí)可控制在2-5秒,下行一般選擇HTTP-FLV協(xié)議,其時(shí)延在2-5秒之間,缺點(diǎn)是Web端的兼容問(wèn)題稍差。
Web端較為常用的是HLS協(xié)議,基于HTTP切片,集合一段時(shí)間的數(shù)據(jù)進(jìn)行,其不足是若切片大小不一致會(huì)造成整體延時(shí)較大,一般在10秒以上。RTP協(xié)議是目前的終極優(yōu)化方案,其延時(shí)可達(dá)到100毫秒以下,大部分連麥?zhǔn)鞘褂眠@種方式進(jìn)行。
騰訊云直播架構(gòu)中的延時(shí)分為三部分:
對(duì)以上產(chǎn)生延時(shí)的點(diǎn)進(jìn)行分析,以發(fā)現(xiàn)可優(yōu)化部分。
低延時(shí)直播主要的優(yōu)化方向和技術(shù)方向:
未來(lái)隨著5G甚至6G技術(shù)的發(fā)展,對(duì)于直播方面的優(yōu)化方向會(huì)更多……
直播主要的質(zhì)量監(jiān)控和評(píng)測(cè)方式有以下6點(diǎn):卡頓率、時(shí)延、開(kāi)播失敗率、首幀時(shí)間、視頻幀率、視頻碼率,前四項(xiàng),就可以反映出本場(chǎng)直播的質(zhì)量問(wèn)題。
在未進(jìn)行低延時(shí)優(yōu)化之前的CDN上出現(xiàn)卡頓,如圖為卡頓的判定路徑,首先需要關(guān)注出現(xiàn)卡頓的情況,若房間所有用戶都出現(xiàn)卡頓還是部分用戶卡頓。
全部用戶卡頓的情況則需要檢查上行過(guò)程,上行卡頓會(huì)導(dǎo)致整個(gè)房間都卡頓,首先進(jìn)行同頻對(duì)比,其次確認(rèn)上行推流的幀率、碼率是否正常,檢查流暢度,這些通過(guò)騰訊云的后臺(tái)可以獲取。
部分用戶卡頓的情況需要檢測(cè)下行拉流情況,根據(jù)用戶檢查其回源情況,通過(guò)檢查拉流節(jié)點(diǎn)或者檢查用戶的卡頓日志。
對(duì)于卡頓的優(yōu)化,主播推流端需要進(jìn)行的工作是:
- 網(wǎng)絡(luò)診斷:選用質(zhì)量好的網(wǎng)絡(luò)
- 設(shè)置合理的參數(shù):編碼設(shè)置,如幀率設(shè)置為15以上。
- GOP設(shè)置為合理的值。大型秀場(chǎng)或電商類直播一般設(shè)置為1-2秒。
用戶端需要進(jìn)行的工作:
- 查看CPU使用率,CPU被占用較大,會(huì)出現(xiàn)卡頓
- 使用適合的碼率幀率對(duì)應(yīng)使用的網(wǎng)絡(luò)環(huán)境
- 對(duì)于軟解碼建議開(kāi)啟硬件加速
- 播放緩沖調(diào)整,可將播放端的緩沖加大,當(dāng)網(wǎng)絡(luò)延時(shí)比較大時(shí),可以使用足夠的緩存消除卡頓
- 網(wǎng)絡(luò)情況診斷,進(jìn)行網(wǎng)絡(luò)情況較差,建議切換等提示
- 動(dòng)態(tài)調(diào)整播放碼率:當(dāng)正常使用HLS拉流,可以與多種碼率匹配,使用FLV拉流,騰訊云SDK可以無(wú)縫切換碼率。
以上各種工作情況都可以通過(guò)騰訊云的后臺(tái)進(jìn)行狀態(tài)查詢。
對(duì)于標(biāo)準(zhǔn)直播的延時(shí),通過(guò)CDN的時(shí)延優(yōu)化同樣分為兩部分:
主播推流端:
- 網(wǎng)絡(luò)診斷:選用質(zhì)量好的網(wǎng)絡(luò)
- GOP設(shè)置為合理的值,若所有GOP值,延時(shí)也會(huì)縮小相應(yīng)倍數(shù),但同時(shí)會(huì)出現(xiàn)卡頓率變大的問(wèn)題,因此需要設(shè)置合理的值。一般推薦為1-2秒左右。
- 調(diào)整buffer,特別在OBS推流時(shí),是自適應(yīng)buffer,另外SDK的buffer也需要進(jìn)行適配。
- 服務(wù)器避免轉(zhuǎn)碼,選擇中等碼率直接推流。
用戶播放端:
- 緩存DNS解析的IP,或者并行解析DNS
- 異步鑒權(quán),先播放再鑒權(quán)。一般的鑒權(quán)服務(wù)器是3D設(shè)計(jì),先推流,在后臺(tái)進(jìn)行鑒權(quán),若鑒權(quán)失敗斷開(kāi)后續(xù)推流即可。
- 播放緩沖合理設(shè)置:緩沖越大時(shí)延越長(zhǎng)。若使用IGK或其他開(kāi)源播放器建議設(shè)置GB為1秒內(nèi),網(wǎng)絡(luò)的catch按照用戶對(duì)時(shí)延的要求對(duì)應(yīng)設(shè)置,一般為1-4秒之間(若想要追求非常低的時(shí)延,例如RTMP連麥時(shí)延等,設(shè)置為1秒以內(nèi)即可)。
- 選擇性丟幀:丟幀的策略在CDN和播放端都會(huì)使用,在CDN側(cè)若發(fā)現(xiàn)用戶是一個(gè)慢速用戶,網(wǎng)絡(luò)狀況很差的情況下,CDN就會(huì)選擇性丟幀,同樣播放器也會(huì)選擇同樣策略,以降低延時(shí)播放。
- SDK的快速播放策略:網(wǎng)絡(luò)良好的情況下,按照1.5倍播放速度進(jìn)行緩沖,網(wǎng)絡(luò)狀況降低時(shí),再調(diào)整為慢播放,平衡選擇,以降低延時(shí)、減少卡頓。
若使用騰訊云的SDK推流,上行速率掉底了,但是編碼器的音視頻碼率沒(méi)變化,這時(shí)就會(huì)出現(xiàn)卡頓,出現(xiàn)數(shù)據(jù)的堆積,當(dāng)數(shù)據(jù)堆積超出紅線以上,就說(shuō)明會(huì)出現(xiàn)卡頓和延時(shí)的問(wèn)題。
騰訊云的SDK主要關(guān)注3個(gè)參數(shù):網(wǎng)絡(luò)上行速率SPD、音視頻編碼時(shí)的VRA和ARA,正常情況下,VAR+ARA=SPD
騰訊云SDK的下行回調(diào)參數(shù)會(huì)更加豐富些,針對(duì)這些參數(shù)的調(diào)整可以優(yōu)化延時(shí)和卡頓的問(wèn)題。
騰訊云SDK對(duì)低門檻用戶提供三種模式:自動(dòng)模式(根據(jù)網(wǎng)絡(luò)狀況自動(dòng)調(diào)整)、極速模式(不引入鏈路延時(shí),Catch設(shè)置為1秒左右)、流暢模式,在電商或秀場(chǎng)類的直播情景通常會(huì)選擇極速模式。
若對(duì)延時(shí)和卡頓有更高要求,還有兩種匹配的優(yōu)化方案。其一是基于QUIC的方式優(yōu)化,其二是基于WebRTC進(jìn)行優(yōu)化,騰訊云目前已經(jīng)支持QUIC加速,通過(guò)RTMP推流時(shí)加標(biāo)志即可通過(guò)QUIC方式推流,這種加速方式一般要基于極速模式,下行可以通過(guò)QUIC或WebRTC加速。
目前主流模式是通過(guò)WebRTC進(jìn)行加速,優(yōu)點(diǎn)是SDK變動(dòng)較小?;跇?biāo)準(zhǔn)OBS協(xié)議推流,上行處理過(guò)程即便每一個(gè)過(guò)程都進(jìn)行延時(shí)的缺省,也會(huì)有3-10秒的延時(shí)。
若利用WebRTC策略,上行通過(guò)RTMP標(biāo)準(zhǔn)協(xié)議計(jì)入成功后,通過(guò)WebRTC下行處理,同時(shí)優(yōu)化轉(zhuǎn)碼、CDN分發(fā)等,通過(guò)代理的方式直接通到SDK,當(dāng)客戶端集成SDK或使用Chrome瀏覽器默認(rèn)支持,延時(shí)可以控制在1秒以內(nèi)。
第二個(gè)優(yōu)化策略是使用TRTC技術(shù),連麥互動(dòng)時(shí)通過(guò)WebRTC或RTC進(jìn)行上行承接,基于UDP加速,通過(guò)WebRTC到最近的服務(wù)端與通過(guò)TRTC的客戶端到最近的服務(wù)端兩種策略的時(shí)延都很小,這種策略適用于主播與觀眾連麥或者多個(gè)主播間PK的場(chǎng)景。
在TRTC基于UDP模式下進(jìn)行的數(shù)據(jù)分析,端到端的延時(shí)大概在350毫秒左右,其優(yōu)化點(diǎn)關(guān)注在350毫秒以上的優(yōu)化。
對(duì)于推流端延時(shí)的解決方案,一般在SDK中埋點(diǎn),推流端整體耗時(shí)在100毫秒以內(nèi);采集數(shù)據(jù)耗時(shí)一般在30毫秒左右;預(yù)處理耗時(shí)在30毫秒左右,有特效的耗時(shí)高于無(wú)特效耗時(shí);編碼耗時(shí)一般在50毫秒以內(nèi),低端機(jī)型耗時(shí)較高;推流端耗時(shí)較大的是jitter buffer。
對(duì)于網(wǎng)絡(luò)耗時(shí),通過(guò)分析后,使用WebRTC技術(shù)可以將整個(gè)網(wǎng)絡(luò)的耗時(shí)維持在50毫秒以內(nèi)。
對(duì)于播放端的耗時(shí)一般在100毫秒以內(nèi)。
- 播放的解碼耗時(shí)一般在20毫秒以內(nèi),也有5%左右的超過(guò)50毫秒;
- 渲染耗時(shí)一般在20毫秒以內(nèi),有特效的耗時(shí)高于無(wú)特效耗時(shí);
- 在播放端影響較大的是網(wǎng)絡(luò)波動(dòng),引入的耗時(shí)是20-200毫秒不等。
圖中表格數(shù)據(jù)為協(xié)議詳細(xì)對(duì)比,網(wǎng)絡(luò)質(zhì)量波動(dòng)時(shí),播放延時(shí)不會(huì)越來(lái)越大,網(wǎng)絡(luò)恢復(fù)后延遲可以及時(shí)恢復(fù)。
WebRTC技術(shù)的網(wǎng)絡(luò)控制和播放策略是流暢優(yōu)先,弱網(wǎng)環(huán)境下依然可以保障能播放,不會(huì)一直卡住。
在低延時(shí)直播領(lǐng)域,除了傳統(tǒng)直播和WebRTC直播兩個(gè)主要的優(yōu)化方向之外,還有基于QUIC方式的優(yōu)化。基于QUIC的模式,大部分應(yīng)用于CDN下行。
在弱網(wǎng)條件下對(duì)打開(kāi)和關(guān)閉QUIC兩種情況下的卡頓率進(jìn)行比較,可以看出,打開(kāi)QUIC比關(guān)閉QUIC的卡頓率稍好?,F(xiàn)階段一些大型廠商,也都在進(jìn)行QUIC相關(guān)的優(yōu)化和測(cè)試。
同樣,對(duì)打開(kāi)QUIC和關(guān)閉QUIC條件下的時(shí)延情況進(jìn)行對(duì)比,網(wǎng)絡(luò)穩(wěn)定狀態(tài)下,打開(kāi)QUIC時(shí)延可以降低100毫秒左右。
總結(jié)
以上是生活随笔為你收集整理的腾讯云低延时直播系统架构设计与弱网优化实践的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 【WebRTC专场】WebRTC的下个1
- 下一篇: 【线上分享】如何使用开源SFU构建RTC