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