前言
WebRTC是一个支持在网页浏览器中进行实时语音对话或视频对话的解决方案。它于2011年6月1日开源并在Google、Mozilla、Opera的支持下被纳入万维网联盟的W3C推荐标准。
笔者近10年来一直从事远程教育系统的开发工作,擅长电子白板、文字聊天、用户列表、一对一/一对多/多对多视频通话、共享桌面、音视频会控、文档共享、文档转换、同步播放点播视频、流媒体转发、媒体录制、流媒体集群等相关技术。最初实现此产品前端使用Flash,流媒体使用FMS(Flash Media Server)方案,这些技术在Web端可以满足需求,但到了移动端就表现得不理想了,主要是性能不佳。另外,Flash使用的协议是RTMP,在互动方面,延迟及回声问题很难解决。Flash支持的另外一个协议RTMFP由于使用不广泛,最终没有采用。不过总体来说,Flash在PC-Web端的表现还是不错的。
在WebRTC出现之前,Flash RTMP是在网页端进行RTC的主要选择。但是老旧平台的使用情况已经出现了衰退,并且安全问题也愈发严重。随着HTML5的发展,Flash Player已经系统地从浏览器中慢慢移出了,Chrome和Firefox已经要求用户提供额外的使用Flash的确认信息,目前Chrome会在后台中阻止Flash的加载。
笔者目前开发远程教育、视频会议、视频会诊等项目时使用的是WebRTC技术。笔者还参与了WebRTC音视频的开源PION/ION项目,以及Flutter+React+Go+WebRTC的视频会议项目。作为项目的主要维护者,希望对WebRTC技术的发展起到推动作用。另外,笔者参与的Flutter-WebRTC客户端插件项目,也为WebRTC技术在客户端提供了一个跨全平台的解决方案,这里感谢好友段维伟工程师对此领域做出的突出贡献。
写作本书的目的是想分享WebRTC知识(因为WebRTC确实优秀),想在为WebRTC社区做点贡献的同时也为我们的产品打下坚实的技术基础。在写作本书的过程中,笔者查阅了大量的资料,使得知识体系扩大了不少,收获良多。
本书主要内容
本书采用由浅入深的方式介绍WebRTC音视频开发技术,分为三篇,共15章,主要内容如下。
·第一篇,基本概念(第1~2章),包括WebRTC技术发展历史,分析WebRTC整体架构及其核心API,分析WebRTC通话原理,介绍媒体协商、网络协商等基本概念,介绍NAT、SDP、ICE、STUN以及TURN协议。
·第二篇,基础应用(第3~11章),包括访问设备、音视频设置、媒体流与轨道、媒体录制、连接建立过程以及数据通道等应用方法。通过学习本篇内容,读者可以熟练掌握WebRTC的常用接口。
·第三篇,综合案例(第12~15章),主要通过一个一对一的视频通话案例将前面所学知识串起来。客户端实现了画面渲染、声音控制、视频控制、大小视频展示等功能,服务器端实现了信令处理服务器以及中转数据服务器。
阅读建议
本书是一本基础入门加实战的书籍,既有基础知识,又有丰富的示例,包括详细的操作步骤,实操性强。由于WebRTC涉及的概念众多且不易理解,所以本书采用理论介绍加小案例实战的方式,这样会增强读者信心,在轻松掌握基础理论的同时掌握其用法。
本书提供了前后端整体解决方案。PC-Web端使用的是React技术,后端使用的是Golang技术,移动端使用的是Flutter技术。建议读者补充一下这方面的基础知识。
对于WebRTC基础部分,建议首先把书中涉及的小例子一个一个运行起来,在熟悉了API后再查看官方文档加深印象。对于一对一视频通话案例,建议首先理解其总体架构,然后运行案例查看效果,然后再分别看各个端的实现过程。
关于随书代码和视频课程
本书所列代码力求完整,但由于篇幅所限,代码没有全放在书里。完整代码可参见以下网址:
·https://github.com/kangshaojun
配套视频课程网址如下:
致谢
首先感谢机械工业出版社华章公司吴怡编辑的耐心指点,她推动了本书的出版。
感谢朋友段维伟工程师,网名“鱼老大”,国内骨灰级WebRTC开发者,PION/ION项目联合发起人。在这里感谢鱼老大的技术分享及帮助。
感谢朋友王朋闯工程师,他是PION/ION项目的发起人,在这里感谢他提供关于流媒体技术以及Golang相关技术的帮助。
最后还要感谢我的家人。感谢我的母亲和妻子,她们在我写作过程中承担了全部家务并照顾孩子,使我可以全身心地投入写作。
亢少军
2020年8月1日