WebRTC本身是一組技術(shù)的集合,基本上考慮到了音視頻通話的方方面面,但是要把它用起來(lái)也并不容易。要自建WebRTC服務(wù),除了要考慮信令服務(wù)器和NAT防火墻穿透外,在多人通話中你還需要考慮用選擇發(fā)送單元(SFU)或多點(diǎn)控制單元(MCU)來(lái)控制通話信息路由。Slack在其工程博客介紹,它采用了Janus來(lái)作為自建的SFU,同時(shí)進(jìn)行了大量的性能優(yōu)化。這只是WebRTC應(yīng)用開(kāi)發(fā)中的其中一例。
受訪嘉賓介紹
Raj Kumar, Slack視頻組高級(jí)主管工程師。畢業(yè)于卡內(nèi)基梅隆大學(xué)電子工程專(zhuān)業(yè),WebRTC視頻編解碼專(zhuān)家,全棧工程師,擅長(zhǎng)多媒體領(lǐng)域數(shù)字信號(hào)處理。先后就職于Apple, Internet Archive, Flurry Live。任職蘋(píng)果公司工程師期間負(fù)責(zé)QuickTime Video編解碼研發(fā)工作,獲得十項(xiàng)研發(fā)專(zhuān)利。
InfoQ:Slack為什么會(huì)選用WebRTC技術(shù)?
Raj: WebRTC的一個(gè)很大優(yōu)勢(shì)是它內(nèi)置在當(dāng)今的Web瀏覽器中。在WebRTC之上構(gòu)建您的產(chǎn)品,意味著用戶(hù)可以在Web瀏覽器中啟動(dòng)應(yīng)用程序,無(wú)需安裝任何插件或下載任何其他軟件。
內(nèi)置在Web瀏覽器中的WebRTC技術(shù)不僅可以提供一流的用戶(hù)體驗(yàn),同時(shí)也使得不同產(chǎn)品之間的協(xié)同變得輕而易舉。例如,Slack用戶(hù)可以使用Slack Calls進(jìn)行視頻通話,也可以使用與Slack集成的任何一款第三方的視頻會(huì)議應(yīng)用程序。這些應(yīng)用程序能夠與Slack無(wú)縫地鏈接在一起。
使用WebRTC的另一個(gè)優(yōu)點(diǎn)是,當(dāng)由Google主導(dǎo)的WebRTC團(tuán)隊(duì)對(duì)產(chǎn)品進(jìn)行改進(jìn)時(shí),基于WebRTC而構(gòu)建的所有應(yīng)用程序都可以快速獲得相應(yīng)的改進(jìn)。例如,當(dāng)WebRTC團(tuán)隊(duì)優(yōu)化回聲消除或帶寬估計(jì)算法時(shí),所有的WebRTC應(yīng)用程序也都可以立即使用這些成果。
實(shí)時(shí)通信是由采集、編碼、前后處理、解碼、緩沖、渲染等多種技術(shù)組成的集合體,WebRTC提供了前端實(shí)現(xiàn)和編解碼,如果開(kāi)發(fā)者要商用,還需要做不少的開(kāi)發(fā)部署工作,來(lái)提供可用性。
InfoQ:我們?cè)诰W(wǎng)上看到了一些評(píng)論,說(shuō)WebRTC會(huì)占用非常高的CPU計(jì)算資源,這是怎么回事呢?
Raj: WebRTC中最消耗計(jì)算資源的組件是視頻編碼器。在大多數(shù)平臺(tái)上,視頻編碼和解碼都是在軟件中執(zhí)行,而不是使用專(zhuān)用的硬件編解碼器。好消息是,這種情況正在緩慢地改善。
WebRTC允許使用VP8、VP9或H.264視頻編解碼器。H.264編解碼器的硬件支持適用于大多數(shù)的移動(dòng)平臺(tái),現(xiàn)在我們開(kāi)始看到WebRTC應(yīng)用程序已經(jīng)在iOS和Android上通過(guò)使用H.264來(lái)獲得更好的性能。在桌面系統(tǒng)支持方面,WebRTC的H.264硬件編碼目前還不能像在移動(dòng)系統(tǒng)上那樣獲得廣泛的支持,還不能在瀏覽器中啟用。
此外,WebRTC在使用H.264時(shí)還不支持諸如Simulcast或Scalable Video Coding之類(lèi)的技術(shù)。需要這些功能的應(yīng)用程序主要使用VP8或VP9編解碼器,這些編解碼器還沒(méi)有在大多數(shù)平臺(tái)上獲得硬件支持。對(duì)WebRTC編解碼器的硬件支持將有助于減少我們今天看到的高CPU使用率問(wèn)題,不過(guò)這些問(wèn)題正在解決之中,預(yù)計(jì)還需要時(shí)間。
InfoQ:當(dāng)您在Slack部署WebRTC時(shí),遇到的最大的技術(shù)問(wèn)題是什么?
Raj: Slack可以為Mac、Windows和Linux桌面,以及iOS和Android設(shè)備提供客戶(hù)端。我們面臨的一個(gè)挑戰(zhàn)是使所有客戶(hù)的WebRTC庫(kù)保持同步,并為每個(gè)客戶(hù)端團(tuán)隊(duì)提供本地平臺(tái)的高級(jí)WebRTC API。
為了應(yīng)對(duì)這些挑戰(zhàn),我們打造了一個(gè)構(gòu)建系統(tǒng),該系統(tǒng)可以讓我們的Android團(tuán)隊(duì)通過(guò)Java界面,讓我們的iPhone團(tuán)隊(duì)通過(guò)Objective-C界面,讓我們的桌面團(tuán)隊(duì)通過(guò)C ++界面,對(duì)WebRTC進(jìn)行協(xié)同編譯。該系統(tǒng)讓我們的團(tuán)隊(duì)可以專(zhuān)注于建立強(qiáng)大的客戶(hù)端,而不必?fù)?dān)心WebRTC代碼的接口問(wèn)題。
InfoQ:關(guān)于如何使用WebRTC,您可以向我們的讀者提供一些建議嗎?
Raj:通過(guò)WebRTC,任何人都可以輕松地訪問(wèn)強(qiáng)大的應(yīng)用程序。您只需少量的Javascript操作即可將視頻會(huì)議添加到您的應(yīng)用程序中,并且由于WebRTC可以在瀏覽器之間進(jìn)行點(diǎn)對(duì)點(diǎn)的連接,因此您無(wú)需托管視頻服務(wù)器就可以部署出應(yīng)用程序。
WebRTC仍然是一種新興的技術(shù),與之相關(guān)的質(zhì)量演進(jìn)還需要比較長(zhǎng)時(shí)間,應(yīng)用場(chǎng)景都有很大空間可以挖掘,所以對(duì)開(kāi)發(fā)者來(lái)說(shuō),現(xiàn)在是構(gòu)建自己的應(yīng)用的很好時(shí)機(jī)!