0
本文作者: 冼牛 | 2017-07-21 15:29 |
雷鋒網(wǎng)按:本文作者冼牛,即構(gòu)科技市場(chǎng)運(yùn)營(yíng)總監(jiān),香港大學(xué)MBA,十年研發(fā)經(jīng)驗(yàn),音視頻云服務(wù)技術(shù)專家,專注連麥互動(dòng)直播技術(shù)應(yīng)用研究。
有好多次視頻社交行業(yè)的開(kāi)發(fā)者提到,某廠商的視頻交友SDK測(cè)試的時(shí)候性能效果還可以,可是接入過(guò)程中和接入后就遇到各種各樣的坑:
1 .無(wú)法自行定制采集和渲染。
2.無(wú)法獲得原始語(yǔ)音視頻數(shù)據(jù),進(jìn)行保存、前處理和編碼等定制化操作。
因此,視頻交友SDK的開(kāi)發(fā)策略也要重點(diǎn)考量。
數(shù)據(jù)流動(dòng)
視頻交友SDK選擇在數(shù)據(jù)流動(dòng)的各個(gè)環(huán)節(jié)開(kāi)放接口。語(yǔ)音視頻實(shí)時(shí)通訊本質(zhì)上是語(yǔ)音視頻數(shù)據(jù)的實(shí)時(shí)流動(dòng),數(shù)據(jù)流通的各個(gè)重要環(huán)節(jié)如下:
上圖展示了語(yǔ)音視頻數(shù)據(jù)從推流端流動(dòng)到拉流端的各個(gè)環(huán)節(jié):采集(包含語(yǔ)音3A前處理)、前處理、編碼、推流、拉流、解碼和渲染。
視頻交友SDK以上就是開(kāi)發(fā)者負(fù)責(zé)的業(yè)務(wù)層,這七大環(huán)節(jié)都是在視頻交友SDK以下實(shí)現(xiàn)的。這七大環(huán)節(jié)都是被視頻交友SDK封裝好的。完全封裝的好處是一方面可以讓開(kāi)發(fā)者專注業(yè)務(wù)層的邏輯,另一方面讓業(yè)務(wù)層和SDK完全解耦。不足是開(kāi)發(fā)者一定程度上失去了對(duì)底層語(yǔ)音視頻數(shù)據(jù)的控制力。
有些視頻社交SDK廠商向開(kāi)發(fā)者開(kāi)放部分接口,也有廠商完全不開(kāi)放任何接口。每一家視頻社交SDK廠商的開(kāi)放策略都不一樣。使用視頻社交SDK的開(kāi)放接口能獲得多少對(duì)底層語(yǔ)音視頻數(shù)據(jù)的控制力呢?
今天讓我們討論一下視頻交友SDK的開(kāi)放策略。
采集
采集端是語(yǔ)音視頻數(shù)據(jù)的來(lái)源,包括但不限于硬件設(shè)備(麥克風(fēng)和攝像頭)、屏幕共享、語(yǔ)音視頻文件播放和游戲直播畫(huà)面等。
如果采集端是硬件設(shè)備,那么視頻社交SDK可以驅(qū)動(dòng)麥克風(fēng)和攝像頭來(lái)獲得語(yǔ)音視頻數(shù)據(jù)。如果采集端不是硬件設(shè)備,那么開(kāi)發(fā)者要采用外部采集的方式讓SDK獲得語(yǔ)音視頻數(shù)據(jù)。
一般來(lái)說(shuō),有三種場(chǎng)景是需要進(jìn)行外部采集的:
1)普通的硬件設(shè)備無(wú)法滿足業(yè)務(wù)需求,開(kāi)發(fā)者已采用特殊的硬件設(shè)備來(lái)實(shí)現(xiàn)了大量業(yè)務(wù)。
2)開(kāi)發(fā)者需要使用攝像頭完成額外的功能,和視頻社交SDK 的默認(rèn)邏輯產(chǎn)生沖突,導(dǎo)致攝像頭無(wú)法正常使用。比如說(shuō),在視頻通話過(guò)程中,業(yè)務(wù)層要求中斷通話,用攝像頭來(lái)錄制短視頻。
3)語(yǔ)音視頻數(shù)據(jù)并非來(lái)自攝像頭和麥克風(fēng),而是來(lái)自虛擬設(shè)備、語(yǔ)音視頻文件或者現(xiàn)有的語(yǔ)音視頻流。比如說(shuō),語(yǔ)音視頻文件播放、屏幕分享和游戲直播等。
在需要進(jìn)行外部采集的場(chǎng)景中,視頻社交SDK要開(kāi)放采集環(huán)節(jié)的接口來(lái)支持。否則,開(kāi)發(fā)者就只能從攝像頭和麥克風(fēng)等硬件設(shè)備直接獲取語(yǔ)音視頻數(shù)據(jù),業(yè)務(wù)開(kāi)發(fā)就會(huì)面臨極大的局限性。
視頻社交SDK開(kāi)放了采集環(huán)節(jié)的接口,允許開(kāi)發(fā)者進(jìn)行外部采集,開(kāi)發(fā)者的自由度和掌控力一下子海闊天空。
然而凡事都有兩面:語(yǔ)音3A前處理是在采集環(huán)節(jié)完成的,因此,如果進(jìn)行外部采集,開(kāi)發(fā)者就要自行實(shí)現(xiàn)語(yǔ)音3A前處理。語(yǔ)音3A前處理包含回聲消除(AEC),噪聲抑制(ANS)和自動(dòng)增益控制(AGC),也就是所謂的語(yǔ)音3A,是視頻社交行業(yè)公認(rèn)的技術(shù)難題。
前處理
前處理是指對(duì)語(yǔ)音視頻原始數(shù)據(jù)在編碼之前進(jìn)行的處理,包括語(yǔ)音3A和其它特殊的效果。語(yǔ)音3A是在采集環(huán)節(jié)完成的,除此以外還有其它的語(yǔ)音和視頻的前處理,將在本環(huán)節(jié)完成。
語(yǔ)音前處理是編碼前的語(yǔ)音特效處理,包括混響和變聲等?;祉懩茏屄曇袈?tīng)起來(lái)像來(lái)自曠野,變聲能讓人聲由男生變女生,或者產(chǎn)生電子聲特效,以此增強(qiáng)語(yǔ)音通話的趣味。
視頻前處理是編碼前的視頻特效處理,包括美顏、萌顏、掛件和濾鏡效果等,能讓畫(huà)面顯得妙趣橫生,以此增強(qiáng)視頻社交的樂(lè)趣。
如果視頻社交SDK開(kāi)放了前處理的接口,那么開(kāi)發(fā)者可以自行實(shí)現(xiàn)語(yǔ)音和視頻的前處理模塊,或者對(duì)接第三方的語(yǔ)音和視頻的前處理SDK。否則,對(duì)開(kāi)發(fā)者來(lái)說(shuō),視頻社交SDK以下的語(yǔ)音視頻處理都是黑盒子,業(yè)務(wù)層無(wú)法對(duì)其做任何控制。
筆者在即構(gòu)科技獲得的數(shù)據(jù)表明,美顏和萌顏有著廣泛的市場(chǎng)需求,這兩個(gè)模塊是視頻社交SDK的標(biāo)配。另外,市場(chǎng)上有一些優(yōu)質(zhì)的第三方美顏SDK,視頻社交SDK應(yīng)該開(kāi)放前處理的接口,讓開(kāi)發(fā)者自由選擇是采用視頻SDK自帶的美顏功能,還是自行實(shí)現(xiàn),或者對(duì)接第三方廠商的美顏SDK。只有這樣,開(kāi)發(fā)者才真正擁有自由度和掌控力,進(jìn)行積極的業(yè)務(wù)創(chuàng)新。
編碼
編碼這個(gè)環(huán)節(jié)留給開(kāi)發(fā)者的余地不多:開(kāi)發(fā)者基本不會(huì)自行開(kāi)發(fā)或者改造編解碼器。然而,一些有經(jīng)驗(yàn)的開(kāi)發(fā)團(tuán)隊(duì)仍然有自行編碼的需求,原因有如下兩個(gè):
1)開(kāi)發(fā)者對(duì)調(diào)制編碼器的參數(shù)來(lái)適配種類繁多的安卓機(jī)型十分有經(jīng)驗(yàn)和信心,決定自行編碼。開(kāi)發(fā)者可以自行靈活地配置編碼器的參數(shù),從而達(dá)到更好地適配各種安卓機(jī)型的效果。
2)開(kāi)發(fā)者之前已經(jīng)實(shí)現(xiàn)了大量調(diào)用編碼器的邏輯,而且相信自行編碼的效果更好。為了保護(hù)已有投資,開(kāi)發(fā)者往往傾向于自行編碼。
需要特別注意的是,開(kāi)發(fā)者自行編碼這種做法有得也有失:好處是開(kāi)發(fā)者獲得了更大的掌控力和自由度;壞處是視頻社交SDK將無(wú)法為開(kāi)發(fā)者提供碼率自適應(yīng)的功能。
如果要理解背后的原因,讓我們先了解碼率自適應(yīng)的原理:視頻社交SDK實(shí)時(shí)監(jiān)控網(wǎng)絡(luò)狀況,使用算法預(yù)測(cè)網(wǎng)絡(luò)狀況的變化,然后根據(jù)預(yù)測(cè)結(jié)果動(dòng)態(tài)調(diào)整編碼器的參數(shù),編出和網(wǎng)絡(luò)狀況相適應(yīng)的碼流。編出來(lái)的碼流的碼率、分辨率、幀速等參數(shù)能讓實(shí)時(shí)通訊在當(dāng)時(shí)的網(wǎng)絡(luò)情況下保障良好的QoS。
如果視頻交友SDK負(fù)責(zé)編碼,那么它就能實(shí)現(xiàn)碼率自適應(yīng)功能。如果開(kāi)發(fā)者負(fù)責(zé)編碼,那么視頻交友SDK就無(wú)法控制編碼器來(lái)編出適應(yīng)網(wǎng)絡(luò)狀況變化的碼流,因此無(wú)法做到碼率自適應(yīng)。
網(wǎng)絡(luò)傳輸
網(wǎng)絡(luò)傳輸環(huán)節(jié)是實(shí)時(shí)通訊的核心中的核心,通過(guò)FEC、ARQ、流控碼控和抖動(dòng)緩沖等關(guān)鍵算法來(lái)實(shí)現(xiàn)實(shí)時(shí)傳輸架構(gòu),從而達(dá)到超低延遲的效果。
根據(jù)筆者的了解,還沒(méi)有廠商全面開(kāi)放網(wǎng)絡(luò)傳輸環(huán)節(jié)。即構(gòu)科技的做法是:支持開(kāi)發(fā)者自行推流到即構(gòu)的服務(wù)器,然而拉流端拉流的時(shí)候必須要使用即構(gòu)的視頻社交SDK。這樣既可以保持了SDK的開(kāi)放性,兼容開(kāi)發(fā)者原有的系統(tǒng),又可以保障拉流端獲得低延遲的體驗(yàn)。
這種做法背后的邏輯比較好理解:視頻交友SDK的核心價(jià)值是實(shí)時(shí)性,延遲超低。因?yàn)閺S商在實(shí)現(xiàn)超低延遲上有專長(zhǎng),所以開(kāi)發(fā)者才采用廠商的視頻交友SDK。如果廠商把這個(gè)核心環(huán)節(jié)開(kāi)放給開(kāi)發(fā)者自行實(shí)現(xiàn),那么廠商就失去了它的核心價(jià)值。
解碼
解碼環(huán)節(jié)和編碼環(huán)節(jié)相對(duì)應(yīng),把接收到的語(yǔ)音視頻流解碼然后渲染。解碼環(huán)節(jié)沒(méi)有什么可以供開(kāi)發(fā)者發(fā)揮的余地。開(kāi)發(fā)者一般沒(méi)有自行解碼的需求,廠商一般也沒(méi)有開(kāi)放解碼環(huán)節(jié)的接口。
渲染
渲染就是把語(yǔ)音數(shù)據(jù)播放出來(lái)和把視頻畫(huà)面顯示出來(lái)。開(kāi)發(fā)者對(duì)聲音數(shù)據(jù)的播放沒(méi)有額外的定制需求,然而對(duì)視頻畫(huà)面的顯示卻有很多定制的玩法。比如說(shuō),把多個(gè)視頻流渲染在同一個(gè)view里面,讓畫(huà)中畫(huà)和大畫(huà)面相互切換,橫屏左右畫(huà)面進(jìn)行對(duì)調(diào)等。
如果開(kāi)發(fā)者想要實(shí)現(xiàn)一些更加酷炫的玩法,就需要自行進(jìn)行渲染定制化了。如果視頻交友SDK開(kāi)放了渲染環(huán)節(jié)的接口,那么開(kāi)發(fā)者可以進(jìn)行渲染定制化。否則,只能接受視頻SDK自帶的渲染功能。開(kāi)發(fā)者要進(jìn)行定制化的渲染還有一個(gè)前提:語(yǔ)音視頻流沒(méi)有被混合,拉流端獲得的是多個(gè)分離的語(yǔ)音視頻流。如果語(yǔ)音視頻流已經(jīng)被混合成一路流,那么開(kāi)發(fā)者能夠處理的就只有一個(gè)畫(huà)面,能夠創(chuàng)新的玩法就少了許多。
分享一下筆者在即構(gòu)科技獲得的客戶統(tǒng)計(jì)數(shù)據(jù)。在實(shí)時(shí)語(yǔ)音視頻的七個(gè)環(huán)節(jié)中,即構(gòu)開(kāi)放了采集、前處理、編碼和渲染四個(gè)環(huán)節(jié)。根據(jù)客戶的統(tǒng)計(jì)數(shù)據(jù)顯示,主要有如下四組選擇,而絕大部分客戶選擇了第一個(gè)組合。
如果視頻交友SDK把七大環(huán)節(jié)完全封裝起來(lái),開(kāi)發(fā)者雖然不用操心,但是也失去了掌控力。因此,開(kāi)發(fā)者在選型階段要進(jìn)行慎重的分析。開(kāi)發(fā)者可以從廠商的開(kāi)放策略進(jìn)行判斷,該SDK是否給予開(kāi)發(fā)者足夠的掌控力進(jìn)行業(yè)務(wù)創(chuàng)新?是否允許開(kāi)發(fā)者自由替換成其它廠商的SDK或者自行研發(fā)?
開(kāi)發(fā)者把語(yǔ)音視頻實(shí)時(shí)通訊的能力托付給廠商,自然是經(jīng)過(guò)一番衡量和取舍的決定。如果時(shí)間、成本和技術(shù)積累允許的話,筆者相信大部分開(kāi)發(fā)者都是希望自行研發(fā)的。
因此,廠商應(yīng)該從開(kāi)發(fā)者的角度出發(fā),滿足開(kāi)發(fā)者的需求,同時(shí)也打消開(kāi)發(fā)者的顧慮,充分地開(kāi)放語(yǔ)音視頻實(shí)時(shí)通訊各個(gè)環(huán)節(jié)的定制化接口。這樣才能真正不負(fù)開(kāi)發(fā)者所托。
雷峰網(wǎng)特約稿件,未經(jīng)授權(quán)禁止轉(zhuǎn)載。詳情見(jiàn)轉(zhuǎn)載須知。