新書推薦:
《
有趣的中国古建筑
》
售價:NT$
305.0
《
十一年夏至
》
售價:NT$
347.0
《
如何打造成功的商业赛事
》
售價:NT$
407.0
《
万千教育学前·透视学前儿童的发展:解析幼儿教师常问的那些问题
》
售價:NT$
265.0
《
慈悲与玫瑰
》
售價:NT$
398.0
《
启蒙的辩证:哲学的片简(法兰克福学派哲学经典,批判理论重要文本)
》
售價:NT$
347.0
《
心跳重置
》
售價:NT$
269.0
《
云中记
》
售價:NT$
347.0
|
編輯推薦: |
近年来,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从业人员,且要求读者具备一定的JavaObjective-CC语言基础。
|
關於作者: |
许建林,网名Piasy,毕业于清华大学计算机系,毕业后创业,参与从零到一打造社交直播 APP YOLO 的全过程。目前就职于 PowerInfo(北京世纪鼎点软件有限公司),从事高稳定低延时音视频实时传输技术的研发工作,对实时音视频领域有着深入的研究。开源爱好者,GitHub 近两千关注者,开源了数个上千标星的项目。技术分享者,曾在北京 GDG Meetup、DroidCon Beijing 进行技术分享,是WebRTC Native 源码导读系列博客作者。
|
目錄:
|
第1章 开发环境搭建 1
1.1 WebRTC简介 1
1.2 iOSmacOS编译环境 2
1.3 AndroidLinux编译环境 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 iOSmacOSAndroid 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 iOSmacOS创建PC Factory 68
6.2.2 Android创建PC Factory 69
6.2.3 WindowsLinux创建PC Factory 70
第7章 视频数据流程 72
7.1 视频数据流程概览 72
7.2 视频采集 73
7.2.1 iOSmacOS视频采集 73
7.2.2 Android视频采集 79
7.2.3 WindowsLinux视频采集 85
7.3 视频渲染 87
7.3.1 iOSmacOS视频渲染 87
7.3.2 Android视频渲染 91
7.3.3 WindowsLinux视频渲染 92
7.4 视频编解码 92
7.4.1 iOSmacOS视频编码 94
7.4.2 iOSmacOS视频解码 100
7.4.3 Android视频编码 104
7.4.4 Android视频解码 113
7.4.5 WindowsLinux视频编码 120
7.4.6 WindowsLinux视频解码 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 OfferAnswer和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 长连接发送OfferAnswer和ICE Candidate 288
19.3.5 离开房间 289
19.3.6 错误重连 289
19.3.7 OfferAnswer和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.319D76、Xcode 11.3.111C504、Android Studio 3.5.3,虚拟机环境为Parallels Desktop Windows 10和Ubuntu 18.04.3。
本书所涉及的WebRTC示例代码以及源码分析内容都是基于WebRTC的#30432提交,即通过https:webrtc.googlesource.comsrc.git be99ee8f17f93e06c81e3deb4897dfa8253d3211提交。OWT Server的代码都是基于4.3.x分支的。
本书所有源码开源在 GitHub 上(https:github.comHackWebRTCwebrtc),读者也可以扫描下方的二维码获取:
如果你在下载过程中遇到问题,可发送邮件至booksaga@126.com获得帮助,邮件标题为WebRTC Native开发实战。
另外,欢迎读者加入本书专属社群:Hack WebRTC星球。对本书的任何疑问或者想法,以及WebRTC Native开发相关的话题,都可以在星球里提问、讨论,详情请访问:
https:blog.piasy.comwebrtcindex.html
许建林
2020年5月
|
|