探討直播低延遲低流量的粉絲連麥技術(shù)

探討直播低延遲低流量的粉絲連麥技術(shù)

【原標(biāo)題】探討直播低延遲低流量的粉絲連麥技術(shù)

【來(lái) 源】ArchSummit技術(shù)關(guān)注【作? 者】郝飛

【編者按】本文轉(zhuǎn)自ArchSummit技術(shù)關(guān)注,本站編輯進(jìn)行了調(diào)整。

到目前為止,直播行業(yè)繼續(xù)如預(yù)期的那樣如火如荼的發(fā)展著,在先后競(jìng)爭(zhēng)完延遲,高清,美顏,秒開(kāi)等功能后,最近各大直播平臺(tái)比拼的一個(gè)熱點(diǎn)就是連麥。什么是連麥?簡(jiǎn)單描述就是當(dāng)主播直播期間,可以與其中某一個(gè)粉絲進(jìn)行互動(dòng),并且其他粉絲能夠觀看到這個(gè)互動(dòng)過(guò)程。

這個(gè)連麥的操作把主播和粉絲的交互從文字聊天一下升級(jí)為音視頻互動(dòng),這個(gè)功能瞬間就提升了粉絲們的參與感;同時(shí),這個(gè)互動(dòng)過(guò)程其他粉絲都可以看到,極大滿足了連麥粉絲的幸福感,連麥的流程圖如下:

1.在主播直播過(guò)程中,主播提示進(jìn)入互動(dòng)環(huán)節(jié),此時(shí)用戶可以參與互動(dòng)

2.用戶請(qǐng)求參與互動(dòng),主持人同意某一個(gè)用戶的請(qǐng)求;

3.用戶參與直播,用戶與主播的互動(dòng)過(guò)程直播給其他所有粉絲;

那如何實(shí)現(xiàn)連麥這樣的功能呢?今天就向大家介紹幾種實(shí)現(xiàn)方法;

第一種方式就是通過(guò)兩路RTMP流實(shí)現(xiàn)

目前直播的協(xié)議普遍采用的是RTMP協(xié)議,RTMP是Adobe公司實(shí)現(xiàn)的一套為Flash播放器和服務(wù)端之間音視頻和數(shù)據(jù)傳輸?shù)乃接袇f(xié)議。此協(xié)議基于TCP實(shí)現(xiàn),采用多路服用,信令和媒體都通過(guò)一個(gè)通道進(jìn)行傳輸。

目前國(guó)內(nèi)的直播CDN基本上都使用此協(xié)議,其延遲大概在3秒左右;由于此協(xié)議的數(shù)據(jù)是單向流動(dòng)的,因此如果連麥功能使用此協(xié)議實(shí)現(xiàn)的話,就需要兩路視頻流的發(fā)布訂閱;其原理圖如下:

1.主播首先發(fā)布視頻到流媒體服務(wù)器,用戶從流媒體服務(wù)器拉取視頻信息;

2.其中某個(gè)用戶希望與主播連麥,他通過(guò)信令服務(wù)器向主播請(qǐng)求連麥,主播同意連麥請(qǐng)求;

3.連麥者發(fā)布視頻到流媒體服務(wù)器;

4.主播端和其他用戶獲取連麥者發(fā)布的視頻,在手機(jī)端采用畫(huà)中畫(huà)形式顯示;

在這個(gè)方案中,主播和參與連麥的粉絲分別發(fā)布了一路視頻流,觀看的粉絲同時(shí)拉取兩路視頻流。這種連麥方式從技術(shù)實(shí)現(xiàn)上非常簡(jiǎn)單,但其體驗(yàn)上也存在很多問(wèn)題:

首先,主播和參與連麥的粉絲之間的交互延遲太大。大家了解,一路rtmp的延遲大概在3秒左右。如果主播與參與連麥的用戶需要進(jìn)行對(duì)話,那么主播從提問(wèn)到聽(tīng)到對(duì)方的答復(fù)原則上差不多要6秒左右時(shí)間了,這個(gè)對(duì)于實(shí)時(shí)交互來(lái)說(shuō)完全沒(méi)有辦法接受。

其次,聲音效果不好,會(huì)產(chǎn)生回波。一般的直播的音頻處理模塊都沒(méi)有進(jìn)行回波抵消處理,因此主播端在觀看到連麥者視頻的同時(shí),不能打開(kāi)連麥者的音頻聽(tīng),否則會(huì)通過(guò)音頻采集設(shè)備重新采集,形成回波。

最后,客戶端接收兩路視頻,流量消耗高。一般的用戶端需要接收兩路視頻才能分別看到主播和連麥者,兩路視頻導(dǎo)致流量消耗比較高,同時(shí)兩路解碼也比較消耗CPU資源。

從上面的分析大家可以看出,上述方案并不是一套可接受的連麥方案;連麥的場(chǎng)景對(duì)于延遲要求很高,RTMP協(xié)議明顯無(wú)法滿足要求。比較好的方案需要確保連麥者(2個(gè)或者多個(gè))之間的交互滿足視頻會(huì)議的標(biāo)準(zhǔn),也就是延遲在600ms以?xún)?nèi),整體的交互過(guò)程再進(jìn)行視頻混合,以RTMP的方式進(jìn)行輸出。也就是說(shuō),這個(gè)方案中其實(shí)涉及了兩套系統(tǒng),一套是保證低延遲的多人音視頻交互系統(tǒng),另外一套是標(biāo)準(zhǔn)的CDN直播系統(tǒng);直播系統(tǒng)大家已經(jīng)很了解了,下面重點(diǎn)介紹下低延遲的交互系統(tǒng)的特點(diǎn):

1.直播系統(tǒng)是一個(gè)單向的數(shù)據(jù)通道,而低延遲的視頻會(huì)議系統(tǒng)是一套雙向的通道。這使得這類(lèi)系統(tǒng)在支持大并發(fā)方面沒(méi)有直播系統(tǒng)那么容易擴(kuò)展,其網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)更加復(fù)雜;

2.低延遲系統(tǒng)傳輸層一般都使用UDP,應(yīng)用層使用RTP/RTCP協(xié)議,從而保證包的即時(shí)性;為了保證安全性,更多的系統(tǒng)在使用SRTP協(xié)議,它是在RTP基礎(chǔ)上多了一層安全和認(rèn)證措施;客戶端的連接建立常使用ICE協(xié)議,它結(jié)合私有網(wǎng)絡(luò)中主機(jī)所處的環(huán)境,通信雙方首先從STUN,TURN收集盡可能多的連接地址,然后對(duì)地址進(jìn)行優(yōu)先級(jí)排序,選擇最優(yōu)的方式進(jìn)行連接;這種方式對(duì)于不使用NAT穿透的場(chǎng)景也有好處;它可以保證不同網(wǎng)絡(luò)客戶的聯(lián)通率,例如有些境外的客戶直連境內(nèi)服務(wù)器效果不夠好,可以考慮通過(guò)TURN服務(wù)進(jìn)行中轉(zhuǎn),從而保證服務(wù)質(zhì)量;

3.使用UDP就會(huì)涉及網(wǎng)絡(luò)延遲,丟包,因此要考慮QoS,主要策略包括:

a.使用抖動(dòng)緩存(jitterbuffer)來(lái)消除網(wǎng)絡(luò)包的抖動(dòng)特性,以一個(gè)穩(wěn)定的速率將數(shù)據(jù)包交給后續(xù)模塊處理;音頻和視頻需要有各自的抖動(dòng)緩存,然后再實(shí)現(xiàn)同步;

b.在音頻方面,需要實(shí)現(xiàn)丟包隱藏算法;GIPS公司的NETEQ算法應(yīng)該是業(yè)界公認(rèn)最好的VOIP防抖動(dòng)算法,目前已經(jīng)在WebRTC項(xiàng)目中開(kāi)源;

c.視頻方面,需要實(shí)現(xiàn)一個(gè)自適應(yīng)反饋模型,能夠根據(jù)網(wǎng)絡(luò)擁塞情況調(diào)整丟包保護(hù)策略;當(dāng)RTT較大時(shí),可以使用FEC進(jìn)行數(shù)據(jù)保護(hù);當(dāng)RTT較小的時(shí)候,選擇采用NACK機(jī)制;

接下來(lái)將基于以上討論的這種模型,介紹兩種連麥實(shí)現(xiàn)方式;這兩種方式都可以保證連麥效果,他們的主要區(qū)別是一種使用P2P技術(shù)進(jìn)行連麥,另外一種使用多人視頻會(huì)議系統(tǒng)支持連麥,具體如下。

第二種方式是P2P+直播的連麥方式,其原理圖如下

1.主播首先發(fā)布視頻到流媒體服務(wù)器,用戶從流媒體服務(wù)器拉取視頻信息;

2.連麥者請(qǐng)求連麥,此時(shí)主播端會(huì)彈出連麥請(qǐng)求,主播選擇連麥用戶,連麥者和主播建立P2P連接;

3.主播端和連麥者之間建立了P2P通道,通過(guò)此通道進(jìn)行音視頻數(shù)據(jù)的交互;

4.主播端從攝像頭中采集主播視頻,從P2P通道獲得連麥者的視頻,然后把兩張圖片進(jìn)行混合,再發(fā)布給主播模塊,直播出去;

這種實(shí)現(xiàn)方式的優(yōu)勢(shì)在于:

1.主播和連麥者之間的交互延遲小,由于這兩者之間是P2P連接,因此網(wǎng)絡(luò)延遲非常小,一般都在幾百毫秒的量級(jí)。主播與連麥者之間的交互非常順暢;

2.聲音效果好;主播端使用回波抵消模塊,連麥者的回聲會(huì)被消除;同時(shí),主播與連麥者的語(yǔ)音交流也會(huì)整體直播出去;

這種方式存在的問(wèn)題在于:

1.主播端相當(dāng)于有兩路視頻上傳(直播視頻+連麥者的視頻交互),一路視頻下載(連麥者的視頻),對(duì)網(wǎng)絡(luò)要求會(huì)比較高。我們團(tuán)隊(duì)在正常的電信,聯(lián)通等wifi及4G網(wǎng)絡(luò)下進(jìn)行測(cè)試,主播端帶寬完全能夠滿足要求;

2.不支持多路連麥者同時(shí)交流;

第三種方式通過(guò)視頻會(huì)議+直播的方式實(shí)現(xiàn)

為了能夠?qū)崿F(xiàn)多個(gè)粉絲同時(shí)連麥,可以考慮主播與連麥者之間使用視頻會(huì)議系統(tǒng),用一個(gè)MCU(MultiControlUnit)來(lái)實(shí)現(xiàn)媒體數(shù)據(jù)轉(zhuǎn)發(fā)。然后通過(guò)MCU對(duì)多路數(shù)據(jù)進(jìn)行混合,再把混合流發(fā)送給CDN,其原理圖如下:

1.主播端加入視頻會(huì)議系統(tǒng);此處注意,主播端不再直接推視頻給CDN;

2.視頻會(huì)議系統(tǒng)把主播的視頻流推向CDN,觀眾通過(guò)CDN觀看主播視頻;

3.參與連麥的觀眾登錄到與主播端同一個(gè)視頻會(huì)議頻道中,此時(shí)主播端和連麥者通過(guò)實(shí)時(shí)的視頻會(huì)議進(jìn)行交互;主播與連麥者的視頻,經(jīng)過(guò)服務(wù)端混合后輸出給CDN;

4.其他用戶通過(guò)CDN觀看主播與連麥者的交互;

這種方式的優(yōu)勢(shì)在于:

1.主播和連麥者交互延遲很?。挥捎谑褂靡曨l會(huì)議系統(tǒng),通過(guò)服務(wù)端做了一次轉(zhuǎn)發(fā),基本延遲都在一秒以下;

2.主播端只承擔(dān)視頻會(huì)議交互的流量,而不需要再承擔(dān)直播的上傳流量,對(duì)網(wǎng)路要求比P2P方式要低;

3.支持多人交互;

缺點(diǎn)在于:

1.服務(wù)端相比于一般的直播系統(tǒng),還多增加了視頻會(huì)議系統(tǒng),開(kāi)發(fā)復(fù)雜性高;

2.音視頻混合在服務(wù)端完成,對(duì)服務(wù)器性能要求高;

以上就是對(duì)連麥實(shí)現(xiàn)方式的簡(jiǎn)單介紹,這三種方式在實(shí)際項(xiàng)目中都有被使用到,原則上后兩種方法的體驗(yàn)會(huì)更好些;特別是第三種方案,他可以支持小范圍的多人實(shí)時(shí)交互,但這種方案的開(kāi)發(fā)量大,同時(shí)熟悉視頻會(huì)議和直播的團(tuán)隊(duì)比較缺少,對(duì)研發(fā)團(tuán)隊(duì)要求高;第二種方案可以在webrtc和直播技術(shù)基礎(chǔ)上可以實(shí)現(xiàn),對(duì)這方面比較熟悉的團(tuán)隊(duì)可以嘗試整合一下。

Q&A

問(wèn)題1:連麥技術(shù)是在客戶端實(shí)現(xiàn)還是服務(wù)器端實(shí)現(xiàn)?兩種實(shí)現(xiàn)方式各有什么優(yōu)缺點(diǎn)?

剛才介紹的第二種方案就是在客戶端實(shí)現(xiàn)的,當(dāng)然服務(wù)端也需要做一些工作;而第三種方案主要是在服務(wù)端的實(shí)現(xiàn);相關(guān)的優(yōu)缺點(diǎn)上面也做過(guò)解答,大家可以參考下;

問(wèn)題2:連麥技術(shù)有開(kāi)源基礎(chǔ)版嗎?

P2P的方案可以考慮在webrtc基礎(chǔ)上實(shí)現(xiàn);而視頻會(huì)議+直播的方案目前還沒(méi)有看到開(kāi)源項(xiàng)目,可以考慮在視頻會(huì)議系統(tǒng)上進(jìn)行改造,使其輸出RTMP直播;

問(wèn)題3:直播和用戶寬帶至少需要多少才能流暢連麥?

如果是P2P方案,對(duì)主播端帶寬要求會(huì)高一些;如果是第三種會(huì)議模式,要求就不高了,基本上就是一路上傳,一路下載;第二種P2P方案,我們?cè)?G,10M的聯(lián)通,電信等網(wǎng)絡(luò)下實(shí)驗(yàn)都是OK的;

問(wèn)題4:你們P2P是自己研發(fā)的還是基于其他的?

我們是在webrtc基礎(chǔ)上改造的,webrtc的視頻圖像要和攝像頭的視頻圖像合成;并且在帶耳機(jī)的情況下,音頻也需要程序合成;

問(wèn)題5:你們對(duì)防火墻或NAT有沒(méi)有運(yùn)用STUN或ICE之類(lèi)的技術(shù)?

ICE是一定要使用的;對(duì)于P2P網(wǎng)絡(luò),有很多網(wǎng)路不能直連,肯定要使用TURN服務(wù)做中轉(zhuǎn);對(duì)于會(huì)議模式,也可以通過(guò)TURN做中轉(zhuǎn),從而解決異地網(wǎng)絡(luò)連接不穩(wěn)定的情況;

問(wèn)題6:各方案中如果用戶端斷線,此時(shí)用戶重新連麥要重新走連麥流程嗎?還是說(shuō)可以掛著視頻系統(tǒng)自動(dòng)重連?

是可以重新連接的,不需要再走連麥流程;

問(wèn)題7:第二種方案為什么不支持多路連麥者同時(shí)交流?

P2P其實(shí)也可以支持多人交互,但多個(gè)人同時(shí)交流,對(duì)于主播端來(lái)說(shuō)CPU壓力和網(wǎng)絡(luò)壓力都很大;

問(wèn)題8:你們的視頻和音頻分別采用的是什么編碼?

通用的編碼方案是:視頻采用H264,音頻采用AAC;如果端到端都可控情況下,建議使用H265,壓縮率更高;

問(wèn)題9:第三種方案中,有什么推薦的視頻會(huì)議系統(tǒng)?

大家有興趣的話可以看看licode

問(wèn)題10:第三種方案的開(kāi)發(fā)團(tuán)隊(duì)要多少人,開(kāi)發(fā)周期一般多長(zhǎng)

這個(gè)不在于人多,主要還是對(duì)視頻會(huì)議系統(tǒng)要比較了解;如果使用licode改造的話,需要服務(wù)端實(shí)現(xiàn)RTMP推流的改造,如果對(duì)ffmpeg等比較熟悉的話,一個(gè)月左右能夠出來(lái)一個(gè)基礎(chǔ)版本,但真正穩(wěn)定下來(lái)還有很多工作需要完善;

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 非常感謝大家利用自己寶貴的時(shí)間來(lái)閱讀我的文章 , 這篇文章主要寫(xiě)一個(gè)iOS系統(tǒng)直播連麥功能的實(shí)現(xiàn) ,如果你正好需要...
    筱貳筆閱讀 7,512評(píng)論 0 14
  • 首先,基礎(chǔ)知識(shí)普及,技術(shù)上直播的流程是什么? 一、直播的流程 正如上圖所示,整個(gè)直播流程分為以下幾個(gè)關(guān)鍵步驟: 1...
    阿七筆記閱讀 2,684評(píng)論 1 4
  • 2016 年是直播元年,也是這個(gè)行業(yè)最輝煌的一年,不少平臺(tái)拿到了B輪,甚至是C輪融資。而直播行業(yè)的火爆,直接引來(lái)了...
    方弟閱讀 50,308評(píng)論 7 126
  • 昨日晚編輯完準(zhǔn)備篇1已經(jīng)過(guò)十二點(diǎn)了,還看了好多篇簡(jiǎn)友們的文章,睡的時(shí)候基本已經(jīng)一點(diǎn)多了,躺床上還睡不著,折騰的早上...
    efd4b77d14f0閱讀 221評(píng)論 0 2
  • 等待的日子是最美的。還有5天,清明小長(zhǎng)假就要來(lái)了,又能愉快地玩耍了。雖然不能回家,但是可以和嬌嬌,滿鑫一塊去吃烤魚(yú)...
    nenupharm閱讀 230評(píng)論 0 0

友情鏈接更多精彩內(nèi)容