第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
第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
第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
第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
第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
第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