
根據騰訊全球合作伙伴大會(huì )上發(fā)布的《2017年微信數據報告》顯示,截止到2017年9月,微信日成功通話(huà)次數2.05次,月人均通話(huà)時(shí)長(cháng)139分鐘,月人均通話(huà)次數19次。通過(guò)這些數據我們可以看到,微信視頻通話(huà)的出現,已潛移默化地改變了人與人通信的方式。
而回望三大運營(yíng)商的數據,語(yǔ)音通話(huà)量在2015年首次出現了負增長(cháng),可以看到互聯(lián)網(wǎng)OTT應用對傳統語(yǔ)音通話(huà)業(yè)務(wù)的沖擊有多強烈。正是由于這些日益完善的基礎設施,更快的智能手機,更快的網(wǎng)絡(luò ),更豐富的使用場(chǎng)景,實(shí)時(shí)通信的需求越來(lái)越強烈。
從2015開(kāi)始不斷涌現出的互動(dòng)直播、狼人殺、抓娃娃、直播答題、線(xiàn)上KTV等創(chuàng )新,將常見(jiàn)的線(xiàn)下場(chǎng)景轉至線(xiàn)上,也足以作為實(shí)時(shí)音視頻通信風(fēng)頭正勁的有力佐證。
越來(lái)越多的創(chuàng )業(yè)者都在思考如何將線(xiàn)下互動(dòng)的場(chǎng)景搬到線(xiàn)上,從而打造下一個(gè)風(fēng)靡全民爆款的應用。
說(shuō)到實(shí)時(shí)通信,不得不提到WebRTC,WebRTC全名為Web Real Time Communication,從Web這個(gè)詞就可以看出,最初這項技術(shù)是為瀏覽器量身打造用以實(shí)時(shí)音視頻能力而準備的。
但其實(shí)WebRTC在不同場(chǎng)景下包含不同的含義,它既可以代表Google開(kāi)源的WebRTC項目,又可以代表W3C工作組制定的WebRTC標準,也可以代表瀏覽器中的WebRTC接口,我們將他們統稱(chēng)為WebRTC技術(shù)。當前具有實(shí)時(shí)音視頻能力的應用或者服務(wù),或多或少都使用了WebRTC技術(shù),當然所有的這些背后都離不開(kāi)Google開(kāi)源的WebRTC項目,下面我們扒一扒WebRTC背后的故事。
回溯歷史:為什么需要WebRTC
說(shuō)到WebRTC,我們不得不提到Gobal IP Solutions,簡(jiǎn)稱(chēng)GIPS。這是一家1990年成立于瑞典斯德哥爾摩的VoIP軟件開(kāi)發(fā)商,提供了可以說(shuō)是世界上最好的語(yǔ)音引擎。
Skype、騰訊QQ、WebEx、Vidyo等都使用了它的音頻處理引擎,包含了受專(zhuān)利保護的回聲消除算法,適應網(wǎng)絡(luò )抖動(dòng)和丟包的低延遲算法,以及先進(jìn)的音頻編解碼器。
Google在Gtalk中也使用了GIPS的授權。Google在2011年收購了GIPS,并將其源代碼開(kāi)源,加上在2010年收購的On2獲取到的VPx系列視頻編解碼器,WebRTC開(kāi)源項目應運而生,即GIPS音視頻引擎+替換掉H.264的VPx視頻編解碼器。
在此之后,Google又將在Gtalk中用于P2P打洞的開(kāi)源項目libjingle融合進(jìn)了WebRTC。所以目前WebRTC提供了在Web、iOS、Android、Mac、Windows、Linux在內的所有平臺的API,保證了API在所有平臺的一致性。使用WebRTC的好處主要有以下幾個(gè)方面:
- 免費的使用GIPS先進(jìn)的音視頻引擎,在此之前都需要付費授權。
- 由于音視頻傳輸是基于點(diǎn)對點(diǎn)傳輸的,所以實(shí)現簡(jiǎn)單的1對1通話(huà)場(chǎng)景,需要較少的服務(wù)器資源,借助免費的STUN/TURN服務(wù)器可以大大節約成本開(kāi)銷(xiāo)。
- 開(kāi)發(fā)Web版本的應用非常方便,使用簡(jiǎn)單的JS接口,無(wú)需安裝任何插件,即可實(shí)現音視頻互通。
WebRTC標準掀起的影響
2017年11月2日,在經(jīng)歷了6年的時(shí)間之后,W3C WebRTC 1.0草案正式定稿。同樣也是在2017年,Microsoft Edge與Apple Safari也紛紛宣稱(chēng)了在其最新的版本里支持WebRTC 1.0標準API。
雖然不同瀏覽器廠(chǎng)商在某些實(shí)現細節方面有所差別,比如Safari只支持H.264,不同的SDP描述格式等等,但除了IE之外,所有主流瀏覽器Google Chrome、Mozilla Firefox、Apple Safari、Microsoft Edge都已經(jīng)支持WebRTC 1.0,所有瀏覽器之間無(wú)插件化的音視頻互通已經(jīng)成為一種可能。
越來(lái)越多的終端設備上,無(wú)需借助任何插件或者native應用,通過(guò)打開(kāi)網(wǎng)頁(yè)鏈接,即可進(jìn)行高質(zhì)量的音視頻通話(huà),應用開(kāi)發(fā)者也無(wú)需關(guān)注音視頻引擎實(shí)現細節,大大節約了開(kāi)發(fā)成本。
廣泛的適用場(chǎng)景
WebRTC適用的場(chǎng)景可以說(shuō)是非常廣泛,很多行業(yè)結合實(shí)時(shí)通信都可以創(chuàng )造出非常有意思的場(chǎng)景,傳統的實(shí)時(shí)通信應用場(chǎng)景主要是在視頻會(huì )議、視頻面試、VoIP通話(huà)、呼叫中心,產(chǎn)品如WebEx、Skype等。
當下比較火的場(chǎng)景主要集中在社交、游戲、體育、電視、相親類(lèi)的直播,以及互動(dòng)連麥、在線(xiàn)教育、在線(xiàn)醫療、金融證券在線(xiàn)開(kāi)戶(hù)、智能硬件(如無(wú)人機)、智能家居設備如攝像頭監控以及智能語(yǔ)音設備。
當然WebRTC除了提供音視頻傳輸功能,還有一個(gè)容易被忽略的功能就是數據傳輸。利用點(diǎn)對點(diǎn)的傳輸機制,一些開(kāi)發(fā)者創(chuàng )造出了諸如Webtorrent以及PeerCDN這樣的不經(jīng)過(guò)服務(wù)器的數據傳輸網(wǎng)絡(luò )服務(wù)。所以WebRTC非常適合用來(lái)打造實(shí)時(shí)通信的應用。
而直播作為當下的熱點(diǎn)應用,肯定少不了對于WebRTC的使用,而這又要提到rtmp。
從RTMP到WebRTC
從應用角度來(lái)講,受到用戶(hù)使用習慣的改變,越來(lái)越多的直播產(chǎn)品都開(kāi)始加入視頻互通的功能。同時(shí),像視頻會(huì )議、視頻核保一類(lèi)的應用方式也在不斷增加。這影響著(zhù)技術(shù)選型的變遷。
RTMP(Real Time Messaging Protocol)實(shí)時(shí)消息傳送協(xié)議是Adobe Systems公司為Flash播放器和服務(wù)器之間音頻、視頻和數據傳輸開(kāi)發(fā)的開(kāi)放協(xié)議。隨著(zhù)直播興起,很多人都將它用在直播上。
在協(xié)議方面,rtmp完全可以滿(mǎn)足直播產(chǎn)品的需求,但由于其相對延時(shí)較高,不能滿(mǎn)足視頻互通的產(chǎn)品需求。于是大家很自然地將目光投向UDP、QUIC(基于UDP)一類(lèi)延時(shí)更低的網(wǎng)絡(luò )協(xié)議。
在技術(shù)框架方面,由于自研一套符合視頻互通要求的通信系統相對復雜,不僅涉及網(wǎng)絡(luò )傳輸、前端開(kāi)發(fā)、移動(dòng)端開(kāi)發(fā),還要解決音視頻編解碼中復雜的算法優(yōu)化,對開(kāi)發(fā)者的技術(shù)棧要求很高,所以越來(lái)越多的人選擇WebRTC。
目前來(lái)看,WebRTC已經(jīng)獲得了越來(lái)越多瀏覽器廠(chǎng)商及相關(guān)技術(shù)廠(chǎng)商的支持,應用的前景將會(huì )更加廣闊。
但是受限于WebRTC自身的一些缺憾,一般開(kāi)發(fā)者都不是直接完全使用WebRTC,而是根據實(shí)際場(chǎng)景基于WebRTC進(jìn)行二次開(kāi)發(fā)。WebRTC本身并不是萬(wàn)能鑰匙,不可能一套代碼以及接口可以解決所有問(wèn)題。
如何做二次改造?
WebRTC是一個(gè)非常優(yōu)秀的項目,但如果直接拿來(lái)使用也存在以下問(wèn)題。
- 第一,WebRTC使用的是對點(diǎn)對傳輸,雖然節約了服務(wù)器資源的開(kāi)銷(xiāo),但實(shí)際使用時(shí)也帶來(lái)了傳輸質(zhì)量的問(wèn)題,比如跨國以及跨運營(yíng)商網(wǎng)絡(luò )之間的傳輸質(zhì)量往往很難保證,雖然webRTC有優(yōu)秀的端對端質(zhì)量控制算法,但在錯綜復雜的網(wǎng)絡(luò )條件下,表現也很難讓人滿(mǎn)意。
- 第二,WebRTC在移動(dòng)端的表現也很難讓人滿(mǎn)意。早期由于缺少對于H.264編解碼器的支持,使得移動(dòng)端很長(cháng)一段時(shí)間只能使用VP8軟件編解碼,導致在中低端手機上的表現較差,加上安卓自身碎片化的屬性,如果不針對不同機型做適配,很難有統一的用戶(hù)體驗。
- 第三,WebRTC是為1對1通信場(chǎng)景設計的,如果要實(shí)現多人的場(chǎng)景,還是需要借助服務(wù)端方案。即使當前有很多開(kāi)源的webRTC服務(wù)器實(shí)現,一個(gè)流媒體中轉服務(wù)器或者混流服務(wù)器的部署以及維護也是非常復雜的。
- 第四,在Web端需要面臨不同瀏覽器之間的兼容性問(wèn)題。雖然使用AdapterJS可以解決不同瀏覽器之間的接口適配問(wèn)題,但除此之外依然要面臨不同瀏覽器行為不一致的問(wèn)題。可以說(shuō)如果WebRTC如果直接拿過(guò)來(lái)商用的話(huà),幾乎是不太可能的,當下普遍的解決方案是自研,根據自身的業(yè)務(wù)場(chǎng)景進(jìn)行二次定制開(kāi)發(fā),或者更簡(jiǎn)單一點(diǎn)使用第三方SDK。
WebRTC的前景
未來(lái)在實(shí)時(shí)通信領(lǐng)域,WebRTC依然是非常重要的一塊拼圖。
無(wú)論是Web還是Native,都非常依賴(lài)WebRTC提供的音視頻引擎,尤其是在Web端,幾乎所有瀏覽器廠(chǎng)商的實(shí)現都是基于Google WebRTC項目。隨著(zhù)WebRTC 1.0標準的定稿,各大瀏覽器的WebRTC接口已經(jīng)基本得到統一。
一直以來(lái),WebRTC都缺少測試工具。在去年年底,Google推出了KITE開(kāi)源項目,用于幫助開(kāi)發(fā)者檢測WebRTC應用在不同瀏覽器的互通性。對于標準化社區來(lái)講,下一步工作主要會(huì )圍繞提供一組更完備的測試套件,不僅可以幫助開(kāi)發(fā)者測試WebRTC應用在Web端、Native端的互通性與體驗,還有助于保證各廠(chǎng)商瀏覽器WebRTC接口功能的一致性,并逐步完善WebRTC缺失的功能。
在相關(guān)技術(shù)方面,QUIC也進(jìn)入更多人的視野。對于WebRTC來(lái)講,QUIC可以加速數據通道的連接(至少原理上可行),還可以完全替代SCTP。但問(wèn)題是,目前支持QUIC的瀏覽器只有Chrome和Opera。
另一方面,各瀏覽器也在持續不斷地修復問(wèn)題,對不同硬件設備以及系統平臺進(jìn)行適配,保證WebRTC能穩定運行于除主流機型、系統版本以外,更多的設備上。
作者簡(jiǎn)介
毛玉杰,聲網(wǎng)WebRTC專(zhuān)家,WebRTC Committer