前言
为什么要写这本书
最早接触WebRTC技术是在2015年,那时需要在直播产品中增加实时连麦的功能,经过对几种技术进行对比,最终我选择了WebRTC。当时WebRTC技术还不够成熟,相关资料非常少,在产品中使用WebRTC技术的难度非常大,往往为了弄清楚某个概念、某个API的用法,需要查阅大量的英文资料,而且遇到问题解决起来非常棘手。
从最初的原生WebRTC,到多点控制单元(MCU),再到各种选择性转发单元(SFU),我在使用WebRTC的过程中一直不断学习新的知识,不断解决新的问题,同时也逐步加深了对WebRTC技术的理解和认识。
因为踩过许多坑,所以我深刻体会到了WebRTC技术的难度和广度。WebRTC技术包含了音视频编解码技术、传输技术、流媒体服务器技术等,涵盖了音视频处理和传输的方方面面。这些技术中任意一个都能成为独立的课题,都值得花大量时间深入研究。除此之外,理解WebRTC相关API,还必须掌握现代Web技术,尤其是ES6、Promise等语法知识。可见,学习WebRTC技术需要掌握大量的预备知识,这对于初学者来说有一定的门槛。
非常遗憾的是,时至今日仍没有一本中文书能够系统地涵盖WebRTC的技术内容,剥离层层技术面纱将WebRTC呈现给国内技术人员。
在实时通信产品大爆发的时期,为什么WebRTC的中文技术资料如此之少?我想可能有以下几个原因。
- WebRTC技术规范都是英文文档,缺少使用示例,故而读起来晦涩难懂,加大了WebRTC的学习难度。
- WebRTC技术较新,专业性较强,能真正理解并掌握其精髓的技术人员较少。
- 国内技术人员工作压力大,资深WebRTC技术人员忙于项目,没有时间总结经验并分享。
- WebRTC技术覆盖面广,难以讲深、讲透,针对某个技术点的分享容易实现,但要系统讲解技术内幕则非常难。
撰写一本能够降低国内技术人员使用WebRTC的门槛,能够帮助研发人员更好地将WebRTC技术应用到产品中的书,是我编写本书的出发点。
作为一名较早使用WebRTC的技术人员,我一直关注WebRTC技术的发展,在日常使用过程中积累了大量学习笔记和经验,这些都为撰写本书提供了素材。
本书对WebRTC 1.0规范的内容进行了系统整理,以一种易于理解的形式呈现给读者。书中还给出了我的“踩坑”经验和一些实用的案例,帮助读者全面认识WebRTC。
WebRTC降低了实时通信技术的门槛,使得之前只有互联网巨头才能掌握的实时通信技术得以普及,使得我们能够在家远程办公,孩子们能够“停课不停学”。相信在5G普及之后,WebRTC还会迎来更加蓬勃的发展。
可以预见,未来将有更多技术人员学习并应用WebRTC,希望本书能够帮助大家轻松踏入WebRTC的技术殿堂!
读者对象
实时通信产品的售前、售后、研发人员,音视频行业的架构师、CTO等。
本书特色
- 全面涵盖WebRTC 1.0规范。
- 详细讲解WebRTC底层技术。
- 结合示例演示WebRTC API的使用。
- 从零起步实现高效、实时的信令系统。
- 使用WebRTC技术从0到1打造开源视频会议系统。
如何阅读本书
本书对WebRTC技术进行了全面的介绍,涵盖WebRTC 1.0规范全部API、WebRTC底层技术、WebRTC在移动端和服务器端的应用等内容,并提供了具体的示例,力求做到理论结合实践。本书最后使用这些WebRTC知识打造了一个真实的视频会议系统,同时对高并发、易扩展的视频会议架构进行了详细讲解。
本书分为10章。
第1章介绍WebRTC的历史、技术架构、兼容性等内容。
第2章介绍使用WebRTC API获取本地摄像头、话筒、桌面等媒体流的方法,以及媒体流的录制、使用canvas操作媒体流的方法和示例。
第3章介绍WebRTC底层使用的传输技术,如SDP、ICE、STUN/TURN等。
第4章介绍使用RTCPeerConnection管理WebRTC连接的方法。
第5章介绍WebRTC的媒体管理方法,结合示例演示切换编码格式、控制视频码率、替换视频背景的方法。
第6章结合示例介绍一种高效、实时的信令系统实现方法,并实现一个可以在生产环境中使用的信令系统。
第7章介绍使用WebRTC数据通道传输任意数据的方法,结合示例演示基于P2P的文字聊天以及文件传输功能的实现。
第8章介绍使用WebRTC获取媒体流相关统计数据的方法,结合示例演示如何使用Chart.js绘图展示实时码率。
第9章介绍在Android、iOS开发环境中使用WebRTC的方法,并实现基于WebRTC的视频聊天App。
第10章结合我的开源项目WiLearning介绍从0到1打造视频会议系统的方法。
本书提供的示例代码以及开源项目WiLearning可以在GitHub上免费获取,地址为https://github.com/wistingcn。
致谢
感谢我的家人,他们给我提供了最大的支持。在写书期间,我每天早出晚归,没有一个完整的周末,我的爱人承担起了所有的家务。还有我两个可爱的小天使,每天晚上回到家里,她们都会跑过来喊着:“欢迎爸爸回来!”这是我一天中最开心的时刻,所有的疲劳和烦恼都一扫而光。
感谢开源社区贡献了WebRTC这样一个优秀的实时音视频框架。正是出于回馈开源社区的愿景,我才投入了大量的精力开发WiLearning。
感谢机械工业出版社的杨福川和各位编辑为我写书提供了指导,并不辞劳苦地修订、校稿。
谨以此书献给我最亲爱的家人以及众多热爱WebRTC技术的朋友们!