
WebRTC开发人员可以说形形色色,但论起出身渊源,通常无外乎以下两类:
- 10年前做过VoIP开发人员(这可能意味着他们配置过Asterisk安装实例、编写过自己的RTP堆栈,诸如此类)
- 本身即是Web开发人员(具体从事的往往是在付费主题的基础上实现WordPress网站,但也可能是构建像Facebook之类的全球各种社交网站所使用的后端)
而难题在于,WebRTC介乎于VoIP和Web这两种全然不同的领域之间。

我本人又属于哪一类呢?其实也是VoIP开人员出身。我为一款ASN.1 PER编/解码器编写过自己的无递归实现代码,采用的是在静态内存中运行的方式。还在多种不同的操作系统上线性扩展过UDP/TCP套接字实现代码。也使用C代码进行过多线程处理。更从事过如今的大多数开发人员甚至都无法理解的一些底层工作。虽然这些都是不错的起点,但对于过渡到WebRTC并没有起到实质性的帮助作用。
关键并不在于WebRTC本身,而在于了解在开发VoIP产品时与开发互联网Web应用程序时所用到的不同思维模式和方法。此外,还需能够学习新技术和新的思考方式。
本篇博文并非要引领你完成整个学习历程,但对你制定学习方案会有助益。在本文中,我们将一起探讨现在可以从哪三个方面着手来从VoIP或Web开发人员摇身变成资深的WebRTC开发人员。
哪些是你不懂的?
首先要着手做的事情就是弄清楚你需要学习什么。一些人可能认为,要成为WebRTC开发人员,只需要懂HTML、CSS和些许JavaScript。再从github上找到一个采用WebRTC的项目,安装到自己的服务器上运行即可。这样就大功告成了!
这自然是一个不错的着手点,但采用WebRTC进行开发并非只是学点儿JavaScript那么简单。也不是学会Node.js就行的。
要想让自己真正称得上一名WebRTC开发人员,你需要从以下诸多方面着手学习:
- WebRTC API:要成为WebRTC开发人员,显而易见需达到这项要求
- 前端开发:HTML、CSS和JavaScript
- 后端开发:Node.js或其他某种现代异步开发平台
- 网络:TCP、UDP、HTTP、WebSocket以及介乎于这些概念之间的任何概念
- 编码解码器和媒体处理:如何设计和实现代码、采用哪些算法和技术通过SRTP将媒体经由网络发送出去。如果懂Simulcast和SVC,那就更好了。
- 服务器端媒体处理:需要了解可用来支持组呼、实况直播和录制等功能的不同技术
- 故障排查和监控工具:至少要学会如何阅读webrtc-internals转储文件并了解ICE故障
- 常用框架:了解现有的流行框架以及这些框架适用的情况。例如,对Jitsi、Kurento和Janus有一定的了解也是有益无害的
掌握了上述技能和知识,你就能够开发几乎所有的实时通信产品。如此多的主题看起来可能令人望而生畏,不过我在下文中分享了一些资源,让您可以相对较快地了解上述每个主题。此外需要说明的是,这些主题你不必样样精通,但作为一名WebRTC开发人员,您必须对其中的每一个主题都有基本的了解。当然,我自知我对上述主题也并非门门精通……
至此你已经知道了自己需要懂哪些方面,接下来我们就看看可以通过哪三种首选方式来学习所需的知识和技能。

1. 通过阅读资料来学习WebRTC开发
无论是哪个主题,要想增长知识,其中一个最佳的方式就是阅读和紧密关注业界专家撰写的博文和教程。在这方面WebRTC也不例外。
虽然WebRTC博客数量不多,但你依然需要在这方面多加关注,充分发掘有限博文中的价值。挑选几个优质博客进行关注即可。我之所以尽量订阅所有博客,主要是因为我的职业要求我尽可能充分了解WebRTC市场,而且我还需要打理WebRTC周刊博客。总结起来,对于WebRTC开发方面的核心内容,我密切关注且必读必懂的就只有以下三个主要博客:
- webrtcHacks:一言蔽之,提供了有关WebRTC的优质内容供开发人员参考……
- Mozilla的“推进WebRTC”:Mozilla最近开设了一个专门讲解WebRTC的新博客。博客内容质量一流,所含的信息也很实用。具体涵盖了与WebRTC相关的一些小问题,并提供了一些非常实用的代码段
- Philipp Hancke:如果说有谁对WebRTC无所不知的话,那非Philipp莫属。他在WebRTC以及浏览器行为分析方面有系统性的研究。每当他撰写并发布博文,我最终都会收获至少一项新知识。
- WebRTC周刊:没错。这是我和Kranky共同打理的一个博客。这个博客为您提供WebRTC的最新发展脉搏,所以关注它可以让您更快地找到其他人撰写的内容,特别是那些让我苦等很久才偶而发布一次内容的人。
您不妨挑选几个想要关注的博客进行订阅。不必对它们发布的所有内容都细细研读,但一定要定期阅读那些会让您大开眼界、甚至会怀疑自己是否是合格开发人员的技术文章。我采取的就是这种方法,现在我已经不再自视为开发人员。你很可能会不由自主地采取下一步骤:打开一个代码编辑器,试着运行您所阅读的文章中公布的代码段。
2. 通过参加课程来学习WebRTC开发
阅读有关WenRTC的内容是确保您与时俱进的必要之举,必须持之以恒,特别是考虑到WebRTC的发展日新月异,且目前还没有稳定的规范发布出来。要想真正地快速培养新技能,参加一些正式培训是可取的做法。
网上已经开设了几门WebRTC培训课程,都不难找到。我观看过的那些课程重点讲解WebRTC API方面,这也是着手学习WebRTC的良好切入点。不过难题在于,WebRTC仍未标准化,因此很多方面变化太快,导致此类内容往往难以跟上最新发展的脚步。
在这些课程中,我猜有两个地方可以让您全面了解WebRTC:
- Google的WebRTC代码实验室:这是Google开设的一门基础入门课程,介绍如何使用WebRTC。这门课程将为您讲解WebRTC的基本概念,引导您完成简单的首次概念验证并快速获得结果。
- WebRTC学院:WebRTC学院的WebRTC课程着重讲解WebRTC API及其使用方式。对于急着直接使用WebRTC进行开发的人员,建议从这项资源着手学习。
- 高级WebRTC体系结构:这是我在本网站上开设的一门课程。在此课程中,我决定不以WebRTC API作为讲解重点,直接跳过这方面的内容;并尝试更多地讲解后端方面,让学员具备全面的后端构建能力,从而可以自行构建产品体系结构。
- Kranky Geek:对于视觉元素类型,我建议观看由Kranky Geek整理的主题(我也是该团队的一员)。您会观看到就具体WebRTC开发主题提供的优质内容。
除了WebRTC培训之外,务必还要观看一些其他的课程,例如Udemy、Codecademy或Pluralsight等网站上提供的全栈Web开发培训或Node.js开发课程。

有没有什么书可读?
几个月来我一直有个困扰挥之不去:已经有一年多时间没有关于WebRTC的新书出版了。
我记得上次有WebRTC新书出版还是2015年6月的事情。
现在,如果您仍然习惯于通过读书来学习新知,可以查看WebRTC图书一览,时至今日它依然有效。
如果您的开发工作与Web浏览器有关,不要忘了阅读高性能浏览器网络(特别是您打算使用WebRTC打造自己的信号系统时)。
3. 通过动手实践来学习WebRTC开发
在实际项目中付诸实践并撰写心得有助于进一步巩固阅读和了解的内容
阅读有关WebRTC开发的内容会让您保持思维敏锐。学习WebRTC开发课程则有助于您培养新技能和透彻了解这项技术。但要想真正成长为一名开发人员,您需要找到机会有效运用学到的所有知识和技能。
如何才能有效地运用学到的知识和技能呢?我能想到的方式有四种:
- 开发个人项目——可以是博客、个人作品集、个人爱好网站等。可以选择一些能够让您绞尽脑汁,在开发过程中需要不断思索解决方案的个人项目。我想Muaz Khan在这方面是做得最好的。Brian Ho最近分享了关于在客户端/服务器Web游戏中使用WebRTC的经验心得,我也非常喜欢。
- 为付费客户开发产品——有太多的服务提供商都在寻找WebRTC开发能手,数量之多可能超乎您的想象。
- 撰写文章谈谈自己学习的新技能并将它们发布在自己的博客上,最好提交到webrtcHacks。要想确保自己真正理解了某个主题,撰写一篇关于该主题的教程可以说是最好的办法。
- 成为WebRTC专业人士——掌握了必备知识并积累了一些经验后,您可能想要加入一家正在积极使用WebRTC开发产品的WebRTC外包公司。不妨听听Germán Goldenstein是如何说的——作为开发人员,能有他这样的职业经历可以说十分难得。这篇文章也让我想明白了自己为何如此喜欢开发工作和与开发人员协同合作。
今后还需要从哪些方面着手学习?
我们这个行业有一个悖论。
一方面,WebRTC极为简单(可以对比一下在WebRTC问世前相同的开发项目需要的工作量)。但同时,懂得如何使用它的资深开发人员却又不多。与一些正在寻求WebRTC人才的雇主聊聊,您就知道找到合适的人有多难。有时,他们在与懂得如何开发网站或移动应用但对WebRTC一无所知的外包供应商合作后,感到非常不满意,所以多数雇主最终都选择了在内部培养WebRTC开发人员。
不过,如果您不满足于从github中复制粘贴Hello World WebRTC概念的实现代码,希望不仅仅将WebRTC当做一种爱好,而是要成为一名真正的WebRTC开发人员,您需要制定一份学习方案并严格按照方案学习。
方案中应包含三项核心的学习活动:阅读资料、参加课程和动手实践。只要能够在这三个方面持之以恒,用不了多久您就会从业余爱好者摇身变成一名专业的WebRTC开发人员。
当然,你也可以直接使用Agora SDK,从编解码到服务端的都涵盖了。