
在國(guó)內(nèi)錯(cuò)綜復(fù)雜的網(wǎng)絡(luò)情況下,如何構(gòu)建一個(gè)高并發(fā)、穩(wěn)定、低延時(shí)的直播系統(tǒng)?在12月21日,網(wǎng)心科技直播技術(shù)負(fù)責(zé)人李浩做客CSDN網(wǎng)絡(luò)公開(kāi)課,為數(shù)百名技術(shù)人員現(xiàn)場(chǎng)解答關(guān)于直播系統(tǒng)搭建方面的一系列問(wèn)題。
李浩總結(jié),要搭建一個(gè)能夠?yàn)橛脩?hù)穩(wěn)定提供優(yōu)秀觀(guān)看體驗(yàn)的直播系統(tǒng),一定要注意三大關(guān)鍵指標(biāo),即卡頓、延時(shí)和首屏打開(kāi)速度。而針對(duì)目前如火如荼的直播市場(chǎng),李浩認(rèn)為,無(wú)論內(nèi)容和運(yùn)營(yíng)手段如何花樣翻新,如果沒(méi)有核心技術(shù)作為保障,不能保證這三大指標(biāo)的合格,直播平臺(tái)依然很難取得市場(chǎng)競(jìng)爭(zhēng)的勝利。
以下為李浩的課程內(nèi)容整理:
一.不同直播業(yè)態(tài)對(duì)應(yīng)不同的技術(shù)要求
直播平臺(tái)細(xì)分為各種不同的業(yè)態(tài)。目前主流的幾種業(yè)態(tài),分別是秀場(chǎng)類(lèi)、游戲類(lèi)、生活類(lèi)這三種直播。此外事件類(lèi)、互動(dòng)類(lèi)、教育類(lèi)、監(jiān)控類(lèi)直播這幾種業(yè)態(tài)也較為常見(jiàn)。
盡管這些業(yè)態(tài)里基本上都有10億級(jí)獨(dú)角獸公司產(chǎn)生,但每一種業(yè)態(tài)對(duì)系統(tǒng)的核心要求卻是完全不一樣的:
● 秀場(chǎng)和生活類(lèi)直播:主播和觀(guān)眾網(wǎng)絡(luò)環(huán)境相對(duì)更復(fù)雜,因此核心體驗(yàn)是流暢度,可以犧牲碼率來(lái)提高流暢度,自適應(yīng)碼率、幀率等都是常見(jiàn)的優(yōu)化手段;
● 游戲類(lèi)直播:為了保證體驗(yàn)效果,要求的是高清晰度和高流暢度,端到端延時(shí)可以做出一些讓步來(lái)?yè)Q取壓縮率更高的編碼參數(shù),容納更高幀率和清晰度的內(nèi)容;
● 事件類(lèi)直播:核心要求是穩(wěn)定性,包括高可靠上行;
● 互動(dòng)類(lèi)直播:核心要求則是端到端的延時(shí),為此網(wǎng)絡(luò)波動(dòng)時(shí)丟棄視頻幀等是可以接受的。
因此需要注意不同的業(yè)務(wù)形態(tài),后端所用的技術(shù)是完全不一樣的。如互動(dòng)類(lèi)的直播的超低延時(shí)方案,4K和VR這種對(duì)用戶(hù)帶寬滿(mǎn)載利用率的直播場(chǎng)景,通用CDN技術(shù)可能無(wú)法做到覆蓋。
盡管如此,李浩還是認(rèn)為現(xiàn)在搭建一個(gè)直播系統(tǒng)要遠(yuǎn)比之前來(lái)的容易,因?yàn)榇罅抗ぷ饕呀?jīng)被CDN和終端服務(wù)商幫忙解決了,需要自己動(dòng)手的地方少了很多。
二.直播系統(tǒng)的核心業(yè)務(wù)需求
那么搭建直播系統(tǒng)時(shí),需要重點(diǎn)關(guān)注的核心功能都有哪些?李浩對(duì)此一一進(jìn)行了解析。
A.采集和播放
目前視頻的采集已經(jīng)相對(duì)容易許多,因?yàn)槭謾C(jī)功能相對(duì)完整,不像PC時(shí)代需要面對(duì)不同的攝像頭驅(qū)動(dòng),所以需要核心處理的技術(shù)點(diǎn)是網(wǎng)絡(luò)適配。技術(shù)人員需要根據(jù)自身的網(wǎng)絡(luò)條件去調(diào)整編碼參數(shù),以及多協(xié)議的拉流、軟硬件的解碼、多分辨率追幀等基礎(chǔ)需求。如果在此基礎(chǔ)之上,還能解決好對(duì)緩存的管理、數(shù)據(jù)同步等高端需求的話(huà),那直播的整體播放體驗(yàn)就比較流暢了。
B.分發(fā)和媒體處理
分發(fā)和媒體處理的工作,現(xiàn)在除了“特別特別大”的平臺(tái),一般都直接由CDN服務(wù)商來(lái)解決了。因?yàn)槟壳癈DN服務(wù)已比較完善,跟直播匹配的一些功能,如上下線(xiàn)通知、協(xié)議轉(zhuǎn)換、弱網(wǎng)傳輸,以及像轉(zhuǎn)碼、水印、增益、截圖、錄制這樣的功能都已提供。
C.功能系統(tǒng)
需要直播平臺(tái)自身核心打造的,是功能系統(tǒng)。除去賬戶(hù)系統(tǒng),還有如人氣、道具、打賞、支付、抽獎(jiǎng)等功能系統(tǒng)都是必備的。特別是彈幕功能,是對(duì)直播平臺(tái)最核心的技術(shù)挑戰(zhàn)。主要是彈幕的發(fā)送量會(huì)很大,直播在線(xiàn)人數(shù)動(dòng)輒幾十萬(wàn),彈幕的發(fā)送頻率又很高,1、2秒就會(huì)發(fā)一條消息,巨大的廣播量對(duì)系統(tǒng)壓力很大。所以一般直播平臺(tái)都會(huì)采取分區(qū)的方式來(lái)加以解決,而如何分區(qū),又在什么情況下合并分區(qū),以維持合適的人氣,這里面還是有很多邏輯上的問(wèn)題是要去解決的。
D.運(yùn)營(yíng)系統(tǒng)
運(yùn)營(yíng)系統(tǒng)也非常核心。視頻的黃反審查,聊天內(nèi)容的審核,還有一鍵斷播、數(shù)據(jù)統(tǒng)計(jì)、質(zhì)量監(jiān)控這些都必不可少,因?yàn)橐灰鎸?duì)內(nèi)容監(jiān)管審查的壓力,其次是要能監(jiān)測(cè)到全國(guó)不同區(qū)域的質(zhì)量效果。
不過(guò)李浩指出,即便是把上述功能都實(shí)現(xiàn)了,也只能說(shuō)搭建出一個(gè)基本可以跑的一個(gè)直播產(chǎn)品而已,需要提升的地方還很多。
三.直播的關(guān)鍵性技術(shù)知識(shí)
接下來(lái),李浩對(duì)直播的一些關(guān)鍵性知識(shí)進(jìn)行了詳細(xì)的解釋?zhuān)?/p>
A.視頻幀
視頻幀其實(shí)就是一個(gè)一個(gè)的視頻單元,視頻單元分成三種,分別叫I、P、B幀。I幀可以簡(jiǎn)單的理解為就是一張圖片,體積也會(huì)比較大,B幀和P幀它是一個(gè)參考幀。對(duì)一個(gè)直播流來(lái)說(shuō),最核心的幀是I幀,由I幀引申出來(lái)的就叫GOP。通常在直播上看到的延時(shí),其實(shí)是內(nèi)部直播流緩存延時(shí),叫GOP cache。對(duì)于一個(gè)CDN系統(tǒng)來(lái)說(shuō),傳輸延時(shí)只是延時(shí)的一小部分,還有一部分是產(chǎn)生在用戶(hù)流里面的GOP cache。所以直播平臺(tái)如果要降低延時(shí),首先建議調(diào)一下上行流的編碼參數(shù),調(diào)低I幀間隔。

B.碼率
碼率也分三種,CBR、VBR、ABR。CBR是固定碼率,可用于保證網(wǎng)絡(luò)專(zhuān)線(xiàn)帶寬是可控的場(chǎng)景。VBR是可變碼率,它不好的地方在于,畫(huà)面變化劇烈,它的碼率跳變會(huì)特別大。所以在直播的實(shí)際應(yīng)用中,ABR用的最多,即在質(zhì)量和碼率上做一個(gè)均分,控制一個(gè)平均值。
C.編碼、封裝、傳輸
封裝的功能相當(dāng)于一個(gè)桶,它可以把不同編碼格式的音視頻裝在一起,好的封裝格式是能兼容很多種的音視頻的編碼格式的。編碼的功能是把原始數(shù)據(jù)壓縮的更小,像視頻編碼這種原始信息量大的,目前的編碼方式已經(jīng)把信息冗余度做的很低,如果出現(xiàn)丟幀,會(huì)導(dǎo)致視頻的花屏。
李浩提醒直播技術(shù)人員,一定要了解這些基礎(chǔ)知識(shí),否則你很難理解直播的延遲產(chǎn)生在哪,以及為什么會(huì)發(fā)生卡頓。
四.直播的系統(tǒng)架構(gòu)

對(duì)一個(gè)直播平臺(tái)來(lái)說(shuō),主播就相當(dāng)于是一個(gè)數(shù)據(jù)源,各地不同的觀(guān)眾相當(dāng)于是訂閱者,其實(shí)就是生產(chǎn)者和訂閱者模型。怎么樣把這個(gè)生產(chǎn)者生產(chǎn)的信息,比較高效的送到訂閱者手上,其實(shí)就是一個(gè)應(yīng)用層的組播結(jié)構(gòu),需要做很多應(yīng)用層層面的一些考量,比如中轉(zhuǎn)跳數(shù)、網(wǎng)絡(luò)距離、中轉(zhuǎn)帶寬成本和匯聚效果等。
推流模式就是主播直接把流推到CDN節(jié)點(diǎn),CDN節(jié)點(diǎn)經(jīng)過(guò)自己的網(wǎng)頁(yè)加速,分發(fā)到真正觀(guān)看的用戶(hù)。直播所有的功能,像轉(zhuǎn)碼水印,轉(zhuǎn)存截圖、轉(zhuǎn)點(diǎn)播,所有的這種功能,包括數(shù)據(jù)統(tǒng)計(jì)對(duì)外提供一些API,都會(huì)在CDN里面做。
一家直播廠(chǎng)商可能會(huì)選用多家CDN,或者是有自建的CDN。每個(gè)CDN最核心的一點(diǎn),是怎么在國(guó)內(nèi)這種錯(cuò)綜復(fù)雜這個(gè)網(wǎng)絡(luò)環(huán)境內(nèi),去組一張分發(fā)比較快速、容災(zāi)性能比較強(qiáng),然后相對(duì)節(jié)省成本的一張?zhí)摂M網(wǎng)。
所以在整個(gè)CDN里面,最核心的就是傳輸組網(wǎng),其次是在于功能系統(tǒng)的健壯。一個(gè)CDN、一個(gè)直播系統(tǒng)做的好壞,成敗其實(shí)一部分在于傳輸?shù)捻槙?,另外一部分在于你是否穩(wěn)健。
五.直播的三大核心指標(biāo)
雖然直播對(duì)技術(shù)的要求錯(cuò)綜復(fù)雜,但李浩還是表示,直播的關(guān)鍵的指標(biāo)其實(shí)只有三個(gè):卡頓、延時(shí)、首屏打開(kāi)速度。做好這三大關(guān)鍵指標(biāo),直播的用戶(hù)體驗(yàn)就有了保證。
A.卡頓
卡頓的解決與延時(shí)則在一定程度上是矛盾的??D產(chǎn)生的原因有三種,第一是主播上行卡頓,所有的觀(guān)眾都會(huì)卡;第二是CDN內(nèi)部網(wǎng)絡(luò)帶來(lái)的卡頓,例如中轉(zhuǎn)網(wǎng)絡(luò)產(chǎn)生了波動(dòng),節(jié)點(diǎn)負(fù)載沒(méi)控制好,或者是一些組網(wǎng)策略出問(wèn)題,第三就是被調(diào)度和終端網(wǎng)絡(luò)問(wèn)題,好比DSN錯(cuò)配、或者最后一跳網(wǎng)絡(luò)抖動(dòng)。要有監(jiān)控手動(dòng)能發(fā)現(xiàn)主要問(wèn)題點(diǎn)針對(duì)性處理。
B.延時(shí)
除了前面說(shuō)的視頻GOP緩存,其次延遲主要來(lái)自累積,除了做跳幀等邏輯以外,還可以通過(guò)改變傳輸協(xié)議的方法來(lái)提高,對(duì)于延時(shí)控制要求高的直播業(yè)務(wù),如互動(dòng)類(lèi)直播,根本不會(huì)采用TCP這樣的協(xié)議來(lái)做傳輸,而會(huì)選擇UDP協(xié)議。因?yàn)閷?duì)于這種直播來(lái)說(shuō),視頻的所有數(shù)據(jù)都可以放棄,但要優(yōu)先保證音頻的即時(shí)性。
C.首屏打開(kāi)速度
首屏打開(kāi)則考驗(yàn)的是直播CDN的組網(wǎng)方式、網(wǎng)絡(luò)覆蓋率和傳輸協(xié)議的優(yōu)化程度。李浩特別提醒說(shuō),今年對(duì)首屏打開(kāi)速度的要求越來(lái)越高,秒開(kāi)已經(jīng)是去年的指標(biāo)要求,今年要細(xì)化到幾百毫秒,做不到這個(gè)級(jí)別就沒(méi)有競(jìng)爭(zhēng)優(yōu)勢(shì)。在這一點(diǎn)上,選擇一個(gè)靠譜的CDN就尤為重要了。