主播與粉絲連麥互動(dòng)火了!云帆加速帶你解密背后的直播連麥技術(shù)
前言:隨著帶寬、WiFi的不斷升級(jí),手機(jī)的普及,直播技術(shù)不斷突破,各種門(mén)檻在降低,全民直播時(shí)代已經(jīng)來(lái)臨。直播也深入到各行各業(yè),比如說(shuō)在線(xiàn)教育,還有財(cái)經(jīng)行業(yè)等,也漸漸成為各行各業(yè)的標(biāo)配。
云帆加速自成立以來(lái)就一直致力于流媒體領(lǐng)域企業(yè)服務(wù),尤其對(duì)于直播,目前已經(jīng)推出了針對(duì)于不同場(chǎng)景的直播云解決方案,在保證廣大用戶(hù)使用體驗(yàn)的前提下,為客戶(hù)節(jié)省更多的研發(fā)成本。無(wú)論是傳統(tǒng)企業(yè)轉(zhuǎn)型,或者是創(chuàng)業(yè)企業(yè),云帆加速都將為其直播化提供針對(duì)性的解決方案。目前云帆加速已經(jīng)與流媒體領(lǐng)域50+行業(yè)top級(jí)客戶(hù)建立合作關(guān)系,并提供服務(wù)。
據(jù)記者了解,對(duì)直播解決方案中的連麥這一塊進(jìn)行技術(shù)分解,其實(shí)對(duì)于連麥而言,有這么幾個(gè)關(guān)鍵點(diǎn):是否有足夠低的延時(shí),以保證實(shí)時(shí)互動(dòng)、是否兼容所有手機(jī)終端來(lái)覆蓋所有用戶(hù)及協(xié)議的選擇。
什么是連麥?
了解移動(dòng)直播連麥實(shí)現(xiàn)架構(gòu),需要定義一下參與的角色,首先介紹客戶(hù)端(如圖1),按用戶(hù)在連麥直播中的角色差異分別定義為:主播、連麥者(粉絲)、觀(guān)眾。
主播,指當(dāng)前正在直播的主播,相當(dāng)于主持人,可以主動(dòng)邀請(qǐng)用戶(hù)連麥或批準(zhǔn)當(dāng)前觀(guān)眾的連麥請(qǐng)求,也可以關(guān)閉某個(gè)連麥者的連麥;主播端視頻一般都是全屏顯示。
連麥者(粉絲),指參與當(dāng)前連麥的觀(guān)眾,可以向主播申請(qǐng)連麥,或接受主播的連麥邀請(qǐng),進(jìn)行音視頻連麥,當(dāng)不想連麥后,連麥者可以主動(dòng)斷開(kāi);連麥者的視頻一般只在右側(cè)的某個(gè)區(qū)域顯示,視頻尺寸較小,以不影響主播視頻顯示為好。
觀(guān)眾,是移動(dòng)直播的觀(guān)眾。
下面介紹下移動(dòng)直播視頻云平臺(tái)的結(jié)構(gòu),為簡(jiǎn)化模型不考慮數(shù)據(jù)存儲(chǔ)及各類(lèi)型服務(wù)器集群的情況,僅描述移動(dòng)直播連麥所需要的最簡(jiǎn)單服務(wù)器類(lèi)型,如圖2:
服務(wù)器集群,用于管理主播和主播、主播和連麥者的連線(xiàn)會(huì)話(huà),實(shí)現(xiàn)音視頻云端的調(diào)度和計(jì)算能力,具體會(huì)包括信令服務(wù)器,流媒體服務(wù)器集群等。
CDN網(wǎng)絡(luò),接收主播和連麥者發(fā)送過(guò)來(lái)的媒體數(shù)據(jù),提供緩沖,存儲(chǔ)和轉(zhuǎn)發(fā)的能力,分發(fā)直播內(nèi)容給觀(guān)眾。
下面介紹其特點(diǎn),與主播的單向直播相比,連麥實(shí)現(xiàn)的技術(shù)難點(diǎn)增大很多,具體如下:
音頻混流,主播將自己的聲音與連麥者的聲音做混音。
視頻混流,主播將自己的畫(huà)面與連麥者的畫(huà)面做視頻合成。
降噪,去除直播環(huán)境中的噪音,嘯叫。
回聲消除,消除揚(yáng)聲器和麥克風(fēng)的近端回聲。
低延遲互動(dòng),延遲抖動(dòng)500ms~800ms之間,保證主播和連麥者之間能夠?qū)崟r(shí)音視頻互動(dòng)。
主播與粉絲間的連麥互動(dòng)場(chǎng)景
參與移動(dòng)直播連麥的架構(gòu)中共涉及4個(gè)角色,分別是主播、連麥者、觀(guān)眾和服務(wù)器。從移動(dòng)直播連麥互動(dòng)場(chǎng)景中的角色來(lái)分析,包含2種角色間的連麥:
2.1.主播與粉絲連麥
主播與連麥者連麥,主播可以與其中的一位粉絲或多位粉絲互動(dòng),并且其他粉絲可以觀(guān)看這個(gè)互動(dòng)的過(guò)程。連麥互動(dòng)這個(gè)功能瞬間可以提高直播平臺(tái)普通用戶(hù)的參與感與幸福感,增加用戶(hù)粘性。
2.2.主播與其他主播連麥
主播與其他主播之間連麥,主播之間需要連麥互動(dòng)拉人氣,互相增加粉絲,帶動(dòng)主播間的粉絲、經(jīng)濟(jì)雙贏(yíng)。
理論上來(lái)說(shuō),這4個(gè)角色都可以負(fù)責(zé)音頻視頻的混流,即實(shí)現(xiàn)連麥的合成功能,從而確保每個(gè)觀(guān)眾看到連麥后的視頻和聽(tīng)到音頻。從成本角度考慮,在服務(wù)器端混流觀(guān)眾端延遲大,成本比較高,不具優(yōu)勢(shì)。我們只討論主播端混流和觀(guān)眾端混流的兩種方案。
主播與粉絲連麥互動(dòng)解決方案
主播與粉絲間連麥互動(dòng)的解決方案:
3.1 主播端混流
該實(shí)現(xiàn)思路要求主播分別把自己的視頻數(shù)據(jù)與連麥粉絲的視頻數(shù)據(jù)合成,然后把合成好的視頻流、主播自己的的音頻數(shù)據(jù)、連麥粉絲的音頻數(shù)據(jù)推給CDN網(wǎng)絡(luò),并經(jīng)由CDN分發(fā)給所有觀(guān)眾。故主播端手機(jī)負(fù)擔(dān)的任務(wù)更重,對(duì)手機(jī)性能和網(wǎng)絡(luò)性能要求也比普通直播時(shí)更高一些。主播與粉絲連麥,主播端混流部分的基本流程如圖3所示:
主播、粉絲建立連麥會(huì)話(huà)后,均向CDN網(wǎng)絡(luò)推原始音視頻流。主播、連麥者從CDN網(wǎng)絡(luò)獲取對(duì)方的媒體數(shù)據(jù)。
主播從CDN網(wǎng)絡(luò)拉取連麥者的音視頻數(shù)據(jù)后,在主播端進(jìn)行相應(yīng)的混流工作。一方面用于自己的視頻顯示和聲音播放,另一方面發(fā)給CDN網(wǎng)絡(luò),用于觀(guān)眾端拉流觀(guān)看;連麥粉絲拿到主播視頻、音頻,進(jìn)行回聲消除、降噪等工作,用于自己的視頻顯示和聲音播放。
主播把自己的視頻數(shù)據(jù)、連麥粉絲的視頻數(shù)據(jù)進(jìn)行畫(huà)面合成,替代主播原始流的視頻畫(huà)面,并將主播自己的音頻數(shù)據(jù)、連麥粉絲的音頻數(shù)據(jù)推到CDN網(wǎng)絡(luò),用于觀(guān)眾端拉流觀(guān)看。主播進(jìn)行的混流工作包括:畫(huà)面合成、回聲消除、降噪、混音。
觀(guān)眾端拉取主播端混合好的1路視頻數(shù)據(jù)、2路音頻數(shù)據(jù)后,觀(guān)看合成畫(huà)面。觀(guān)看到的混流畫(huà)面:A大窗、B小窗。
主播與粉絲連麥,主播端混流方案的優(yōu)劣勢(shì):
劣勢(shì):主播端壓力大,主播端需要視頻混流以及面對(duì)計(jì)算壓力,對(duì)手機(jī)性能和網(wǎng)絡(luò)性能要求也比普通直播時(shí)更高一些,不適合多人連麥。
優(yōu)勢(shì):解決上行帶寬瓶頸,推1路視頻流,不存在主播端上行帶寬瓶頸;成本低,它在兩個(gè)方面降低成本:計(jì)算資源和網(wǎng)絡(luò)帶寬;
3.2 觀(guān)眾端混流
該實(shí)現(xiàn)思路要求觀(guān)眾分別拉主播、連麥者的音視頻數(shù)據(jù),然后在觀(guān)眾端進(jìn)行混流工作。主播與粉絲進(jìn)行連麥,觀(guān)眾端混流的部分的基本流程如圖4所示:
主播、粉絲建立連麥會(huì)話(huà)后,均向CDN網(wǎng)絡(luò)推原始音視頻流。
主播、連麥者從CDN網(wǎng)絡(luò)使獲取對(duì)方的媒體數(shù)據(jù),在自己端進(jìn)行回聲消除、降噪等工作,用于自己的視頻顯示和聲音播放,并發(fā)送自己的音視頻數(shù)據(jù)給CDN網(wǎng)絡(luò)以便觀(guān)眾端拉流并進(jìn)行響應(yīng)的混流工作。
觀(guān)眾端拉取2路視頻數(shù)據(jù)、2路音頻數(shù)據(jù),并進(jìn)行相應(yīng)的混流工作。其混流工作包括:畫(huà)面合成、回聲消除、降噪、混音。
觀(guān)眾端混流后,觀(guān)看到的混流畫(huà)面:A大窗、B小窗顯示。
主播與粉絲連麥,觀(guān)眾端混流方案的優(yōu)劣勢(shì):
劣勢(shì):觀(guān)眾端壓力大,觀(guān)眾需拉多路流進(jìn)行混流,觀(guān)眾端的下行帶寬壓力大; 解碼壓力大,觀(guān)眾需解碼多路流,開(kāi)銷(xiāo)比較高;
優(yōu)勢(shì):簡(jiǎn)單易實(shí)現(xiàn),可以快速搭建;支持多人連麥;
主播與主播間的連麥互動(dòng)解決方案
4.1 觀(guān)眾端混流
該實(shí)現(xiàn)思路要求觀(guān)眾分別把拉取所有連麥主播的音視頻數(shù)據(jù),然后在觀(guān)眾端進(jìn)行混流工作。主播與主播連麥,觀(guān)眾端進(jìn)行混流的基本流程如圖6所示:
主播與主播建立連麥會(huì)話(huà)后,主播均向CDN網(wǎng)絡(luò)推原始音視頻流。
主播均從CDN網(wǎng)絡(luò)使獲取對(duì)方的媒體數(shù)據(jù),在自己端進(jìn)行回聲消除、降噪等工作,用于自己的視頻顯示和聲音播放,并發(fā)送自己的音視頻數(shù)據(jù)給CDN網(wǎng)絡(luò)以便觀(guān)眾端拉流并進(jìn)行響應(yīng)的混流工作。
觀(guān)眾端拉取2路視頻數(shù)據(jù)、2路音頻數(shù)據(jù)后,進(jìn)行相應(yīng)的混流工作。其混流工作包括:畫(huà)面合成、回聲消除、降噪、混音。
觀(guān)眾端混流后,觀(guān)看合成畫(huà)面。如果A主播與B主播在連麥前,C1作為A主播的觀(guān)眾,C2作為B主播的觀(guān)眾,連麥后,C1觀(guān)看到的混流畫(huà)面:A大窗、B小窗,C2觀(guān)看到的混流畫(huà)面:B大窗、A小窗。
主播與主播連麥,觀(guān)眾端混流方案的優(yōu)劣勢(shì):
劣勢(shì):觀(guān)眾端壓力大,觀(guān)眾需拉多路流進(jìn)行混流,觀(guān)眾端的下行帶寬壓力大;解碼壓力大,觀(guān)眾需解碼多路流,開(kāi)銷(xiāo)比較高;
優(yōu)勢(shì):簡(jiǎn)單易實(shí)現(xiàn),可以快速搭建;支持多人連麥。
云帆加速互動(dòng)直播解決方案的優(yōu)勢(shì)
5.1 主播端合流方案都基于自研UDP私有協(xié)議,解決主播端合流引起的帶寬瓶頸的問(wèn)題
云帆加速基于UDP私有協(xié)議的主播端混流連麥互動(dòng)方案,除了具有主播端混流連麥方案節(jié)省成本的優(yōu)勢(shì),通過(guò)技術(shù)創(chuàng)新以及大量測(cè)試、實(shí)踐,包含更多具有優(yōu)勢(shì)的技術(shù)特性:
解決了主播端混流的上行帶寬瓶頸,主流的主播端混流方案是通過(guò)2路RTMP流實(shí)現(xiàn)。連麥前,主播向CDN網(wǎng)絡(luò)推送1路音視頻;連麥后,主播推送2路視頻流,2路音頻流(自己的音視頻數(shù)據(jù)、連麥者的音視頻數(shù)據(jù))給CDN網(wǎng)絡(luò),在主播端混流,消耗的上行網(wǎng)絡(luò)帶寬比連麥前增加了一倍。
云帆加速的主播端混流方案是通過(guò)基于UDP私有協(xié)議的1路視頻流實(shí)現(xiàn)。與主流方案的差異在于:
整個(gè)連麥互動(dòng)是基于自研的UDP私有協(xié)議;在主播端混流后,用合成的視頻畫(huà)面替換主播原始流的視頻畫(huà)面,始終只推1路視頻流到CDN網(wǎng)絡(luò),連麥后,僅增加了推送連麥者音頻所消耗的上行帶寬。
按照我國(guó)的網(wǎng)絡(luò)國(guó)情,如果下行網(wǎng)絡(luò)帶寬是100M bps,那么上行網(wǎng)絡(luò)帶寬相對(duì)應(yīng)一般是1M bps,好一點(diǎn)的會(huì)到4M bps。根據(jù)云帆加速的經(jīng)驗(yàn),移動(dòng)端360P分辨率的高清視頻,音視頻流平均的碼率是864 kbps,其中視頻平均碼率占到800 kbps。
主流主播端連麥方案在連麥后將會(huì)推兩路流:1路主播音視頻流、1路連麥者視頻流,因此主流連麥方案推2路音視頻的碼率大概是1.73Mbps,而云帆加速主播端混流方案,始終推1路視頻流、連麥后的增加連麥者的音頻,總共碼率是0.93 Mbps,解決了主流主播端混流方案的上行帶寬瓶頸問(wèn)題。
UDP可靠傳輸:所有主播端的上行推流不再依賴(lài)基于TCP的RTMP協(xié)議,而是使用云帆加速自研的基于UDP的高性能私有協(xié)議,傳輸層的QoS保障更加智能高效。
自適應(yīng)碼率、自適應(yīng)幀率:使用基于網(wǎng)絡(luò)狀態(tài)的音視頻碼率自適應(yīng)算法,根據(jù)當(dāng)前網(wǎng)絡(luò)的丟包、時(shí)延自適應(yīng)降低或者升高音頻和視頻的碼率和幀率,通過(guò)這個(gè)方法來(lái)降低網(wǎng)絡(luò)的擁塞,提高通話(huà)質(zhì)量;
可支持更多主播交互:目前支持2人視頻,可擴(kuò)展為多人主播、多人連麥互動(dòng)、多人純音頻連麥互動(dòng);
支持大小窗口切換:在主播端支持自定義大小流切換,自主選擇視頻大小窗口的切換。
5.2 全程優(yōu)化技術(shù)細(xì)節(jié)
連麥技術(shù)包含4大技術(shù)要點(diǎn):網(wǎng)絡(luò)、視頻、音頻、適配。我們的對(duì)這4個(gè)方面進(jìn)行了全程優(yōu)化。
5.2.1 網(wǎng)絡(luò)優(yōu)化
網(wǎng)絡(luò)傳輸協(xié)議:方案支持TCP/自研UDP私有協(xié)議/自研UDP私有協(xié)議+RTMP 協(xié)議,我們建議采用UDP或者UDP+RTMP的方案。
選擇TCP在網(wǎng)絡(luò)狀況可控的情況下是個(gè)不錯(cuò)的方案,但在大規(guī)??缇W(wǎng)和終端網(wǎng)絡(luò)不穩(wěn)定的情況下會(huì)出現(xiàn)卡頓,延遲,斷線(xiàn)率高。
自研UDP私有協(xié)議:整個(gè)UDP傳輸層使用前向糾錯(cuò)FEC算法進(jìn)行智能保護(hù),最大限度上保證實(shí)時(shí)音視頻通話(huà)的效果。根據(jù)我們的實(shí)際測(cè)試,在使用上訴QoS保障策略以后,音視頻通話(huà)可以抗20%丟包和800ms的網(wǎng)絡(luò)抖動(dòng)。
HTTP DNS解析優(yōu)化:本機(jī)緩存直播和播放使用域名的解析結(jié)果,對(duì)域名進(jìn)行預(yù)解析,每次需要直播推流和播放的時(shí)候不需要再進(jìn)行DNS過(guò)程。此處可節(jié)省幾十到幾百毫秒的打開(kāi)延遲。
智能Qos保障:推流端會(huì)根據(jù)當(dāng)前上行網(wǎng)絡(luò)情況控制音視頻數(shù)據(jù)發(fā)包和編碼,同時(shí)會(huì)根據(jù)網(wǎng)絡(luò)情況選擇合適的策略控制音視頻發(fā)送。比如網(wǎng)絡(luò)很差的情況下,推流端會(huì)優(yōu)先發(fā)送音頻數(shù)據(jù),保證用戶(hù)能聽(tīng)到聲音,在一定間隔內(nèi)發(fā)關(guān)鍵幀數(shù)據(jù),保證用戶(hù)在一定時(shí)間間隔之后能看到一些畫(huà)面的變化。
網(wǎng)絡(luò)狀態(tài)反饋:會(huì)對(duì)推流端的網(wǎng)絡(luò)狀態(tài)進(jìn)行實(shí)時(shí)監(jiān)測(cè)并進(jìn)行上報(bào)反饋。
自適應(yīng)碼率、自適應(yīng)幀率:使用基于網(wǎng)絡(luò)狀態(tài)的音視頻碼率自適應(yīng)算法,根據(jù)當(dāng)前網(wǎng)絡(luò)的丟包、時(shí)延自適應(yīng)降低或者升高音頻和視頻的碼率和幀率,通過(guò)這個(gè)方法來(lái)降低網(wǎng)絡(luò)的擁塞,提高通話(huà)質(zhì)量;
弱網(wǎng)推流優(yōu)化:基于UDP定制包頭實(shí)現(xiàn)傳輸預(yù)測(cè),主動(dòng)丟包,合理補(bǔ)包,系統(tǒng)會(huì)根據(jù)網(wǎng)絡(luò)情況和包的類(lèi)型判斷是否補(bǔ)包,進(jìn)行最優(yōu)補(bǔ)包。自研UDP擁塞機(jī)制,根據(jù)實(shí)時(shí)網(wǎng)絡(luò)包反饋,會(huì)動(dòng)態(tài)增加或者減低碼率,即使在弱網(wǎng)情況下,也能確保推流不卡頓。如果推流端QoS異常,系統(tǒng)可實(shí)時(shí)檢測(cè)進(jìn)行自適應(yīng)碼率、幀率,或手動(dòng)調(diào)整推流端碼率、幀率。
5.2.2 視頻優(yōu)化
基于時(shí)域分層的H.264編碼:通過(guò)大量測(cè)試調(diào)優(yōu),對(duì)網(wǎng)絡(luò)抖動(dòng)有更好的適應(yīng)能力。
極速秒開(kāi):支持毫秒級(jí)啟動(dòng)畫(huà)面,觀(guān)看直播無(wú)需等待。在音視頻解碼前,通過(guò)預(yù)設(shè)解碼器類(lèi)型,省去探測(cè)文件類(lèi)型時(shí)間;支持毫秒級(jí)啟動(dòng)畫(huà)面,觀(guān)看直播無(wú)需等待;即使在網(wǎng)絡(luò)不好的時(shí)候,也能提供給用戶(hù)流暢的直播觀(guān)看體驗(yàn)。
5.2.3 音頻優(yōu)化
云端機(jī)型及網(wǎng)絡(luò)適配:終端在推流、播放前會(huì)獲取通過(guò)協(xié)議上報(bào)的當(dāng)前機(jī)型的機(jī)型配置、網(wǎng)絡(luò)情況、IP信息,不斷的迭代和完善機(jī)型編解碼適配庫(kù)。
硬件編解碼機(jī)型適配:通過(guò)不斷完善的云端機(jī)型,云端會(huì)返回一個(gè)最適合的編解碼策略配置;
5.3 服務(wù)器部署及智能調(diào)度
5.3.1全球節(jié)點(diǎn)部署
· 國(guó)內(nèi)多個(gè)BGP機(jī)房與三線(xiàn)機(jī)房,國(guó)內(nèi)重要城市100%覆蓋;
· 海外機(jī)房節(jié)點(diǎn);
· 跨國(guó)代理光纖專(zhuān)線(xiàn)。
5.3.2節(jié)點(diǎn)智能分配
· 對(duì)用戶(hù)所在區(qū)域、運(yùn)營(yíng)商、ISP進(jìn)行分析,進(jìn)行智能分配;
· 服務(wù)節(jié)點(diǎn)實(shí)時(shí)負(fù)載;
· 服務(wù)節(jié)點(diǎn)實(shí)時(shí)網(wǎng)絡(luò)狀況監(jiān)測(cè);
5.3.3服務(wù)可用性、穩(wěn)定性
· 服務(wù)高可用:99%的高可用架構(gòu)部署;
· 高性能穩(wěn)定物理機(jī);
· 宕機(jī)自動(dòng)恢復(fù)與策略切換。
5.3.4自研直播CDN系統(tǒng)及第三方CDN網(wǎng)絡(luò)支持
云帆加速互動(dòng)連麥方案不僅完美適配自研的直播CDN系統(tǒng),也支持第三方CDN網(wǎng)絡(luò)的接入。
小結(jié):自2016年下半年來(lái),直播行業(yè)就發(fā)生了很大的變化:連麥互動(dòng)已經(jīng)成為直播行業(yè)的標(biāo)配。云帆加速作為流媒體領(lǐng)域的服務(wù)企業(yè),一直秉持著為客戶(hù)提供更高的價(jià)值,為用戶(hù)傳輸不可估量的價(jià)值理念,為企業(yè)減負(fù),為各行各業(yè)提供一站式直播解決方案。