描述
开 本: 16开纸 张: 胶版纸包 装: 平装-胶订是否套装: 否国际标准书号ISBN: 9787111685012丛书名: Web开发技术丛书
★本书是一本WebRTC从入门到进阶的书籍,不仅对WebRTC的网络传输做了细致、大量的分析,而且还向你详细介绍了如何通过WebRTC实现Web端与Android和iOS端的互联互通;后还对WebRTC的源码进行了剖析,使你不但可以知道如何使用WebRTC实现音视频通信,还能让你了解其中的原理,并知道WebRTC具体是如何做的。
★内容详实、深入浅出、案例丰富,是音视频应用开发工程师的参考资料,也可供相关专业的在校学生和入门者学习参考。 得到业内多个行业专家联袂推荐。
★关注“华章计算机”,回复“68501”获取本书配套代码地址及后续例程的更新、通过RTC开发者社区本书专栏地址与作者互动交流。
★本书深入浅出地对WebRTC技术进行了系统讲解,既有原理又有实战,从WebRTC是如何实现实时音视频通信的,到如何应用WebRTC库实现音视频通信,再到WebRTC源码的剖析,逐步展开讲解。此外,对WebRTC的传输系统进行了重点分析,相信读者通过本书可以一窥WebRTC传输的奥秘。
第1~3章介绍音视频实时通信的由来,WebRTC做了什么,以及它要解决什么问题;
第4~10章是实战部分,介绍如何使用WebRTC库实现音视频通信,并对其实现原理进行讲解;
第11~13章对WebRTC源码进行分析,让读者对WebRTC有更深层次的认知。
想了解WebRTC实现的专业开发人员可以通过本书了解WebRTC运转机理;
学生、老师和音视频爱好者可以通过本书了解WebRTC可以做什么,如何通过WebRTC实现音视频的实时通信。
●第1章 音视频直播的前世今生1
1.1音视频的历史1
1.2移动互联网3
1.3音视频直播的两条技术路线3
1.4音视频直播的现状5
1.5音视频直播的未来6
1.6小结7
●第2章 为什么要使用WebRTC8
2.1自研直播客户端架构8
2.1.1拆分音视频模块9
2.1.2跨平台10
2.1.3插件化管理11
2.1.4其他13
2.2WebRTC客户端架构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.1WebRTC一对一架构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.4MediaStream与MediaStreamTrack47
5.5本地视频预览47
5.6信令状态机49
5.7RTCPeerConnection52
5.7.1创建RTCPeerConnection对象52
5.7.2RTCPeerConnection与本地音视频数据绑定53
5.7.3媒体协商54
5.7.4ICE55
5.7.5SDP与Candidate消息的交换57
5.7.6远端音视频渲染58
5.7.7客户端完整例子59
5.8小结82
●第6章 WebRTC中的ICE实现83
6.1Candidate种类与优先级83
6.2ICE策略85
6.3P2P连接87
6.3.1完全锥型NAT89
6.3.2IP限制锥型NAT90
6.3.3端口限制锥型NAT91
6.3.4对称型NAT92
6.3.5NAT类型检测93
6.3.6如何进行NAT穿越97
6.4网络中继101
6.4.1TURN协议中转数据101
6.4.2WebRTC使用TURN协议102
6.4.3STUN/TURN服务器的安装与部署103
6.5小结105
●第7章 WebRTC中的SDP106
7.1SDP标准规范106
7.2WebRTC中SDP的整体结构108
7.3媒体信息110
7.3.1音频媒体信息111
7.3.2视频媒体信息112
7.3.3SSRC与CNAME114
7.4PlanB与UnifiedPlan115
7.5WebRTC如何保证数据安全117
7.6RTP扩展头119
7.7服务质量120
7.8SDP详解122
7.9ORTC131
7.10小结131
●第8章 各端的互联互通132
8.1WebRTCNative的核心132
8.2Android端的实现134
8.2.1申请权限134
8.2.2引入WebRTC库136
8.2.3构造PeerConnection-Factory138
8.2.4创建音视频源138
8.2.5视频采集139
8.2.6视频渲染142
8.2.7创建PeerConnection144
8.2.8建立信令系统146
8.3iOS端的实现146
8.3.1申请权限146
8.3.2引入WebRTC库147
8.3.3构造RTCPeerConnection-Factory148
8.3.4创建音视频源149
8.3.5视频采集150
8.3.6本地视频预览151
8.3.7建立信令系统153
8.3.8创建RTCPeer-Connection155
8.3.9远端视频渲染158
8.4PC端与Mac端的实现159
8.5小结159
●第9章 网络传输协议RTP与RTCP160
9.1如何选择UDP与TCP160
9.2RTP162
9.2.1RTP协议头163
9.2.2RTP的使用165
9.2.3RTP扩展头167
9.2.4RTP中的填充数据170
9.3RTCP171
9.3.1RTCP报文分类171
9.3.2RTCP协议头172
9.3.3WebRTC的反馈报文173
9.4小结174
●第10章 WebRTC拥塞控制175
10.1WebRTC的拥塞控制算法175
10.1.1Goog-REMB176
10.1.2Transport-CC181
10.1.3基于丢包的拥塞评估算法原理184
10.1.4WebRTC拥塞控制流程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.1WebRTC源码的选择193
11.2WebRTC开发环境的搭建193
11.2.1配置软硬件环境194
11.2.2安装依赖工具包195
11.2.3获取并编译WebRTC代码195
11.3国内WebRTC镜像196
11.4WebRTC目录结构197
11.4.1WebRTC主目录197
11.4.2modules目录198
11.5小结200
●第12章 分析WebRTC源码的必经之路201
12.1信令服务器实现分析201
12.1.1信令服务器的组成202
12.1.2信令服务器的工作流程203
12.2PeerConnection客户端分析206
12.2.1运行peerconnection_client206
12.2.2peerconnection_client的组成207
12.2.3界面的展示213
12.2.4视频的渲染218
12.2.5WebRTC的使用220
12.2.6信令的处理225
12.3小结229
●第13章 WebRTC源码分析231
13.1WebRTC的数据流231
13.2WebRTC线程模型234
13.2.1WebRTC线程的创建与使用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
【前言】
回想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是如何运转的了。
【推荐序】
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 & 合伙人,高泽华
★1998年WebEx推出网络会议服务以来,音视频多点实时互动技术所支持的多人聊天、办公协同、在线教育、游戏直播等应用越来越被大众认可甚至依赖,前景非常广阔。李超的这本书通过讲解WebRTC的架构和源码,深入浅出、清晰全面地介绍了这个领域的前沿技术,让具有一定编程能力的人可以快速上手做出产品,是这方面非常难得的工具书。
——严石 WebEx创业员工之一, 原全时云平台VP
★李超是流媒体应用领域资深专家,他要出书,是件好事。一方面他多年来在媒体领域的实践和探索经验得以传播,惠及他人;另一方面,也能为业界技术和应用的推广提供助力。这本书值得希望钻研WebRTC的读者拥有。
——包研 LiveVideoStack 创始人
★李超老师的这本书内容十分实用,原理清晰,实战性强,能够让初学者跟着节奏一步一步地轻松实现一套WebRTC实时互动系统,是一本值得多次阅读的好书。
——刘歧 《FFmpeg从入门到精通》作者,FFmpeg官方代码维护者
★这本书结合作者的实际经验,从音视频通信的历史讲起,深入浅出地讲解了WebRTC通信的原理、特点及应用场景,更从源代码角度深入剖析了WebRTC通信的关键要素和细节,内容全面又不失深度,适合各水平的音视频从业人员阅读。
——杜金房 《FreeSWITCH权威指南》作者
★实时互动RTC技术无疑是“全真互联网”时代的金钥匙,而WebRTC作为实时音视频技术领域广泛应用的标准,有着无数的拥趸。作为多年前的老同事,我非常高兴超哥能把这么多年在RTC方面的经验加以总结,将WebRTC的相关概念、架构、疑难解析、示例等结合起来,形成一本非常好看又实用的技术书籍。这本书既能帮助初学者熟悉RTC相关技术,掌握实时音视频领域的专业概念和实践,也能助力在RTC领域耕耘多年的从业者进一步拓展技术领域,改进自己的系统,并进行不同场景的探索。希望大家阅读后有更多收获。
——董海兵 Agora声网教育行业架构师
评论
还没有评论。