首页>参考读物>计算机科学与技术>软件与程序设计

WebRTC音视频实时互动技术:原理、实战与源码分析
作者 : 李超 编著
丛书名 : Web开发技术丛书
出版日期 : 2021-07-09
ISBN : 978-7-111-68501-2
定价 : 89.00元
扩展资源下载
扩展信息
语种 : 简体中文
页数 : 286
开本 : 16
原书名 :
原出版社:
属性分类: 店面
包含CD : 无CD
绝版 : 未绝版
图书简介

本书分成四大部分:
? 第1部分为基础篇,主要介绍 WebRTC是干什么的,大体结构是怎样的。我们该如何下载源码,如何对源码进行编译以及 WebRTC 的目录结构是如何安排的,每个目录的主要作用是什么。

实际上,目前90% 的同学还不清楚WebRTC 的源码该如何下载,源码下载后该如何编译。之所以会有这个问题是因为 WebRTC 的代码量过于庞大,必须要命名用它自己的工具进行下载。而困难点在于国内不能直接访问 WebRTC 的源码地址,这就给很多学习者带来了特别大的困难。

另一方面, WebRTC 的编译工具也是自己写的,不是我们通常使用的编译工具。

因此,对于一个新手来说,可以几周甚至几个月都搞不定这件事儿。

? 第2部分为应用该,在这部分核心的目的是要向读者讲明白如何通过 WebRTC 实现 1对1 的通信。要实现一个 1:1 的实时通信系统,必然要涉及到很多知识。如 SDP协议,媒体协商过程,NAT穿越,信令通信等等相关的知识。因此,在这部分我以实现 WebRTC 1对1实时通信为目的,让读者讲解必要的知识,从而为后面知识的讲解打好基础。

? 第3部分是本书的核心内容,首先向读者讲解 WebRTC 的整体框架,让他们对 WebRTC 有个全局的认识,之后再逐步向他们介绍 WebRTC 如何采集音视频灵敏据,如何进行音视频的编解码,如何播放声音,如何渲染视频等相关的知识。

? 第4部分是提高篇,在这部分我会向读者讲解我们在使用 WebRTC 时经常要解决的一些问题。如 如何给 WebRTC 增加模块,即目录是的增加 x264 视频编解码模块,AAC音频编解码模块,在WebRTC中是如何将多路音频进行混音的, WebRTC是如何进行回音清除的等相关的内容。

图书特色

深入解析WebRTC开源音视频互动技术原理、架构,并通过开源代码剖析其工作流程和机理。
通过WebRTC互联互通实例详解帮助读者学习WebRTC应用开发方法。

图书前言

回想2020年,疫情的爆发使得世界经济陷入衰退,目前仍对我们的生活造成影响。
幸运的是我们生活在一个好时代,科技在这几十年中得到了迅猛发展。即使在疫情最严重的时刻,我们仍然可以通过音视频会议进行远程办公,通过在线教育系统进行学习,通过一些视频软件观看直播。
从某个角度看,这次疫情虽然导致很多行业处于崩溃边缘,但也迫使一些行业加速发展,其中音视频会议、在线教育的重要性马上体现了出来,新的沟通方式和教育方式被越来越多的人所认知、接纳。我们甚至可以推测,在线教育行业和音视频会议行业会在今年崛起,并在未来十年得到迅猛发展。音视频技术、传输技术(如5G)的飞速发展,以及因此激发出的人们对音视频的需求,也为音视频行业的发展提供了动力。
现在音视频技术已经非常成熟了,它被越来越广泛地应用于各行各业,如抖音、微信短视频、娱乐直播、教育直播、音视频会议等。就连热门的AI技术也与音视频技术关系密切,如智能音箱、自动驾驶、人脸识别等都离不开音视频技术。未来音视频技术会有更好的前景,对音视频人才的需求也必然会像当年移动互联网发展时一样出现井喷现象。面对这样的机遇,你若能掌握音视频的核心技术,一定可以在未来职场上获得丰厚的回报和满满的成就感。所以,目前是学习音视频的最佳时机,及早加入音视频研发的队伍,有助于你在未来的职场上更有作为。
说到音视频技术,就不得不说Google开源的WebRTC库了。WebRTC库如同音视频技术的一顶“王冠”,上面镶嵌了大大小小、各种各样的“宝石”,如降噪、回音消除、自动增益、NetEQ、网络拥塞控制······不胜枚举!目前国内无论是在线教育直播系统,还是音视频会议系统,其底层几乎无一例外都使用了WebRTC或从WebRTC中借鉴了不少有价值的模块和思想。不仅如此,如果现在你去应聘一线大厂的音视频研发岗,可以发现岗位描述中都写有“熟悉WebRTC技术者优先”之类的要求,WebRTC的重要性由此可见一斑。因此,了解和学习WebRTC更显得尤为重要。
自从2011年WebRTC推出之后,我就一直在追踪其进展。最近几年WebRTC的发展越来越快,服务质量也越来越好,现在对于大多数公司来说,完全不必像我们当年(2010年)那样从0开始自研音视频系统了。你可以在WebRTC的基础上构建系统,这样既省时又省力,质量又能得到保障。
但学习WebRTC也并非易事,需要你有良好的基础,如熟练掌握C++、熟悉音视频知识、了解网络传输等,这显然增加了学习WebRTC的成本。而我自从加入“跟谁学”团队后,不知怎的竟有了“好为人师”的冲动,一直在想是否可以对WebRTC做一个深入剖析,让更多的人知道WebRTC能做什么,该如何更好地利用WebRTC。这种想法一直萦绕心头,随着时间的推移反而愈加强烈,后来竟成了我必须完成的使命!
因此,自2018年开始,我制定了“WebRTC三部曲”的计划,即推出三门课,分别是“WebRTC入门与实战”“百万级高并发WebRTC流媒体服务器的实现”“WebRTC源码剖析”。这三门课的前两门我已经在慕课网推出,受到了广泛好评,而第三门则以图书的形式推出,本书也就与大家见面了。当然,WebRTC源码十分庞杂,想通过一本书将其讲清楚是不现实的,所以这本书的推出既是我制定的WebRTC三部曲计划的终点,也是后面深入分析WebRTC源码的起点,而我的终极目标是将WebRTC剖析透彻,让更多的人可以更好地利用WebRTC做出更优秀的产品。
本书分为三部分,共13章。其中第1~3章为第一部分,主要介绍WebRTC的由来,为什么要选择WebRTC,以及实时音视频通信的本质是什么。其中第3章最为关键,只有了解了音视频实时通信的本质,你才能知道音视频实时通信要解决什么问题,然后才能知道如何解决这些问题,从而理解WebRTC为什么要这样做。
第二部分包括第4~10章,这部分的内容比较多,我会循序渐进地向你讲解WebRTC的理论和实战。其中第4章介绍了一个最简单的WebRTC信令服务器该如何构建,第5章介绍了如何通过浏览器实现一对一通信,通过这两章你就可以搭建出一个WebRTC一对一实时通信系统了。第6章介绍了WebRTC底层是如何传输音视频数据的,重点是如何进行NAT穿越;第7章详述了WebRTC媒体协商使用的SDP各字段的含义。需要说明的是,SDP中的每个字段你都需要牢记在心,这样才能为后续阅读WebRTC代码扫清障碍。第8章介绍如何通过移动端(Android、iOS)Native的方式实现一对一通信,读完本章内容后,将能实现Web端与移动端的互联互通;第9章介绍了WebRTC底层的传输协议RTP/RTCP,这部分内容是每个从事实时通信工作的读者必须掌握的;第10章介绍了WebRTC的两种拥塞控制算法,详细介绍了WebRTC为什么最终选择Transport-CC作为默认拥塞控制算法。
第三部分包括第11~13章。其中第11章介绍了编译WebRTC源码库的方法,对于大多数刚入门的读者来说,学习WebRTC的第一道门槛便是如何编译WebRTC,通过对该章的学习,相信你一定可以顺利地将WebRTC库编译出来;第12章对WebRTC的peerconnect_client例子做了深入剖析,这个例子可以说是我们学习WebRTC源码的必经之路,这一章你一定要多花些时间将其全部掌握;第13章是对WebRTC源码的整体架构和运转流程的详细分析,也是本书最难的部分,将这章了解清楚后,你就知道WebRTC是如何运转的了。
我深深知道,一本书的完成并非一人之功,有身边无数亲人、朋友的支持和帮助,才能让这本书得以出版。这里首先要感谢我的家人,特别是我亲爱的妻子,正是她的支持和鼓励,才使我可以顺利地将这本书编写完成。除此之外,她还成了我的第一个读者,帮我纠正了很多语病。
感谢我的老领导、老朋友严石先生,他是WebEx创业“十君子”之一,是音视频实时通信方面的顶级专家。他在工作十分繁忙的情况下,仍然抽出了大量时间来阅读本书书稿,并指出了其中的不足,在此万分感谢!
感谢高泽华先生能在百忙之中抽出时间来阅读书稿,并为本书作序。能请到泽华为本书作序是我莫大的荣幸!
感谢刘岐先生为我指出书中的不足。我们是十多年的老朋友了,2005年我们因研究Linux内核而结缘,之后各自发展,没想到几年之后我们又都进入了音视频领域,这应该就是一种缘分吧!
感谢翟方庆先生为本书的编写提供各种帮助,特别是为图书的宣传做了很多工作。
感谢声网,声网不但是一家音视频SDK顶级服务商,也是一家特别有情怀的公司,每年举办的RTC大会都是音视频界的盛会,促进了RTC社区的发展和技术交流。
感谢每一位为本书出版默默付出的人,没有大家的帮助就不会有本书的诞生。
在编写本书时,我努力做到准确细致,但难免存在不妥之处,希望读者朋友能不吝指正,在此万分感谢!

上架指导

计算机\多媒体

封底文字

自1998年WebEx推出网络会议服务以来,音视频多点实时互动技术所支持的多人聊天、办公协同、在线教育、游戏直播等应用越来越被大众认可甚至依赖,前景非常广阔。李超的这本书通过讲解WebRTC的架构和源码,深入浅出、清晰全面地介绍了这个领域的前沿技术,让具有一定编程能力的人可以快速上手做出产品,是这方面非常难得的工具书。
                ——严石  WebEx创业员工之一, 原全时云平台VP 
李超是流媒体应用领域资深专家,他要出书,是件好事。一方面他多年来在媒体领域的实践和探索经验得以传播,惠及他人;另一方面,也能为业界技术和应用的推广提供助力。这本书值得希望钻研WebRTC的读者拥有。
                    ——包研  LiveVideoStack 创始人  
李超老师的这本书内容十分实用,原理清晰,实战性强,能够让初学者跟着节奏一步一步地轻松实现一套WebRTC实时互动系统,是一本值得多次阅读的好书。 
          ——刘歧 《FFmpeg从入门到精通》作者,FFmpeg官方代码维护者 
这本书结合作者的实际经验,从音视频通信的历史讲起,深入浅出地讲解了WebRTC通信的原理、特点及应用场景,更从源代码角度深入剖析了WebRTC通信的关键要素和细节,内容全面又不失深度,适合各水平的音视频从业人员阅读。
                    ——杜金房 《FreeSWITCH权威指南》作者  
实时互动RTC技术无疑是“全真互联网”时代的金钥匙,而WebRTC作为实时音视频技术领域广泛应用的标准,有着无数的拥趸。作为多年前的老同事,我非常高兴超哥能把这么多年在RTC方面的经验加以总结,将WebRTC的相关概念、架构、疑难解析、示例等结合起来,形成一本非常好看又实用的技术书籍。这本书既能帮助初学者熟悉RTC相关技术,掌握实时音视频领域的专业概念和最佳实践,也能助力在RTC领域耕耘多年的从业者进一步拓展技术领域,改进自己的系统,并进行不同场景的探索。希望大家阅读后有更多收获。
                       ——董海兵 Agora声网教育行业架构师

图书序言

2021年1月29日,WebRTC正式成为W3C和IETF标准。自2011年Google宣布WebRTC开源,已经十年了。记得2011年10月,我约了当时还在VisualOn的刘华平和华平科技的刘睿在上海讨论基于WebRTC创业计划。
WebRTC的前身是GIPS(GlobalIPSolutions)。GIPS最早全名叫作GlobalIPSound,是和SpritDSP一样的终端语音通信解决方案。很多运营商都使用了GIPS或SpritDSP的方案做3G的底层通话SDK。GIPS的突出特点是包括编解码、回声消除、降噪等3A算法。GIPS团队中也不乏大师,比如KenVos、BastiaanKleijn。KenVos(也是后来发明SILK的科学家)的iLBC和iSAC编码器(2000年后唯一基于FFT的语音编码器)都开创了编解码考虑网络丢包影响的先河。发明回声消除动态延时估计算法的BastiaanKleijn大师的论文一直被后来的工程师膜拜,它从根本上解决了延时估计的问题。GIPS后期开始做视频通信SDK方案,所以也把全名由GlobalIPSound改成了GlobalIPSolutions。但星光闪耀的GIPS在商业上不算成功,最后在2011年以不到7000万美元的价格卖给了Google。而同年5月,微软收购同样技术领先的Skype时花费了85亿美元。
如果把端到端通信互动技术分解一下,会发现其中有几个技术难点:客户端技术、服务器技术、全球设备网络适配技术和通信互动质量监控与展示技术。在被收购时,GIPS更像一个完整的客户端解决方案。所以后期Google的开发者在里面增加了P2P通信技术和一些简单的互联互通协议,以及基于Web展示的质量监控,使整个方案逐渐完整起来。
李超先生拥有十多年的实时音视频研发经验,曾带领团队研发过多个直播平台,先后任职沪江网高级架构师、新东方音视频技术专家。这本书从代码出发,详细介绍了如何使用WebRTC搭建一对一通信服务,并对内部的协议、拥塞控制技术和交互逻辑也做了详细的剖析,是一本难得的WebRTC开发书籍。
十年弹指一挥间,一本书囊括了李超先生多年的经验总结。很荣幸能为李超先生的作品作序。

声网 Agora 技术 VP & 合伙人,高泽华
2021 年 3 月 29 日

图书目录

第 1 章 音视频直播的前世今生 1
1.1 音视频的历史 1
1.2 移动互联网 3
1.3 音视频直播的两条技术路线 3
1.4 音视频直播的现状 5
1.5 音视频直播的未来 6
1.6 小结 7
第 2 章 为什么要使用 WebRTC 8
2.1 自研直播客户端架构 8
2.1.1 拆分音视频模块 9
2.1.2 跨平台 10
2.1.3 插件化管理 11
2.1.4 其他 13
2.2 WebRTC 客户端架构 14
2.3 小结 16
第 3 章 音视频实时通信的本质 17
3.1 两种指标 18
3.1.1 实时通信延迟指标 18
3.1.2 音视频服务质量指标 19
3.2 实时通信的主要矛盾 20
3.2.1 增加带宽 20
3.2.2 减少数据量 22
3.2.3 适当增加时延 24
3.2.4 提高网络质量 24
3.2.5 快速准确地评估带宽 25
3.3 小结 25
第 4 章 构建WebRTC一对一信令服务器 27
4.1 WebRTC 一对一架构 27
4.2 细化架构 28
4.3 信令 29
4.3.1 信令定义 29
4.3.2 信令时序 30
4.3.3 信令传输协议的选择 31
4.4 构建信令服务器 31
4.4.1 信令服务器的实现方案 32
4.4.2 信令服务器的业务逻辑 32
4.4.3 信令服务器的实现 33
4.4.4 信令服务器的安装与部署 35
4.4.5 信令服务器的完整代码 37
4.5 小结 40
第 5 章 WebRTC 实现一对一通信 41
5.1 浏览器对 WebRTC 的支持 41
5.2 遍历音视频设备 42
5.3 采集音视频数据 44
5.4 MediaStream 与 MediaStreamTrack 47
5.5 本地视频预览 47
5.6 信令状态机 49
5.7 RTCPeerConnection 52
5.7.1 创建 RTCPeerConnection 对象 52
5.7.2 RTCPeerConnection 与本地 音视频数据绑定 53
5.7.3 媒体协商 54
5.7.4 ICE 55
5.7.5 SDP 与 Candidate 消息的 交换 57
5.7.6 远端音视频渲染 58
5.7.7 客户端完整例子 59
5.8 小结 82
第 6 章 WebRTC 中的 ICE 实现 83
6.1 Candidate 种类与优先级 83
6.2 ICE 策略 85
6.3 P2P 连接 87
6.3.1 完全锥型 NAT 89
6.3.2 IP 限制锥型 NAT 90
6.3.3 端口限制锥型 NAT 91
6.3.4 对称型 NAT 92
6.3.5 NAT 类型检测 93
6.3.6 如何进行 NAT 穿越 97
6.4 网络中继 101
6.4.1 TURN 协议中转数据 101
6.4.2 WebRTC 使用 TURN 协议 102
6.4.3 STUN/TURN 服务器的 安装与部署 103
6.5 小结 105
第 7 章 WebRTC 中的 SDP 106
7.1 SDP 标准规范 106
7.2 WebRTC 中 SDP 的整体 结构 108
7.3 媒体信息 110
7.3.1 音频媒体信息 111
7.3.2 视频媒体信息 112
7.3.3 SSRC 与 CNAME 114
7.4 PlanB 与 UnifiedPlan 115
7.5 WebRTC 如何保证数据 安全 117
7.6 RTP 扩展头 119
7.7 服务质量 120
7.8 SDP 详解 122
7.9 ORTC 131
7.10 小结 131
第 8 章 各端的互联互通 132
8.1 WebRTC Native 的核心 132
8.2 Android 端的实现 134
8.2.1 申请权限 134
8.2.2 引入 WebRTC 库 136
8.2.3 构造 PeerConnection- Factory 138
8.2.4 创建音视频源 138
8.2.5 视频采集 139
8.2.6 视频渲染 142
8.2.7 创建 PeerConnection 144
8.2.8 建立信令系统 146
8.3 iOS 端的实现 146
8.3.1 申请权限 146
8.3.2 引入 WebRTC 库 147
8.3.3 构造 RTCPeerConnection- Factory 148
8.3.4 创建音视频源 149
8.3.5 视频采集 150
8.3.6 本地视频预览 151
8.3.7 建立信令系统 153
8.3.8 创建 RTCPeer- Connection 155
8.3.9 远端视频渲染 158
8.4 PC 端与 Mac 端的实现 159
8.5 小结 159
第 9 章 网络传输协议 RTP 与 RTCP 160
9.1 如何选择 UDP 与 TCP 160
9.2 RTP 162
9.2.1 RTP 协议头 163
9.2.2 RTP 的使用 165
9.2.3 RTP 扩展头 167
9.2.4 RTP 中的填充数据 170
9.3 RTCP 171
9.3.1 RTCP 报文分类 171
9.3.2 RTCP 协议头 172
9.3.3 WebRTC 的反馈报文 173
9.4 小结 174
第 10 章 WebRTC 拥塞控制 175
10.1 WebRTC 的拥塞控制算法 175
10.1.1 Goog-REMB 176
10.1.2 Transport-CC 181
10.1.3 基于丢包的拥塞评估算法 原理 184
10.1.4 WebRTC 拥塞控制 流程 184
10.2 拥塞控制算法比较 185
10.2.1 拥塞控制的准确性 186
10.2.2 与 TCP 连接并存时的公 平性 187
10.2.3 同种类型连接的公 平性 188
10.2.4 拥塞控制算法在丢包 情况下的表现 189
10.3 小结 191
第 11 章 WebRTC 源码分析入门 192
11.1 WebRTC 源码的选择 193
11.2 WebRTC 开发环境的搭建 193
11.2.1 配置软硬件环境 194
11.2.2 安装依赖工具包 195
11.2.3 获取并编译 WebRTC 代码 195
11.3 国内 WebRTC 镜像 196
11.4 WebRTC 目录结构 197
11.4.1 WebRTC 主目录 197
11.4.2 modules 目录 198
11.5 小结 200
第 12 章 分析 WebRTC 源码的必经 之路 201
12.1 信令服务器实现分析 201
12.1.1 信令服务器的组成 202
12.1.2 信令服务器的工作流程 203
12.2 PeerConnection 客户端分析 206
12.2.1 运行 peerconnection_ client 206
12.2.2 peerconnection_client 的组成 207
12.2.3 界面的展示 213
12.2.4 视频的渲染 218
12.2.5 WebRTC 的使用 220
12.2.6 信令的处理 225
12.3 小结 229
第 13 章 WebRTC 源码分析 231
13.1 WebRTC 的数据流 231
13.2 WebRTC 线程模型 234
13.2.1 WebRTC 线程的创建与使用 234
13.2.2 线程切换 236
13.3 网络传输 250
13.3.1 网络接收与分发模块类关系图 250
13.3.2 网络连接的建立 251
13.4 音视频数据采集 256
13.4.1 音频采集与播放 256
13.4.2 视频采集与渲染 258
13.5 音视频编解码 261
13.5.1 音频编码 261
13.5.2 音频解码 265
13.5.3 视频编码 267
13.5.4 视频解码 270
13.6 小结 272

教学资源推荐
作者: [意]阿尔贝托·博斯凯蒂(Alberto Boschetti) 卢卡·马萨罗(Luca Massaron) 著
作者: (美)Barry Wilkinson, Michael Allen
作者: 郑阿奇 梁敬东
作者: [美]奥弗·曼德勒维奇(Ofer Mendelevitch) 凯西·斯特拉(Casey Stella) 著 道格拉斯·伊德理恩(Douglas Eadline)
参考读物推荐
作者: [美] 约瑟夫·阿坝哈瑞(Joseph Albahari) 埃里克·约翰森(Eric Johannsen)著
作者: [英] 本杰明·J.埃文斯(Benjamin J.Evans) [美]大卫·弗拉纳根(David Flanagan)著