你还在为20倍的连麦成本发愁吗?
連麥已經(jīng)成為互動(dòng)直播的基本功能,但連麥的成本較高,對(duì)業(yè)務(wù)形成比較大的壓力。北京密境和風(fēng)科技有限公司iOS技術(shù)負(fù)責(zé)人唐賡在LiveVideoStack Meet上分享了花椒直播在降低連麥成本方面的一些探索,此外對(duì)連麥費(fèi)用構(gòu)成、降低成本可采用方案,以及實(shí)際效果進(jìn)行分析。
演講 / 唐賡
整理 / LiveVideoStack
class="video_iframe" data-vidtype="2" allowfullscreen="" frameborder="0" data-ratio="1.7647058823529411" data-w="480" data-src="http://v.qq.com/iframe/player.html?vid=t0524zlq15o&width=638&height=358.875&auto=0" style="display: none; width: 638px !important; height: 358.875px !important;" width="638" height="358.875" data-vh="358.875" data-vw="638" src="http://v.qq.com/iframe/player.html?vid=t0524zlq15o&width=638&height=358.875&auto=0"/>
我將從以下五部分分享我們?cè)谶B麥成本控制方面的嘗試和經(jīng)驗(yàn):連麥接入方案、費(fèi)用構(gòu)成分析、嘗試方案、實(shí)現(xiàn)過(guò)程中存在的問(wèn)題以及實(shí)際效果分析。
連麥接入方案
上圖是最常見(jiàn)的單向直播架構(gòu),左側(cè)主播端將直播流推到源站,源站再通過(guò)CDN分發(fā)到邊緣節(jié)點(diǎn),所有客戶(hù)端則是從這些邊緣節(jié)點(diǎn)拉取數(shù)據(jù),這是最普通的方案。單向直播對(duì)技術(shù)的要求相對(duì)較低,它對(duì)延遲、實(shí)時(shí)性沒(méi)有過(guò)高的需求,但是對(duì)CDN的要求會(huì)相對(duì)高一些,來(lái)保證直播的連通性和覆蓋率。
但是對(duì)連麥的接入方案而言,連麥本身對(duì)實(shí)時(shí)性是有較高要求,當(dāng)然這個(gè)要求主要是針對(duì)連麥的主播之間的,因此連麥服務(wù)商都會(huì)有連麥服務(wù)器來(lái)保證主播之間實(shí)時(shí)互動(dòng)的連通性和實(shí)時(shí)性,連麥服務(wù)使用的肯定是核心服務(wù)器,那么相對(duì)而言成本也會(huì)高很多。而對(duì)于普通的觀眾端則依舊是從CDN邊緣節(jié)點(diǎn)拉流觀看直播。
但是這個(gè)架構(gòu)我們?cè)趯?shí)際應(yīng)用過(guò)程中遇到了很多問(wèn)題:首先就是開(kāi)播之前必須選擇是否使用連麥,這決定了主播推送的流是否要接入連麥服務(wù)器,因?yàn)檫B麥成本(單價(jià))是普通直播的20倍、甚至40倍,而有的主播雖然在開(kāi)播前選擇連麥,但在直播過(guò)程中卻并沒(méi)有用到,這無(wú)形之中就極大增加了直播成本。也正是因?yàn)槿绱?#xff0c;給所有主播都開(kāi)啟連麥?zhǔn)遣豢赡艿?#xff0c;而且也僅僅有小部分主播需要使用到連麥功能。而另一個(gè)問(wèn)題則是在直播過(guò)程中突然有連麥需求怎么辦?下播重新推流顯然是不現(xiàn)實(shí)的,一方面會(huì)影響觀看體驗(yàn),一方面也很難再次聚集人氣。此外伴隨直播玩法的更新,象主播間的連麥PK、多個(gè)直播間合并這樣的需求也在不斷增加,如何支持這些需求,這就需要對(duì)直播架構(gòu)進(jìn)行重新設(shè)計(jì)。
連麥成本構(gòu)成分析
連麥成本首先是連麥服務(wù)費(fèi),它的計(jì)算方式分為按照房間數(shù)*時(shí)長(zhǎng)計(jì)算和按流量計(jì)算兩種,無(wú)論用哪種方式計(jì)算,通常價(jià)格都是普通CDN的20倍、甚至40倍以上。費(fèi)用構(gòu)成的第二部分就是中間CDN費(fèi)用,這部分又會(huì)有兩種方案:一種是直接使用連麥服務(wù)廠商提供的SDK中的CDN解決方案,一種是自建或單獨(dú)購(gòu)置CDN,兩種方案相較而言可能第二種方式在費(fèi)用上會(huì)更合適些。此外還可能會(huì)產(chǎn)生的成本就是合流費(fèi)用,這部分費(fèi)用產(chǎn)生的原因是連麥會(huì)產(chǎn)生多個(gè)窗口,假如采用拉取多路流再在客戶(hù)端拼合成需要的布局,一個(gè)因?yàn)槭謾C(jī)和各客戶(hù)端本身分辨率有差異,另外為保持所有客戶(hù)端獲取一致體驗(yàn)需要手機(jī)端代碼來(lái)保證播放同步,這在實(shí)現(xiàn)過(guò)程中會(huì)遇到很多麻煩,因此我們采用將多個(gè)流合流為一路推送到客戶(hù)端,目前幾大連麥服務(wù)廠商都提供了合流服務(wù),但同時(shí)在費(fèi)用上它甚至比連麥服務(wù)還要再貴幾倍。因此我們使用FFmpeg自己開(kāi)發(fā)了一套實(shí)現(xiàn)方案。
降低成本的實(shí)現(xiàn)&遇到的問(wèn)題
上圖是我們改進(jìn)后的架構(gòu),主播在正常開(kāi)播時(shí)依舊是采用傳統(tǒng)的單向直播方案,直播流會(huì)走綠色的線推給源站進(jìn)行推流,而連麥服務(wù)初始狀態(tài)是隱藏的,一旦有需求,主播只要同意連麥請(qǐng)求就會(huì)自動(dòng)切換到連麥服務(wù)器上,再推給源站推流。
老版本兼容問(wèn)題
但在實(shí)現(xiàn)過(guò)程中我們也遇到了一些問(wèn)題:首先是版本問(wèn)題,如果要實(shí)現(xiàn)這樣一個(gè)架構(gòu),我們就必須通過(guò)IM通道通知所有客戶(hù)端流流名變更、流服務(wù)器地址變更,然后手機(jī)就會(huì)立刻從新的地址拉流,但老版本并不支持這個(gè)協(xié)議。此外還有H5和PC Web的問(wèn)題。
這張圖是我們針對(duì)老版本兼容改進(jìn)的架構(gòu),當(dāng)主播切換到連麥后原本推流的綠色虛線就會(huì)消失,改由連麥服務(wù)器按照原來(lái)的流名繼續(xù)推流到源站,這樣就可以保證老版本客戶(hù)端能夠源源不斷看到直播內(nèi)容,而新客戶(hù)端也可以正常拉取到新的流。這里需要注意的一點(diǎn),為了保證老版本客戶(hù)端收到的內(nèi)容也是新的畫(huà)面,就需要連麥服務(wù)器在原來(lái)流名推的是合流之后的流。
推流保護(hù)機(jī)制
但在我們實(shí)現(xiàn)過(guò)程中發(fā)現(xiàn)這條路走不通,因?yàn)镃DN廠商有一套推流保護(hù)機(jī)制來(lái)防止流被別人惡意劫持, 它會(huì)記住上一次推流到這個(gè)流名的IP,并且在一定時(shí)間內(nèi)不允許更換IP,或者需要特殊的API調(diào)用去通知它IP更換。因此這個(gè)問(wèn)題只能通過(guò)和CDN廠商協(xié)商來(lái)解決了。
推流參數(shù)變更
推流參數(shù)變更也是我們遇到的坑,原本的推流是由手機(jī)端直接推的,而手機(jī)的推流參數(shù)與連麥服務(wù)器和合流務(wù)器輸出的參數(shù)是不一樣的,這就可能會(huì)出現(xiàn)沒(méi)有聲音、直播畫(huà)面出現(xiàn)異常等等各種問(wèn)題。對(duì)于這個(gè)問(wèn)題,我們也是和推流中所有環(huán)節(jié)的廠商——包括連麥服務(wù)商和各家CDN廠商規(guī)定了一套推流參數(shù)規(guī)則來(lái)解決這個(gè)問(wèn)題。當(dāng)然這些服務(wù)商也并非只有我們一家,因此他們?cè)趯?duì)我們參數(shù)適配的同時(shí)也還要兼顧其他客戶(hù)的正常使用,所以測(cè)試、發(fā)布的過(guò)程也是非常謹(jǐn)慎小心的。
新增CDN廠商不兼容
在規(guī)定推流參數(shù)的同時(shí)又衍生出了一個(gè)新的問(wèn)題,就是新增CDN廠商的不兼容。我們的推流參數(shù)不是固定不變的,因?yàn)樵谑謾C(jī)端推流時(shí),分辨率、碼率、幀率都會(huì)根據(jù)當(dāng)前網(wǎng)絡(luò)帶寬、手機(jī)CPU消耗等因素做動(dòng)態(tài)調(diào)整,因此我也只能要求新增的CDN廠商按照我們的規(guī)范支持分辨率、碼率的動(dòng)態(tài)調(diào)整。
除此之外還會(huì)有一些其他的坑,比如我們自身用了很多私有協(xié)議,而廠商可能用的是公有協(xié)議,那么在對(duì)接時(shí)協(xié)議之間又會(huì)有很多不兼容,需要做適配轉(zhuǎn)換。
實(shí)際效果分析
在經(jīng)歷一系列的問(wèn)題改進(jìn),最終能達(dá)到的效果基本可以歸納為4點(diǎn)。首先對(duì)于主播而言,他可以隨時(shí)進(jìn)行連麥,不需要在開(kāi)播前就必須做出選擇。第二點(diǎn)我們實(shí)現(xiàn)了多個(gè)直播間合并直播,并且加入了一些設(shè)計(jì):當(dāng)多個(gè)主播連麥時(shí),直播間觀眾看到的主播位置排序一定是當(dāng)前主播在第一位,這個(gè)在實(shí)現(xiàn)過(guò)程中需要注意給到合流服務(wù)器的所有排列組合信息是正確的;在合并直播的基礎(chǔ)上我們也做了主播才藝的PK。此外實(shí)現(xiàn)了老版本的平滑過(guò)渡。當(dāng)然最大的好處就是成本降低,主播只有在有連麥需求的時(shí)候才會(huì)自動(dòng)切換到連麥服務(wù)器,而我們也設(shè)定了一個(gè)時(shí)間域值,當(dāng)主播一定時(shí)間不連麥后我們會(huì)自動(dòng)切回普通直播,這樣就比較明顯的減少了連麥成本。
以上是我們嘗試的新的直播架構(gòu),以及實(shí)現(xiàn)過(guò)程中遇到的問(wèn)題和解決思路,謝謝大家。
LiveVideoStack招募全職技術(shù)編輯和社區(qū)編輯
LiveVideoStack是專(zhuān)注在音視頻、多媒體開(kāi)發(fā)的技術(shù)社區(qū),通過(guò)傳播最新技術(shù)探索與應(yīng)用實(shí)踐,幫助技術(shù)人員成長(zhǎng),解決企業(yè)應(yīng)用場(chǎng)景中的技術(shù)難題。如果你有意為音視頻、多媒體開(kāi)發(fā)領(lǐng)域發(fā)展做出貢獻(xiàn),歡迎成為L(zhǎng)iveVideoStack社區(qū)編輯的一員。你可以翻譯、投稿、采訪、提供內(nèi)容線索等。
通過(guò)contribute@livevideostack.com聯(lián)系,或在LiveVideoStack公眾號(hào)回復(fù)『技術(shù)編輯』或『社區(qū)編輯』了解詳情。
總結(jié)
以上是生活随笔為你收集整理的你还在为20倍的连麦成本发愁吗?的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Revvel如何将视频转码速度提升几十倍
- 下一篇: U3D激发拍照新活力,Camera360