WebRTC開發(fā)人員可以說形形色色,但論起出身淵源,通常無外乎以下兩類:
- 10年前做過VoIP開發(fā)人員(這可能意味著他們配置過Asterisk安裝實例、編寫過自己的RTP堆棧,諸如此類)
- 本身即是Web開發(fā)人員(具體從事的往往是在付費主題的基礎(chǔ)上實現(xiàn)WordPress網(wǎng)站,但也可能是構(gòu)建像Facebook之類的全球各種社交網(wǎng)站所使用的后端)
而難題在于,WebRTC介乎于VoIP和Web這兩種全然不同的領(lǐng)域之間。
我本人又屬于哪一類呢?其實也是VoIP開人員出身。我為一款ASN.1 PER編/解碼器編寫過自己的無遞歸實現(xiàn)代碼,采用的是在靜態(tài)內(nèi)存中運行的方式。還在多種不同的操作系統(tǒng)上線性擴展過UDP/TCP套接字實現(xiàn)代碼。也使用C代碼進行過多線程處理。更從事過如今的大多數(shù)開發(fā)人員甚至都無法理解的一些底層工作。雖然這些都是不錯的起點,但對于過渡到WebRTC并沒有起到實質(zhì)性的幫助作用。
關(guān)鍵并不在于WebRTC本身,而在于了解在開發(fā)VoIP產(chǎn)品時與開發(fā)互聯(lián)網(wǎng)Web應用程序時所用到的不同思維模式和方法。此外,還需能夠?qū)W習新技術(shù)和新的思考方式。
本篇博文并非要引領(lǐng)你完成整個學習歷程,但對你制定學習方案會有助益。在本文中,我們將一起探討現(xiàn)在可以從哪三個方面著手來從VoIP或Web開發(fā)人員搖身變成資深的WebRTC開發(fā)人員。
哪些是你不懂的?
首先要著手做的事情就是弄清楚你需要學習什么。一些人可能認為,要成為WebRTC開發(fā)人員,只需要懂HTML、CSS和些許JavaScript。再從github上找到一個采用WebRTC的項目,安裝到自己的服務器上運行即可。這樣就大功告成了!
這自然是一個不錯的著手點,但采用WebRTC進行開發(fā)并非只是學點兒JavaScript那么簡單。也不是學會Node.js就行的。
要想讓自己真正稱得上一名WebRTC開發(fā)人員,你需要從以下諸多方面著手學習:
- WebRTC API:要成為WebRTC開發(fā)人員,顯而易見需達到這項要求
- 前端開發(fā):HTML、CSS和JavaScript
- 后端開發(fā):Node.js或其他某種現(xiàn)代異步開發(fā)平臺
- 網(wǎng)絡:TCP、UDP、HTTP、WebSocket以及介乎于這些概念之間的任何概念
- 編碼解碼器和媒體處理:如何設(shè)計和實現(xiàn)代碼、采用哪些算法和技術(shù)通過SRTP將媒體經(jīng)由網(wǎng)絡發(fā)送出去。如果懂Simulcast和SVC,那就更好了。
- 服務器端媒體處理:需要了解可用來支持組呼、實況直播和錄制等功能的不同技術(shù)
- 故障排查和監(jiān)控工具:至少要學會如何閱讀webrtc-internals轉(zhuǎn)儲文件并了解ICE故障
- 常用框架:了解現(xiàn)有的流行框架以及這些框架適用的情況。例如,對Jitsi、Kurento和Janus有一定的了解也是有益無害的
掌握了上述技能和知識,你就能夠開發(fā)幾乎所有的實時通信產(chǎn)品。如此多的主題看起來可能令人望而生畏,不過我在下文中分享了一些資源,讓您可以相對較快地了解上述每個主題。此外需要說明的是,這些主題你不必樣樣精通,但作為一名WebRTC開發(fā)人員,您必須對其中的每一個主題都有基本的了解。當然,我自知我對上述主題也并非門門精通……
至此你已經(jīng)知道了自己需要懂哪些方面,接下來我們就看看可以通過哪三種首選方式來學習所需的知識和技能。
1. 通過閱讀資料來學習WebRTC開發(fā)
無論是哪個主題,要想增長知識,其中一個最佳的方式就是閱讀和緊密關(guān)注業(yè)界專家撰寫的博文和教程。在這方面WebRTC也不例外。
雖然WebRTC博客數(shù)量不多,但你依然需要在這方面多加關(guān)注,充分發(fā)掘有限博文中的價值。挑選幾個優(yōu)質(zhì)博客進行關(guān)注即可。我之所以盡量訂閱所有博客,主要是因為我的職業(yè)要求我盡可能充分了解WebRTC市場,而且我還需要打理WebRTC周刊博客。總結(jié)起來,對于WebRTC開發(fā)方面的核心內(nèi)容,我密切關(guān)注且必讀必懂的就只有以下三個主要博客:
- webrtcHacks:一言蔽之,提供了有關(guān)WebRTC的優(yōu)質(zhì)內(nèi)容供開發(fā)人員參考……
- Mozilla的“推進WebRTC”:Mozilla最近開設(shè)了一個專門講解WebRTC的新博客。博客內(nèi)容質(zhì)量一流,所含的信息也很實用。具體涵蓋了與WebRTC相關(guān)的一些小問題,并提供了一些非常實用的代碼段
- Philipp Hancke:如果說有誰對WebRTC無所不知的話,那非Philipp莫屬。他在WebRTC以及瀏覽器行為分析方面有系統(tǒng)性的研究。每當他撰寫并發(fā)布博文,我最終都會收獲至少一項新知識。
- WebRTC周刊:沒錯。這是我和Kranky共同打理的一個博客。這個博客為您提供WebRTC的最新發(fā)展脈搏,所以關(guān)注它可以讓您更快地找到其他人撰寫的內(nèi)容,特別是那些讓我苦等很久才偶而發(fā)布一次內(nèi)容的人。
您不妨挑選幾個想要關(guān)注的博客進行訂閱。不必對它們發(fā)布的所有內(nèi)容都細細研讀,但一定要定期閱讀那些會讓您大開眼界、甚至會懷疑自己是否是合格開發(fā)人員的技術(shù)文章。我采取的就是這種方法,現(xiàn)在我已經(jīng)不再自視為開發(fā)人員。你很可能會不由自主地采取下一步驟:打開一個代碼編輯器,試著運行您所閱讀的文章中公布的代碼段。
2. 通過參加課程來學習WebRTC開發(fā)
閱讀有關(guān)WenRTC的內(nèi)容是確保您與時俱進的必要之舉,必須持之以恒,特別是考慮到WebRTC的發(fā)展日新月異,且目前還沒有穩(wěn)定的規(guī)范發(fā)布出來。要想真正地快速培養(yǎng)新技能,參加一些正式培訓是可取的做法。
網(wǎng)上已經(jīng)開設(shè)了幾門WebRTC培訓課程,都不難找到。我觀看過的那些課程重點講解WebRTC API方面,這也是著手學習WebRTC的良好切入點。不過難題在于,WebRTC仍未標準化,因此很多方面變化太快,導致此類內(nèi)容往往難以跟上最新發(fā)展的腳步。
在這些課程中,我猜有兩個地方可以讓您全面了解WebRTC:
- Google的WebRTC代碼實驗室:這是Google開設(shè)的一門基礎(chǔ)入門課程,介紹如何使用WebRTC。這門課程將為您講解WebRTC的基本概念,引導您完成簡單的首次概念驗證并快速獲得結(jié)果。
- WebRTC學院:WebRTC學院的WebRTC課程著重講解WebRTC API及其使用方式。對于急著直接使用WebRTC進行開發(fā)的人員,建議從這項資源著手學習。
- 高級WebRTC體系結(jié)構(gòu):這是我在本網(wǎng)站上開設(shè)的一門課程。在此課程中,我決定不以WebRTC API作為講解重點,直接跳過這方面的內(nèi)容;并嘗試更多地講解后端方面,讓學員具備全面的后端構(gòu)建能力,從而可以自行構(gòu)建產(chǎn)品體系結(jié)構(gòu)。
- Kranky Geek:對于視覺元素類型,我建議觀看由Kranky Geek整理的主題(我也是該團隊的一員)。您會觀看到就具體WebRTC開發(fā)主題提供的優(yōu)質(zhì)內(nèi)容。
除了WebRTC培訓之外,務必還要觀看一些其他的課程,例如Udemy、Codecademy或Pluralsight等網(wǎng)站上提供的全棧Web開發(fā)培訓或Node.js開發(fā)課程。
有沒有什么書可讀?
幾個月來我一直有個困擾揮之不去:已經(jīng)有一年多時間沒有關(guān)于WebRTC的新書出版了。
我記得上次有WebRTC新書出版還是2015年6月的事情。
現(xiàn)在,如果您仍然習慣于通過讀書來學習新知,可以查看WebRTC圖書一覽,時至今日它依然有效。
如果您的開發(fā)工作與Web瀏覽器有關(guān),不要忘了閱讀高性能瀏覽器網(wǎng)絡(特別是您打算使用WebRTC打造自己的信號系統(tǒng)時)。
3. 通過動手實踐來學習WebRTC開發(fā)
在實際項目中付諸實踐并撰寫心得有助于進一步鞏固閱讀和了解的內(nèi)容
閱讀有關(guān)WebRTC開發(fā)的內(nèi)容會讓您保持思維敏銳。學習WebRTC開發(fā)課程則有助于您培養(yǎng)新技能和透徹了解這項技術(shù)。但要想真正成長為一名開發(fā)人員,您需要找到機會有效運用學到的所有知識和技能。
如何才能有效地運用學到的知識和技能呢?我能想到的方式有四種:
- 開發(fā)個人項目——可以是博客、個人作品集、個人愛好網(wǎng)站等?梢赃x擇一些能夠讓您絞盡腦汁,在開發(fā)過程中需要不斷思索解決方案的個人項目。我想Muaz Khan在這方面是做得最好的。Brian Ho最近分享了關(guān)于在客戶端/服務器Web游戲中使用WebRTC的經(jīng)驗心得,我也非常喜歡。
- 為付費客戶開發(fā)產(chǎn)品——有太多的服務提供商都在尋找WebRTC開發(fā)能手,數(shù)量之多可能超乎您的想象。
- 撰寫文章談談自己學習的新技能并將它們發(fā)布在自己的博客上,最好提交到webrtcHacks。要想確保自己真正理解了某個主題,撰寫一篇關(guān)于該主題的教程可以說是最好的辦法。
- 成為WebRTC專業(yè)人士——掌握了必備知識并積累了一些經(jīng)驗后,您可能想要加入一家正在積極使用WebRTC開發(fā)產(chǎn)品的WebRTC外包公司。不妨聽聽Germán Goldenstein是如何說的——作為開發(fā)人員,能有他這樣的職業(yè)經(jīng)歷可以說十分難得。這篇文章也讓我想明白了自己為何如此喜歡開發(fā)工作和與開發(fā)人員協(xié)同合作。
今后還需要從哪些方面著手學習?
我們這個行業(yè)有一個悖論。
一方面,WebRTC極為簡單(可以對比一下在WebRTC問世前相同的開發(fā)項目需要的工作量)。但同時,懂得如何使用它的資深開發(fā)人員卻又不多。與一些正在尋求WebRTC人才的雇主聊聊,您就知道找到合適的人有多難。有時,他們在與懂得如何開發(fā)網(wǎng)站或移動應用但對WebRTC一無所知的外包供應商合作后,感到非常不滿意,所以多數(shù)雇主最終都選擇了在內(nèi)部培養(yǎng)WebRTC開發(fā)人員。
不過,如果您不滿足于從github中復制粘貼Hello World WebRTC概念的實現(xiàn)代碼,希望不僅僅將WebRTC當做一種愛好,而是要成為一名真正的WebRTC開發(fā)人員,您需要制定一份學習方案并嚴格按照方案學習。
方案中應包含三項核心的學習活動:閱讀資料、參加課程和動手實踐。只要能夠在這三個方面持之以恒,用不了多久您就會從業(yè)余愛好者搖身變成一名專業(yè)的WebRTC開發(fā)人員。
當然,你也可以直接使用Agora SDK,從編解碼到服務端的都涵蓋了。