小程序模板網(wǎng)

小程序音視頻能力技術(shù)負(fù)責(zé)人解讀“小程序直播”

發(fā)布時(shí)間:2018-01-24 11:06 所屬欄目:小程序開發(fā)文檔

一夜之間,“小程序+直播”成為多媒體開發(fā)者熱議的話題。從底層技術(shù)實(shí)現(xiàn)到接口開放程度,是否綁定騰訊云??jī)r(jià)格體系?低延遲性能如何?......一連串的問題背后是開發(fā)者乃至整個(gè)生 ...

 
 
 

?

一夜之間,“小程序+直播”成為多媒體開發(fā)者熱議的話題。從底層技術(shù)實(shí)現(xiàn)到接口開放程度,是否綁定騰訊云??jī)r(jià)格體系?低延遲性能如何?......一連串的問題背后是開發(fā)者乃至整個(gè)生態(tài)對(duì)“小程序+直播”的關(guān)注。LiveVideoStack邀請(qǐng)到小程序音視頻能力的技術(shù)負(fù)責(zé)人常青,就開發(fā)者關(guān)注的各種問題進(jìn)行了解答。如果您還有新的問題,請(qǐng)?jiān)谠谖哪┝粞曰蜞]件至editors@livevideostack.com。

另外,我們還發(fā)起了針對(duì)“小程序+直播”的問卷,近9成的開發(fā)者看好“小程序+直播”,最看好的應(yīng)用場(chǎng)景是直播、在線教育和視頻會(huì)議,最關(guān)心的性能是延遲。

LiveVideoStack:關(guān)于小程序中的RTC能力,是通過WebRTC實(shí)現(xiàn)的(或其他RTC技術(shù)),還是基于RTMP呢?

常青:小程序的RTC能力是基于RTMP技術(shù)實(shí)現(xiàn)的,沒有使用WebRTC是出于兩方面的考慮:一是微信安裝包(尤其是iOS版本)的體積增量必須要控制在可接受的范圍內(nèi),這是一個(gè)硬性的要求。另一個(gè)考慮就是RTMP協(xié)議的適用場(chǎng)景更多,除了實(shí)時(shí)視頻通話場(chǎng)景之外,還可以做標(biāo)準(zhǔn)直播解決方案。比如培訓(xùn)、教育等場(chǎng)景。

LiveVideoStack:求證下,小程序里面用的是UDP + RTMP方式來實(shí)現(xiàn)RTC的,而且還對(duì)協(xié)議內(nèi)容加密了?那是不是意味著小程序RTC必須走騰訊云?

常青:首先,對(duì)于直播場(chǎng)景下音視頻通道的加密是很剛需的一個(gè)要求,所以小程序在RTC模式下如果走騰訊云,會(huì)默認(rèn)開啟加密能力以避免竊聽攻擊。

當(dāng)然,小程序如果實(shí)現(xiàn)RTC不需要綁定騰訊云,關(guān)于這一點(diǎn)大家可以做個(gè)試驗(yàn):簡(jiǎn)單用 nginx-rtmp 搭建一個(gè)后臺(tái)服務(wù)器,然后創(chuàng)建兩對(duì)RTMP url,按照文檔 https://cloud.tencent.com/doc... 的指引放在小程序里測(cè)試,可以體驗(yàn)一下效果,只要網(wǎng)絡(luò)不是特別差,延遲和效果應(yīng)該是很不錯(cuò)的。

騰訊云真正做的出色的是,讓全國不同地方的兩路RTMP,都能達(dá)到很好的效果,這是騰訊云多年來一直積累CDN節(jié)點(diǎn),優(yōu)化內(nèi)部鏈路調(diào)度(GBN網(wǎng)絡(luò))的結(jié)果。

LiveVideoStack:如果是RTMP + UDP,無法實(shí)現(xiàn)ARQ、FEC傳輸算法,是這樣吧?

常青:RTMP本身是可靠的傳輸層協(xié)議,所以不需要實(shí)現(xiàn)ARQ和FEC算法,ARQ和FEC都是為了解決傳輸層協(xié)議不可靠(比如私有UDP協(xié)議)而不得不采用的辦法。

這是一個(gè)漫長(zhǎng)的故事:早期實(shí)時(shí)音視頻通話面對(duì)的網(wǎng)絡(luò)條件要比現(xiàn)在惡劣的多,也就是常說的窄帶時(shí)代。在那個(gè)時(shí)代的網(wǎng)絡(luò)條件下,由于帶寬成本極高,所以實(shí)時(shí)音視頻通話都需要采用 UDP 協(xié)議來打洞實(shí)現(xiàn) peer to peer 直連,這就意味著我們只能選擇 UDP 協(xié)議,因?yàn)?TCP 打洞做NAT穿越不是那么容易。而 UDP 協(xié)議如果做成可靠的協(xié)議(也就是不丟包),就喪失了它的靈活性,因?yàn)橐粢曨l通話本身對(duì)于部分?jǐn)?shù)據(jù)的丟失是可以容忍的,所以適當(dāng)?shù)脑试S一些丟包是更加符合窄帶傳輸?shù)男枨?。?dāng)然,我們不希望頻繁的丟數(shù)據(jù),不然通話質(zhì)量就上不來了,所以 ARQ 和 FEC 這種丟包恢復(fù)技術(shù)就應(yīng)用而生了。

時(shí)代在進(jìn)步,技術(shù)思路也在進(jìn)步。目前已經(jīng)到了寬帶時(shí)代,高清大碼率的場(chǎng)景越發(fā)普遍,直播的流行和大王卡的普及,都在告訴我們網(wǎng)絡(luò)的帶寬越來越理想,所以我們現(xiàn)在面對(duì)的主要問題可能不再是帶寬不夠用,而是WiFi 和 4G下突發(fā)的網(wǎng)絡(luò)波動(dòng)。而應(yīng)對(duì)這種網(wǎng)絡(luò)波動(dòng),可靠傳輸層協(xié)議并不比私有UDP協(xié)議劣勢(shì)太多,而且ARQ和FEC本身會(huì)產(chǎn)生帶寬的浪費(fèi),以FEC為例,30%的丟包需要用30%的冗余來解決,但是30%的冗余就意味著多傳輸30%的數(shù)據(jù),在碼率小的時(shí)候不起眼,大碼率場(chǎng)景下就越發(fā)雞肋了。

所以,用慣了ARQ和FEC的技術(shù)專家們,也可以偶爾考慮一下可靠的傳輸協(xié)議,只要不是特別極端的場(chǎng)景,效果還是可以一試的,而且我們也在持續(xù)優(yōu)化和改進(jìn),爭(zhēng)取在每一個(gè)版本中都有效果上的提升。

騰訊云也有專門的私有UDP解決方案,其ARQ和FEC技術(shù)也非常成熟,但這都是騰訊云自家的標(biāo)準(zhǔn),在微信小程序里落地就會(huì)面臨綁定騰訊云的問題,所以我們最終選擇了普遍支持的標(biāo)準(zhǔn)RTMP協(xié)議,并將底層的TCP傳輸層換成了業(yè)內(nèi)目前普遍更被看好的HTTP/2的一種內(nèi)部傳輸技術(shù),它也是基于UDP協(xié)議實(shí)現(xiàn)的,但它并不私有,也越來越流行。如果您感興趣,Google一下 HTTP/2 會(huì)了解到更多。

LiveVideoStack:native的直播、短視頻應(yīng)用已經(jīng)非常成熟了,功能強(qiáng)大。同時(shí),基于H5的音視頻應(yīng)用,在線教育服務(wù)也比較流行。那么小程序具體如何定位自己?他真正的優(yōu)勢(shì)在哪里?

常青:小程序的定位就是服務(wù)號(hào)的能力擴(kuò)展,它的優(yōu)勢(shì)就是能力的擴(kuò)展上要比H5更快,H5受限于瀏覽器內(nèi)核的普及,新特性和新能力的上線需要一個(gè)較長(zhǎng)的時(shí)間,而且蘋果在這里的態(tài)度也有很大的不確定性。比如最近WebRTC持續(xù)升溫,很大程度上要得益于蘋果的態(tài)度轉(zhuǎn)變,而我們并不能假設(shè)在后續(xù)所有的場(chǎng)景上蘋果都會(huì)保持這種開放的心態(tài)。同時(shí),小程序的定位更加專注于能力實(shí)現(xiàn),在體驗(yàn)和二次加載速度上,相比于H5還是有一定的優(yōu)勢(shì)。當(dāng)然,相比于定制性和迭代速度,體驗(yàn)上的優(yōu)勢(shì)僅僅是一個(gè)小細(xì)節(jié)了。

LiveVideoStack:iOS 11可以支持WebRTC,相信iOS上的微信支持WebRTC也可期。許多開發(fā)者看好WebRTC可以打通iOS、Android和PC瀏覽器。相比而言,小程序的優(yōu)勢(shì)是什么?

常青:目前iOS上的WebRTC能力還有一些不盡如人意的地方。另外,Android系統(tǒng)下的WebRTC實(shí)現(xiàn)也因?yàn)橄到y(tǒng)版本和碎片化問題有很多兼容性問題。在目前這段WebRTC還在不斷完善中的時(shí)間里,要做到比較統(tǒng)一的體驗(yàn),前端工程師們依然要面對(duì)很多不可控因素。

從長(zhǎng)期來看,小程序上的優(yōu)勢(shì)在于更好的可控性和可定制性:可控性上來講,由于審核制度的存在,在小程序里出現(xiàn)涉黃涉政等不法現(xiàn)象的概率會(huì)接近于零;另一方面,類似美顏等更“接地氣”的特性的支持,都是WebRTC需要很長(zhǎng)時(shí)間才能反應(yīng)過來的,我們也非常希望后續(xù)能夠快速迭代地增加一些高性價(jià)比的特性進(jìn)來(太過娛樂化的特性暫不考慮)。

LiveVideoStack:是否提供原生的連麥(包含回聲消除)功能?是否開放接口,對(duì)接第三方的連麥服務(wù)?

常青:live-pusher 和 live-player 的RTC模式本身自帶回音消除功能,只要設(shè)置好mode參數(shù)為RTC,都是可以使用回聲消除能力的。 而且 live-pusher 和 live-player 沒有限制第三方云服務(wù),只要有可用的RTMP地址就可以使用,至于如何基于 live-pusher 和 live-player 標(biāo)簽實(shí)現(xiàn)實(shí)時(shí)通話功能,可以參考:https://cloud.tencent.com/doc...

LiveVideoStack:文檔中表示,小程序音視頻能力不需要指定騰訊云,但接口似乎還沒有(完全)開放?

常青:小程序此次開放的音視頻能力確實(shí)不需要指定騰訊云,支持RTMP協(xié)議的云商都可以對(duì)接,所有接口都已經(jīng)放在了文檔 https://cloud.tencent.com/doc... 和https://cloud.tencent.com/doc... 中進(jìn)行說明,沒有尚未暴露的接口。

LiveVideoStack:CDN有哪幾種接入方式?

常青:如果使用 live-player 標(biāo)簽,可以使用RTMP協(xié)議和http-flv協(xié)議進(jìn)行接入,也可以使用HLS協(xié)議接入,但HLS協(xié)議需要使用微信小程序早就開放的<video>標(biāo)簽。

LiveVideoStack:第三方服務(wù)提供商(如美顏、圖像識(shí)別、連麥、CDN等)是否可以接入小程序,成為用戶可選的服務(wù)?

常青:這里第三方的相關(guān)服務(wù)要看是云服務(wù)還是終端服務(wù)了。如果是云服務(wù),那是完全沒有問題的,支持RTMP協(xié)議都可以(接入),比如連麥、CDN等都無限制。但如果是終端服務(wù),除非是JavaScript的組件,否則都是不行的,因?yàn)槲⑿判〕绦蛑惶峁┝薐avaScript的編程能力。美顏是我們直接將圖像處理算法打包進(jìn)微信APP實(shí)現(xiàn)的,JavaScript無法達(dá)到這個(gè)計(jì)算性能的要求。

LiveVideoStack:小程序接受直播、在線教育、金融、醫(yī)療、視頻會(huì)議、電商、政務(wù)民生等幾類應(yīng)用的審核,在您看來,具有音視頻能力的小程序最佳的應(yīng)用場(chǎng)景是什么?

常青:小程序的定位就是服務(wù)號(hào)的能力擴(kuò)展,最佳的應(yīng)用場(chǎng)景就是裝APP太麻煩,搜索一下就能用的場(chǎng)景,比如遠(yuǎn)程車險(xiǎn)定損、在線視頻客服等等,這些惠民便民的場(chǎng)景也是微信非常鼓勵(lì)和推薦的。



易優(yōu)小程序(企業(yè)版)+靈活api+前后代碼開源 碼云倉庫:starfork
本文地址:http://www.u-renovate.com/wxmini/doc/develop/19630.html 復(fù)制鏈接 如需定制請(qǐng)聯(lián)系易優(yōu)客服咨詢:800182392 點(diǎn)擊咨詢
QQ在線咨詢
AI智能客服 ×