
WebRTC開發(fā)人員可以說形形色色,但論起出身淵源,通常無外乎以下兩類:
- 10年前做過VoIP開發(fā)人員(這可能意味著他們配置過Asterisk安裝實(shí)例、編寫過自己的RTP堆棧,諸如此類)
- 本身即是Web開發(fā)人員(具體從事的往往是在付費(fèi)主題的基礎(chǔ)上實(shí)現(xiàn)WordPress網(wǎng)站,但也可能是構(gòu)建像Facebook之類的全球各種社交網(wǎng)站所使用的后端)
而難題在于,WebRTC介乎于VoIP和Web這兩種全然不同的領(lǐng)域之間。

我本人又屬于哪一類呢?其實(shí)也是VoIP開人員出身。我為一款A(yù)SN.1 PER編/解碼器編寫過自己的無遞歸實(shí)現(xiàn)代碼,采用的是在靜態(tài)內(nèi)存中運(yùn)行的方式。還在多種不同的操作系統(tǒng)上線性擴(kuò)展過UDP/TCP套接字實(shí)現(xiàn)代碼。也使用C代碼進(jìn)行過多線程處理。更從事過如今的大多數(shù)開發(fā)人員甚至都無法理解的一些底層工作。雖然這些都是不錯(cuò)的起點(diǎn),但對于過渡到WebRTC并沒有起到實(shí)質(zhì)性的幫助作用。
關(guān)鍵并不在于WebRTC本身,而在于了解在開發(fā)VoIP產(chǎn)品時(shí)與開發(fā)互聯(lián)網(wǎng)Web應(yīng)用程序時(shí)所用到的不同思維模式和方法。此外,還需能夠?qū)W習(xí)新技術(shù)和新的思考方式。
本篇博文并非要引領(lǐng)你完成整個(gè)學(xué)習(xí)歷程,但對你制定學(xué)習(xí)方案會(huì)有助益。在本文中,我們將一起探討現(xiàn)在可以從哪三個(gè)方面著手來從VoIP或Web開發(fā)人員搖身變成資深的WebRTC開發(fā)人員。
哪些是你不懂的?
首先要著手做的事情就是弄清楚你需要學(xué)習(xí)什么。一些人可能認(rèn)為,要成為WebRTC開發(fā)人員,只需要懂HTML、CSS和些許JavaScript。再從github上找到一個(gè)采用WebRTC的項(xiàng)目,安裝到自己的服務(wù)器上運(yùn)行即可。這樣就大功告成了!
這自然是一個(gè)不錯(cuò)的著手點(diǎn),但采用WebRTC進(jìn)行開發(fā)并非只是學(xué)點(diǎn)兒JavaScript那么簡單。也不是學(xué)會(huì)Node.js就行的。
要想讓自己真正稱得上一名WebRTC開發(fā)人員,你需要從以下諸多方面著手學(xué)習(xí):
- WebRTC API:要成為WebRTC開發(fā)人員,顯而易見需達(dá)到這項(xiàng)要求
- 前端開發(fā):HTML、CSS和JavaScript
- 后端開發(fā):Node.js或其他某種現(xiàn)代異步開發(fā)平臺(tái)
- 網(wǎng)絡(luò):TCP、UDP、HTTP、WebSocket以及介乎于這些概念之間的任何概念
- 編碼解碼器和媒體處理:如何設(shè)計(jì)和實(shí)現(xiàn)代碼、采用哪些算法和技術(shù)通過SRTP將媒體經(jīng)由網(wǎng)絡(luò)發(fā)送出去。如果懂Simulcast和SVC,那就更好了。
- 服務(wù)器端媒體處理:需要了解可用來支持組呼、實(shí)況直播和錄制等功能的不同技術(shù)
- 故障排查和監(jiān)控工具:至少要學(xué)會(huì)如何閱讀webrtc-internals轉(zhuǎn)儲(chǔ)文件并了解ICE故障
- 常用框架:了解現(xiàn)有的流行框架以及這些框架適用的情況。例如,對Jitsi、Kurento和Janus有一定的了解也是有益無害的
掌握了上述技能和知識,你就能夠開發(fā)幾乎所有的實(shí)時(shí)通信產(chǎn)品。如此多的主題看起來可能令人望而生畏,不過我在下文中分享了一些資源,讓您可以相對較快地了解上述每個(gè)主題。此外需要說明的是,這些主題你不必樣樣精通,但作為一名WebRTC開發(fā)人員,您必須對其中的每一個(gè)主題都有基本的了解。當(dāng)然,我自知我對上述主題也并非門門精通……
至此你已經(jīng)知道了自己需要懂哪些方面,接下來我們就看看可以通過哪三種首選方式來學(xué)習(xí)所需的知識和技能。

1. 通過閱讀資料來學(xué)習(xí)WebRTC開發(fā)
無論是哪個(gè)主題,要想增長知識,其中一個(gè)最佳的方式就是閱讀和緊密關(guān)注業(yè)界專家撰寫的博文和教程。在這方面WebRTC也不例外。
雖然WebRTC博客數(shù)量不多,但你依然需要在這方面多加關(guān)注,充分發(fā)掘有限博文中的價(jià)值。挑選幾個(gè)優(yōu)質(zhì)博客進(jìn)行關(guān)注即可。我之所以盡量訂閱所有博客,主要是因?yàn)槲业穆殬I(yè)要求我盡可能充分了解WebRTC市場,而且我還需要打理WebRTC周刊博客?偨Y(jié)起來,對于WebRTC開發(fā)方面的核心內(nèi)容,我密切關(guān)注且必讀必懂的就只有以下三個(gè)主要博客:
- webrtcHacks:一言蔽之,提供了有關(guān)WebRTC的優(yōu)質(zhì)內(nèi)容供開發(fā)人員參考……
- Mozilla的“推進(jìn)WebRTC”:Mozilla最近開設(shè)了一個(gè)專門講解WebRTC的新博客。博客內(nèi)容質(zhì)量一流,所含的信息也很實(shí)用。具體涵蓋了與WebRTC相關(guān)的一些小問題,并提供了一些非常實(shí)用的代碼段
- Philipp Hancke:如果說有誰對WebRTC無所不知的話,那非Philipp莫屬。他在WebRTC以及瀏覽器行為分析方面有系統(tǒng)性的研究。每當(dāng)他撰寫并發(fā)布博文,我最終都會(huì)收獲至少一項(xiàng)新知識。
- WebRTC周刊:沒錯(cuò)。這是我和Kranky共同打理的一個(gè)博客。這個(gè)博客為您提供WebRTC的最新發(fā)展脈搏,所以關(guān)注它可以讓您更快地找到其他人撰寫的內(nèi)容,特別是那些讓我苦等很久才偶而發(fā)布一次內(nèi)容的人。
您不妨挑選幾個(gè)想要關(guān)注的博客進(jìn)行訂閱。不必對它們發(fā)布的所有內(nèi)容都細(xì)細(xì)研讀,但一定要定期閱讀那些會(huì)讓您大開眼界、甚至?xí)岩勺约菏欠袷呛细耖_發(fā)人員的技術(shù)文章。我采取的就是這種方法,現(xiàn)在我已經(jīng)不再自視為開發(fā)人員。你很可能會(huì)不由自主地采取下一步驟:打開一個(gè)代碼編輯器,試著運(yùn)行您所閱讀的文章中公布的代碼段。
2. 通過參加課程來學(xué)習(xí)WebRTC開發(fā)
閱讀有關(guān)WenRTC的內(nèi)容是確保您與時(shí)俱進(jìn)的必要之舉,必須持之以恒,特別是考慮到WebRTC的發(fā)展日新月異,且目前還沒有穩(wěn)定的規(guī)范發(fā)布出來。要想真正地快速培養(yǎng)新技能,參加一些正式培訓(xùn)是可取的做法。
網(wǎng)上已經(jīng)開設(shè)了幾門WebRTC培訓(xùn)課程,都不難找到。我觀看過的那些課程重點(diǎn)講解WebRTC API方面,這也是著手學(xué)習(xí)WebRTC的良好切入點(diǎn)。不過難題在于,WebRTC仍未標(biāo)準(zhǔn)化,因此很多方面變化太快,導(dǎo)致此類內(nèi)容往往難以跟上最新發(fā)展的腳步。
在這些課程中,我猜有兩個(gè)地方可以讓您全面了解WebRTC:
- Google的WebRTC代碼實(shí)驗(yàn)室:這是Google開設(shè)的一門基礎(chǔ)入門課程,介紹如何使用WebRTC。這門課程將為您講解WebRTC的基本概念,引導(dǎo)您完成簡單的首次概念驗(yàn)證并快速獲得結(jié)果。
- WebRTC學(xué)院:WebRTC學(xué)院的WebRTC課程著重講解WebRTC API及其使用方式。對于急著直接使用WebRTC進(jìn)行開發(fā)的人員,建議從這項(xiàng)資源著手學(xué)習(xí)。
- 高級WebRTC體系結(jié)構(gòu):這是我在本網(wǎng)站上開設(shè)的一門課程。在此課程中,我決定不以WebRTC API作為講解重點(diǎn),直接跳過這方面的內(nèi)容;并嘗試更多地講解后端方面,讓學(xué)員具備全面的后端構(gòu)建能力,從而可以自行構(gòu)建產(chǎn)品體系結(jié)構(gòu)。
- Kranky Geek:對于視覺元素類型,我建議觀看由Kranky Geek整理的主題(我也是該團(tuán)隊(duì)的一員)。您會(huì)觀看到就具體WebRTC開發(fā)主題提供的優(yōu)質(zhì)內(nèi)容。
除了WebRTC培訓(xùn)之外,務(wù)必還要觀看一些其他的課程,例如Udemy、Codecademy或Pluralsight等網(wǎng)站上提供的全棧Web開發(fā)培訓(xùn)或Node.js開發(fā)課程。

有沒有什么書可讀?
幾個(gè)月來我一直有個(gè)困擾揮之不去:已經(jīng)有一年多時(shí)間沒有關(guān)于WebRTC的新書出版了。
我記得上次有WebRTC新書出版還是2015年6月的事情。
現(xiàn)在,如果您仍然習(xí)慣于通過讀書來學(xué)習(xí)新知,可以查看WebRTC圖書一覽,時(shí)至今日它依然有效。
如果您的開發(fā)工作與Web瀏覽器有關(guān),不要忘了閱讀高性能瀏覽器網(wǎng)絡(luò)(特別是您打算使用WebRTC打造自己的信號系統(tǒng)時(shí))。
3. 通過動(dòng)手實(shí)踐來學(xué)習(xí)WebRTC開發(fā)
在實(shí)際項(xiàng)目中付諸實(shí)踐并撰寫心得有助于進(jìn)一步鞏固閱讀和了解的內(nèi)容
閱讀有關(guān)WebRTC開發(fā)的內(nèi)容會(huì)讓您保持思維敏銳。學(xué)習(xí)WebRTC開發(fā)課程則有助于您培養(yǎng)新技能和透徹了解這項(xiàng)技術(shù)。但要想真正成長為一名開發(fā)人員,您需要找到機(jī)會(huì)有效運(yùn)用學(xué)到的所有知識和技能。
如何才能有效地運(yùn)用學(xué)到的知識和技能呢?我能想到的方式有四種:
- 開發(fā)個(gè)人項(xiàng)目——可以是博客、個(gè)人作品集、個(gè)人愛好網(wǎng)站等?梢赃x擇一些能夠讓您絞盡腦汁,在開發(fā)過程中需要不斷思索解決方案的個(gè)人項(xiàng)目。我想Muaz Khan在這方面是做得最好的。Brian Ho最近分享了關(guān)于在客戶端/服務(wù)器Web游戲中使用WebRTC的經(jīng)驗(yàn)心得,我也非常喜歡。
- 為付費(fèi)客戶開發(fā)產(chǎn)品——有太多的服務(wù)提供商都在尋找WebRTC開發(fā)能手,數(shù)量之多可能超乎您的想象。
- 撰寫文章談?wù)勛约簩W(xué)習(xí)的新技能并將它們發(fā)布在自己的博客上,最好提交到webrtcHacks。要想確保自己真正理解了某個(gè)主題,撰寫一篇關(guān)于該主題的教程可以說是最好的辦法。
- 成為WebRTC專業(yè)人士——掌握了必備知識并積累了一些經(jīng)驗(yàn)后,您可能想要加入一家正在積極使用WebRTC開發(fā)產(chǎn)品的WebRTC外包公司。不妨聽聽Germán Goldenstein是如何說的——作為開發(fā)人員,能有他這樣的職業(yè)經(jīng)歷可以說十分難得。這篇文章也讓我想明白了自己為何如此喜歡開發(fā)工作和與開發(fā)人員協(xié)同合作。
今后還需要從哪些方面著手學(xué)習(xí)?
我們這個(gè)行業(yè)有一個(gè)悖論。
一方面,WebRTC極為簡單(可以對比一下在WebRTC問世前相同的開發(fā)項(xiàng)目需要的工作量)。但同時(shí),懂得如何使用它的資深開發(fā)人員卻又不多。與一些正在尋求WebRTC人才的雇主聊聊,您就知道找到合適的人有多難。有時(shí),他們在與懂得如何開發(fā)網(wǎng)站或移動(dòng)應(yīng)用但對WebRTC一無所知的外包供應(yīng)商合作后,感到非常不滿意,所以多數(shù)雇主最終都選擇了在內(nèi)部培養(yǎng)WebRTC開發(fā)人員。
不過,如果您不滿足于從github中復(fù)制粘貼Hello World WebRTC概念的實(shí)現(xiàn)代碼,希望不僅僅將WebRTC當(dāng)做一種愛好,而是要成為一名真正的WebRTC開發(fā)人員,您需要制定一份學(xué)習(xí)方案并嚴(yán)格按照方案學(xué)習(xí)。
方案中應(yīng)包含三項(xiàng)核心的學(xué)習(xí)活動(dòng):閱讀資料、參加課程和動(dòng)手實(shí)踐。只要能夠在這三個(gè)方面持之以恒,用不了多久您就會(huì)從業(yè)余愛好者搖身變成一名專業(yè)的WebRTC開發(fā)人員。
當(dāng)然,你也可以直接使用Agora SDK,從編解碼到服務(wù)端的都涵蓋了。