欢迎光临
免费的PDF电子书下载网站

WebRTC Native 开发实战 PDF下载

编辑推荐

近年来,WebRTC技术的使用越来越广泛,引起了众多开发者以及各大公司的关注。目前市面上关于WebRTC的书籍大多都是关注Web端的,对Native端(Android 、iOS、macOS、Windows、Linux)的涉猎非常少。此外,还没有任何图书对WebRTC内部的技术实现进行分析,本书试图弥补这一空白。
本书是编者在WebRTC学习、WebRTC Native实际使用过程中的心得体会和系统总结,内容涵盖了Native端WebRTC SDK基本场景的使用、基本场景下完整流程的源码导读,还有一些高级的功能和
场景,比如多人通话、屏幕共享、H.265、美颜、伴奏、本地录制等,*后还对Server端展开了一些讨论。
书中利用大量细致的代码分析和源码导读来讲解WebRTC Native的具体实战,分析WebRTC内部主要的数据流程,力图使读者能够通过实际操作快速入门和理解WebRTC Native的开发技巧。

 ;

内容简介

本书是WebRTC方面的专著,WebRTC是一项实时通信领域革命性的技术,在实时音视频通信领域已经产生了深远的影响。本书涵盖了Native端WebRTC SDK基本场景的使用、基本场景下完整流程的源码导读,还介绍了一些高级的功能和场景,比如多人通话、屏幕共享、H.265、美颜、伴奏、本地录制等,*后还对Server端展开了一些讨论。本书通过细致的代码分析和源码导读,来讲解WebRTC Native的具体实战,分析WebRTC内部主要的数据流程,力图使读者能够通过实际操作快速入门和理解WebRTC Native的开发技巧。 本书主要面向的是所有希望从事WebRTC Native开发的IT从业人员,且要求读者具备一定的Java/Objective-C/C 语言基础。

作者简介

许建林,网名Piasy,毕业于清华大学计算机系,毕业后创业,参与从零到一打造社交直播 APP YOLO 的全过程。目前就职于 PowerInfo(北京世纪鼎点软件有限公司),从事高稳定低延时音视频实时传输技术的研发工作,对实时音视频领域有着深入的研究。开源爱好者,GitHub 近两千关注者,开源了数个上千标星的项目。技术分享者,曾在北京 GDG Meetup、DroidCon Beijing 进行技术分享,是WebRTC Native 源码导读系列博客作者。

WebRTC Native 开发实战 PDF下载

目录

第1章 ; 开发环境搭建 ; // ; 1

1.1 ; WebRTC简介 ; // ; 1

1.2 ; iOS/macOS编译环境 ; // ; 2

1.3 ; Android/Linux编译环境 ; // ; 3

1.4 ; Windows编译环境 ; // ; 3

1.5 ; 更新WebRTC编译环境 ; // ; 4

1.6 ; macOS上的Android编译环境 ; // ; 4

 ;

第2章 ; 运行官方Demo ; // ; 6

2.1 ; 官方Demo简介 ; // ; 6

2.2 ; 部署AppRTC Server ; // ; 6

2.3 ; 运行iOS AppRTCMobile ; // ; 7

2.4 ; 运行macOS AppRTCMobile ; // ; 13

2.5 ; 运行Android AppRTCMobile ; // ; 17

2.6 ; iOS/macOS/Android AppRTCMobile互通测试 ; // ; 19

2.7 ; Android C 代码单步调试 ; // ; 20

2.8 ; 部署PeerConnection Server ; // ; 23

2.9 ; 运行Windows PeerConnection Client ; // ; 23

2.10 ; 运行Linux PeerConnection Client ; // ; 25

 ;

第3章 ; 基本流程分析 ; // ; 26

3.1 ; 拓扑结构 ; // ; 26

3.2 ; 通话过程 ; // ; 27

3.2.1 ; PeerConnection ; // ; 28

3.2.2 ; Offer、Answer和SDP ; // ; 28

3.2.3 ; ICE ; // ; 28

3.2.4 ; STUN ; // ; 28

3.2.5 ; TURN ; // ; 29

3.2.6 ; ICE Candidate ; // ; 29

3.3 ; 核心API和Demo代码位置 ; // ; 30

3.3.1 ; 全局初始化 ; // ; 30

3.3.2 ; PeerConnectionFactory ; // ; 31

3.3.3 ; 创建PeerConnection ; // ; 33

3.3.4 ; 创建Source和Track ; // ; 34

3.3.5 ; 创建Offer  //  37

3.3.6  创建Answer  //  39

3.3.7  ICE Candidate回调和设置  //  41

3.3.8  ICE连接状态回调  //  42

3.3.9  核心API回顾  //  43

3.4  SDP初探  //  44

 

第4章  编译工具介绍  //  46

4.1  Ninja  //  46

4.2  GN  //  46

4.3  系统宏定义  //  48

4.4  添加源码目录和预编译依赖库  //  50

 

第5章  SDP详解  //  54

5.1  Plan B v.s. Unified Plan  //  54

5.2  Transceiver  //  54

5.3  SDP详解  //  57

5.3.1  session metadata  //  57

5.3.2  video media section  //  57

5.3.3  audio media section  //  60

5.3.4  application media section  //  61

5.4  操纵SDP  //  62

 

第6章  线程模型  //  63

6.1  三大线程的使用  //  63

6.1.1  对外接口的线程切换  //  63

6.1.2  内部代码的线程切换  //  65

6.2  三大线程的创建  //  66

6.2.1  iOS/macOS创建PC Factory  //  68

6.2.2  Android创建PC Factory  //  69

6.2.3  Windows/Linux创建PC Factory  //  70

 

第7章  视频数据流程  //  72

7.1  视频数据流程概览  //  72

7.2  视频采集  //  73

7.2.1  iOS/macOS视频采集  //  73

7.2.2  Android视频采集  //  79

7.2.3  Windows/Linux视频采集  //  85

7.3  视频渲染  //  87

7.3.1  iOS/macOS视频渲染  //  87

7.3.2  Android视频渲染  //  91

7.3.3  Windows/Linux视频渲染  //  92

7.4  视频编解码  //  92

7.4.1  iOS/macOS视频编码  //  94

7.4.2  iOS/macOS视频解码  //  100

7.4.3  Android视频编码  //  104

7.4.4  Android视频解码  //  113

7.4.5  Windows/Linux视频编码  //  120

7.4.6  Windows/Linux视频解码  //  125

7.4.7  编码流控测试  //  125

7.5  视频数据流程调用栈  //  130

 

第8章  音频数据流程  //  134

8.1  音频数据流程概览  //  134

8.2  音频采集和播放  //  135

8.2.1  iOS音频采集和播放  //  135

8.2.2  Android音频采集和播放  //  143

8.2.3  macOS音频采集和播放  //  153

8.2.4  Windows音频采集和播放  //  154

8.2.5  Linux音频采集和播放  //  154

8.3  音频设备模块ADM  //  155

8.3.1  iOS ADM  //  155

8.3.2  Android ADM  //  156

8.3.3  macOS ADM  //  156

8.3.4  Windows ADM  //  156

8.3.5  Linux ADM  //  157

8.3.6  声音路由  //  157

8.4  音频编解码模块ACM  //  158

8.4.1  音频编码  //  159

8.4.2  音频解码  //  160

8.5  音频数据流程调用栈  //  162

 

第9章  DataChannel  //  167

9.1  概览  //  167

9.2  iOS DataChannel  //  167

9.2.1  创建DataChannel  //  167

9.2.2  SDP  //  168

9.2.3  发送消息  //  169

9.2.4  接收消息  //  169

9.3  Android DataChannel  //  170

9.3.1  创建DataChannel  //  170

9.3.2  SDP  //  170

9.3.3  发送消息  //  170

9.3.4  接收消息  //  171

9.4  RTCQuicTransport  //  171

 

 

 

第10章  纯音/视频  //  172

10.1  概览  //  172

10.2  AudioTrack的禁用与启用  //  173

10.3  VideoTrack的禁用与启用  //  173

10.4  HijackCapturerObserver  //  174

10.4.1  iOS的实现  //  174

10.4.2  Android的实现  //  176

10.5  track状态的通知  //  177

10.6  录制相关  //  177

 

第11章  多人通话  //  178

11.1  概览  //  178

11.1.1  P2P网状结构  //  178

11.1.2  SFU结构  //  179

11.1.3  MCU结构  //  180

11.2  客户端代码实现  //  180

 

第12章  日志和状态统计  //  183

12.1  概览  //  183

12.2  iOS集成Mars XLog  //  185

12.3  Android集成Mars XLog  //  187

12.4  RTCStatsReport  //  189

12.4.1  AccumulatedValueSplitter  //  190

12.4.2  RtcStats选择函数  //  193

12.4.3  连接状态解析  //  194

12.4.4  视频发送状态解析  //  199

12.4.5  音频发送状态解析  //  205

12.4.6  视频接收状态解析  //  207

12.4.7  音频接收状态解析  //  209

 

第13章  屏幕共享  //  211

13.1  概览  //  211

13.2  iOS屏幕共享  //  211

13.2.1  CFRPCapturer的实现  //  212

13.2.2  CFRPCapturer的使用  //  214

13.2.3  修改RTCVideoSource  //  214

13.3  Android屏幕共享  //  215

13.3.1  ScreenCapturerAndroid的实现  //  215

13.3.2  ScreenCapturerAndroid的使用  //  217

 

第14章  H.265 支持  //  219

14.1  概览  //  220

14.2  SDP  //  220

14.3  编解码  //  222

14.3.1  iOS修改编码代码  //  222

14.3.2  iOS修改解码代码  //  224

14.3.3  Android修改编码代码  //  226

14.3.4  Android修改编码代码  //  227

14.4  RTP封包解包  //  227

 

第15章  美颜  //  228

15.1  Android美颜处理器  //  228

15.2  iOS美颜处理器  //  231

 

第16章  伴奏  //  234

16.1  概览  //  234

16.2  解码音频数据  //  235

16.2.1  初始化  //  235

16.2.2  音频解码  //  236

16.2.3  重采样  //  239

16.2.4  销毁  //  240

16.3  播放非接收的音频数据  //  240

16.4  伴奏混音发送  //  243

16.5  其他控制和调节功能  //  246

 

第17章  本地录制  //  247

17.1  概览  //  247

17.2  添加接口  //  248

17.3  获取数据  //  249

17.4  FFmpeg调用  //  252

17.5  视频关键帧  //  257

17.6  视频方向  //  258

17.7  纯音/视频录制  //  258

 

第18章  项目外使用WebRTC  //  260

18.1  概览  //  260

18.2  摘取源码  //  260

18.3  使用整体静态库  //  264

18.3.1  std::__1 的来源  //  264

18.3.2  修改WebRTC编译配置  //  266

18.3.3  提取头文件  //  267

18.4  使用子模块静态库  //  267

 

第19章  信令  //  269

19.1  AppRTC Server信令协议  //  269

19.1.1  HTTP POST加入房间  //  270

19.1.2  HTTP GET获取ICE服务器配置  //  271

19.1.3  长连接注册  //  271

19.1.4  HTTP POST发送消息  //  272

19.1.5  长连接发送消息  //  272

19.1.6  离开房间  //  273

19.1.7  同时加入  //  274

19.1.8  Offer/Answer和ICE Candidate顺序  //  274

19.2  OWT Server信令协议  //  274

19.2.1  OWT Server架构  //  274

19.2.2  OWT信令协议  //  276

19.2.3  HTTP POST创建token  //  276

19.2.4  SocketIO登录  //  278

19.2.5  SocketIO发布流  //  280

19.2.6  SocketIO发送Offer和ICE Candidate  //  280

19.2.7  SocketIO接收Answer  //  281

19.2.8  SocketIO订阅流  //  282

19.2.9  SocketIO接收其他用户的通知  //  282

19.2.10  SocketIO退出登录  //  283

19.2.11  Offer和ICE Candidate顺序  //  283

19.2.12  错误重连  //  284

19.2.13  HTTP GET用户和流列表  //  284

19.3  P2P网状结构信令协议  //  285

19.3.1  HTTP POST加入房间  //  286

19.3.2  长连接注册  //  287

19.3.3  WebSocket接收其他用户的通知  //  287

19.3.4  长连接发送Offer/Answer和ICE Candidate  //  288

19.3.5  离开房间  //  289

19.3.6  错误重连  //  289

19.3.7  Offer/Answer和ICE Candidate顺序  //  290

 

第20章  NAT穿透  //  291

20.1  NAT穿透原理  //  291

20.2  coturn的基本使用  //  295

 

第21章  OWT Server SFU数据流程  //  299

21.1  进程结构和JavaScript代码处理流程  //  299

21.1.1  进程结构  //  299

21.1.2  Management API  //  300

21.1.3  WebRTC Portal  //  300

21.1.4  Conference Agent  //  301

21.1.5  WebRTC Agent  //  302

21.1.6  WebRTC Agent node间的流扩散  //  303

21.1.7  Cluster Manager  //  304

21.1.8  完整过程总结  //  306

21.2  C 代码处理流程  //  307

21.2.1  WebRTC信令处理  //  308

21.2.2  WebRTC媒体数据处理  //  309

21.2.3  流扩散处理  //  311

 

第22章  OWT Server MCU数据流程  //  314

22.1  JavaScript代码处理流程  //  314

22.1.1  Conference Agent  //  314

22.1.2  Audio Agent  //  316

22.1.3  Video Agent  //  316

22.1.4  转码处理  //  317

22.2  C 代码处理流程  //  317

22.2.1  AudioMixer  //  317

22.2.2  VideoMixer  //  318

22.2.3  VideoTranscoder  //  320

后记  //  321

前沿

提到WebRTC,大家首先想到的可能是Web开发,虽然WebRTC首先发力于Web端,但WebRTC在Native端的应用场景也不容小觑,毕竟Native App的效率依然远超H5。
目前市面上关于WebRTC的书籍大多都是关注Web端的,对Native端(Android、iOS、macOS、Windows、Linux)的涉猎非常少,目前只有WebRTC Blueprints一书最后讲了一下Android和iOS平台的编译、运行,但这本书已经是2014年的书了。此外,还没有任何图书对WebRTC内部的技术实现进行分析。
本书的目的是引导想使用WebRTC Native的开发者进行入门学习,让读者通过本书的学习能够掌握WebRTC Native开发的基本流程,掌握WebRTC内部的主要数据流程,掌握对WebRTC进行调试分析、二次开发的能力。
本书的特点是示例代码丰富,实用性和系统性较强,适合WebRTC Native入门开发者阅读。此外,本书还包含WebRTC内部的主要数据流程,会对WebRTC的内部实现原理进行剖析。
本书首先会介绍Native端WebRTC SDK基本场景的使用,接着对基本场景的主要数据流程进行源码导读,之后会讨论一些高级的功能和场景,最后对Server端展开讨论。
笔者使用的真机开发环境为macOS 10.15.3(19D76)、Xcode 11.3.1(11C504)、Android Studio 3.5.3,虚拟机环境为Parallels Desktop Windows 10和Ubuntu 18.04.3。
本书所涉及的WebRTC示例代码以及源码分析内容都是基于WebRTC的#30432提交,即通过https://webrtc.googlesource.com/src.git/ /be99ee8f17f93e06c81e3deb4897dfa8253d3211/提交。OWT Server的代码都是基于4.3.x分支的。
本书所有源码开源在 GitHub 上(https://github.com/HackWebRTC/webrtc),读者也可以扫描下方的二维码获取:
 
如果你在下载过程中遇到问题,可发送邮件至booksaga@126.com获得帮助,邮件标题为“WebRTC Native开发实战”。
另外,欢迎读者加入本书专属社群:Hack WebRTC星球。对本书的任何疑问或者想法,以及WebRTC Native开发相关的话题,都可以在星球里提问、讨论,详情请访问:
https://blog.piasy.com/webrtc/index.html

许建林
2020年5月

WebRTC Native 开发实战 pdf下载声明

本pdf资料下载仅供个人学习和研究使用,不能用于商业用途,请在下载后24小时内删除。如果喜欢,请购买正版

pdf下载地址

版权归出版社和作者所有,下载链接已删除。如果喜欢,请购买正版!

链接地址:WebRTC Native 开发实战