第1章 Web实时通信技术介绍 1
1.1 WebRTC介绍 1
1.1.1 Web浏览模式 1
1.1.2 浏览器中的实时通信功能 2
1.1.3 WebRTC系统所含的元素 3
1.1.4 WebRTC三角形 3
1.1.5 WebRTC梯形 4
1.1.6 WebRTC和会话启动协议SIP 4
1.1.7 WebRTC与Jingle 5
1.1.8 WebRTC与公共交换电话网 5
1.2 WebRTC中的多种媒体流 6
1.3 WebRTC中的多方会话 6
1.4 WebRTC标准 8
1.5 WebRTC的新功能 8
1.6 重要的术语说明 9
1.7 参考资料 10
第2章 如何使用WebRTC 11
2.1 建立WebRTC会话 11
2.1.1 获取本地媒体 12
2.1.2 建立对等连接 12
2.1.3 交换媒体或数据 12
2.1.4 关闭连接 13
2.2 WebRTC联网和交互示例 13
2.2.1 在WebRTC三角形中建立会话 14
2.2.2 在WebRTC梯形中建立会话 15
2.2.3 与SIP终端建立WebRTC会话 16
2.2.4 与Jingle终端建立WebRTC会话 17
2.2.5 与PSTN建立WebRTC会话 17
2.2.6 与SIP和媒体网关建立WebRTC会话 18
2.3 WebRTC伪码示例 20
2.3.1 针对手机浏览器的伪码 21
2.3.2 针对笔记本电脑浏览器的伪码 25
2.4 参考资料 28
第3章 本地媒体 29
3.1 WebRTC中的媒体 29
3.1.1 轨道 29
3.1.2 流 30
3.2 捕获本地媒体 31
3.3 媒体选择和控制 31
3.4 媒体流示例 34
3.5 可运行的本地媒体代码示例 36
3.5.1 Web服务器 36
3.5.2 客户端WebRTC应用程序 41
第4章 信令 45
4.1 信令的作用 45
4.1.1 为何没有建立信令标准 45
4.1.2 媒体协商 46
4.1.3 标识和身份验证 47
4.1.4 控制媒体会话 47
4.1.5 双占用分解 47
4.2 信令传输 47
4.2.1 HTTP传输 48
4.2.2 WebSocket传输 48
4.2.3 数据通道传输 49
4.3 信令协议 50
4.3.1 信令状态机 50
4.3.2 信令标识 51
4.3.3 HTTP轮询 51
4.3.4 WebSocket代理 52
4.3.5 Google应用程序引擎通道API 53
4.3.6 WebSocket SIP 54
4.3.7 WebSocket Jingle 56
4.3.8 数据通道专有信令 58
4.3.9 使用叠加网络的数据通道 58
4.4 信令选项总结 59
4.5 可运行的信令通道代码示例 60
4.5.1 Web服务器 60
4.5.2 信令通道 65
4.5.3 客户端WebRTC应用程序 76
4.6 参考资料 86
第5章 对等媒体 87
5.1 WebRTC媒体流 87
5.1.1 不采用WebRTC时的媒体流 88
5.1.2 采用WebRTC时的媒体流 88
5.2 WebRTC和网络地址转换 89
5.2.1 通过多个NAT的对等媒体流 90
5.2.2 通过通用NAT的对等媒体流 90
5.2.3 私有地址和公共地址 92
5.3 STUN服务器 93
5.4 TURN服务器 94
5.5 候选项 95
第6章 对等连接和提议/应答协商 96
6.1 对等连接 96
6.2 提议/应答协商 97
6.3 JavaScript提议/应答控制 98
6.4 可运行的代码示例:对等连接和提议/应答协商 100
第7章 数据通道 113
7.1 数据通道简介 113
7.2 使用数据通道 114
7.3 可运行的数据通道代码示例 116
第8章 W3C文档 129
8.1 WebRTC API参考 129
8.2 WEBRTC建议 141
8.3 WEBRTC草案 141
8.3.1 WebRTC 1.0:浏览器之间的实时通信 141
8.3.2 媒体捕获和流 145
8.3.3 MediaStream捕获情形 148
8.4 相关工作 148
8.4.1 MediaStream录制API规范 148
8.4.2 图像捕获API 148
8.4.3 future 149
8.4.4 媒体隐私 149
8.4.5 MediaStream的非活动状态 149
8.5 参考资料 150
第9章 NAT和防火墙穿透 151
9.1 穿透简介 151
通过TURN服务器提供中继的媒体 152
9.2 交互式连接建立 152
9.2.1 收集候选传输地址 153
9.2.2 交换候选项 154
9.2.3 STUN连接检查 154
9.2.4 选择选定的对并启动媒体 155
9.2.5 长连接 155
9.2.6 ICE重新启动 156
9.3 WebRTC和防火墙 156
9.4 参考资料 158
第10章 协议 159
10.1 协议 159
10.2 WebRTC协议概述 160
10.2.1 HTTP协议 160
10.2.2 WebSocket协议 161
10.2.3 RTP协议和SRTP协议 162
10.2.4 SDP协议 164
10.2.5 STUN协议 165
10.2.6 TURN协议 169
10.2.7 ICE协议 171
10.2.8 TLS协议 174
10.2.9 TCP协议 175
10.2.10 DTLS协议 175
10.2.11 UDP协议 175
10.2.12 SCTP协议 176
10.2.13 IP协议 177
10.3 参考资料 178
第11章 IETF文档 179
11.1 意见征求书 179
11.2 Internet草案 179
11.3 RTCWEB工作组Internet草案 180
11.3.1 “概述:针对基于浏览器的应用程序的实时协议”[draft-ietf-rtcweb-overview] 180
11.3.2 “Web实时通信使用情形和要求”[RFC7478] 180
11.3.3 “Web实时通信(WebRTC):媒体传输和RTP的用法”[draft-ietf-rtcweb-rtp-usage] 181
11.3.4 “RTCWEB安全体系结构”[draft-ietf-rtcweb-security-arch] 181
11.3.5 “RTC Web安全注意事项”[draft-ietf-rtcweb-security] 183
11.3.6 “RTCWeb数据通道”[draft-ietf-rtcweb-data-channel] 183
11.3.7 “WebRTC数据通道建立协议”[draft-ietfrtcweb-data-protocol] 184
11.3.8 “JavaScript会话建立协议”[draft-ietfrtcweb-jsep] 185
11.3.9 “WebRTC音频编解码器和处理要求”[draft-ietf-rtcweb-audio] 187
11.3.10 “使用STUN刷新许可”[draft-ietf-rtcweb-stunconsent-freshness] 187
11.3.11 “RTCWEB传输”[draft-ietf-rtcweb-transports] 188
11.4 个人Internet草案 188
11.4.1 “用于RTCWeb媒体约束的IANA注册表”[draftburnett-rtcweb-constraints-registry] 188
11.4.2 “关于NAT、防火墙和HTTP代理的RTCWEB注意事项”[draft-hutton-rtcweb-nat-firewall-considerations] 188
11.4.3 “适用于RTCWeb QoS的DSCP和其他数据包标记”[draftdhesikan-tsvwg-rtcweb-qos] 188
11.4.4 “适用于万维网实时通信的Google拥塞控制”[draft-alvestrand-rmcat-congestion] 188
11.5 其他工作组的RTCWEB文档 189
11.5.1 “缓慢型ICE:逐步为交互式连接建立协议增加候选项的配置”[draft-ietf-mmusic-trickle-ice] 189
11.5.2 “利用会话描述协议端口号进行多路协商”[draft-ietf-mmusic-sdp-bundle-negotiation] 191
11.5.3 “会话描述协议中的跨流标识”[draft-ietf-mmusic-msid] 191
11.5.4 “RTP会话中的多种媒体类型”[draft-ietf-avtcore-multi-media-rtp-session] 191
11.5.5 “多媒体拥塞控制:用于单播RTP会话的断路器”[draft-ietf-avtcore-rtp-circuit-breakers] 191
11.5.6 “在一个RTP会话中支持多个时钟速率”[draftietf-avtext-multiple-clock-rates] 192
11.5.7 “会话描述协议中基于流控制传输协议(SCTP)的媒体传输”[draft-ietf-mmusic-sctp-sdp] 192
11.5.8 “会话描述协议中的媒体源选择机制”[draft-lennox-mmusic-sdp-source-selection] 192
11.5.9 TRAM工作组对STUN和TURN进行的扩展 193
11.6 参考资料 194
第12章 与IETF相关的RFC文档 197
12.1 实时传输协议 197
12.1.1 “RTP:用于实时应用程序的传输协议”[RFC3550] 197
12.1.2 “用于音频和视频会议的RTP配置文件”[RFC3551] 197
12.1.3 “安全实时传输协议”[RFC3711] 198
12.1.4 “用于基于RTCP的反馈且经过扩展的安全RTP配置文件(RTP/SAVPF)”[RFC5124] 198
12.1.5 “通过一个端口多路传输RTP数据和控制数据包”[RFC5761] 198
12.1.6 “用于混合器到客户端音频级别指示的实时传输协议标头扩展项”[RFC6465] 199
12.1.7 “用于客户端到混合器音频级别指示的实时传输协议标头扩展项”[RFC6464] 199
12.1.8 “RTP流的快速同步”[RFC6051] 199
12.1.9 “RTP重新传输有效负载格式”[RFC4588] 199
12.1.10 “采用反馈RTP/AVPF的RTP音频-视频配置文件中的编解码器控制消”[RFC5104] 200
12.1.11 “TCP友好速率控制:协议规范”[RFC5348] 200
12.1.12 “用于RTP标头扩展项的常规机制”[RFC5285] 200
12.1.13 “结合使用可变位速率音频与安全RTP的指南”[RFC6562] 200
12.1.14 “支持缩减型实时传输控制协议:契机与后果”[RFC5506] 200
12.1.15 “安全实时传输协议中的标头扩展项加密”[RFC6904] 201
12.1.16 “RTP控制协议规范名称(CNAME)选择指南”[RFC7022] 201
12.2 会话描述协议 201
12.2.1 “SDP:会话描述协议”[RFC4566] 201
12.2.2 浏览器中的WebRTC SDP示例 201
12.2.3 “用于RTP控制协议带宽的会话描述协议带宽修饰符”[RFC3556] 210
12.2.4 “会话描述协议中特定于源的媒体属性”[RFC5576] 210
12.2.5 “在SDP中协商通用图像属性”[RFC6236] 210
12.3 NAT遍历RFC 211
12.3.1 “交互式连接建立:用于提议/应答协议的网络地址转换器遍历协议”[RFC5245] 211
12.3.2 “对称RTP/RTP控制协议(RTCP)”[RFC4961] 211
12.4 编解码器 212
12.4.1 “Opus音频编解码器的定义”[RFC6716] 212
12.4.2 “VP8数据格式和解码指南”[RFC6386] 212
12.5 信令 212
12.6 参考资料 212
第13章 安全和隐私 214
13.1 浏览器安全模型 214
13.1.1 WebRTC权限 215
13.1.2 网站身份 215
13.1.3 浏览器用户身份 216
13.2 新型WebRTC浏览器攻击 217
13.2.1 API攻击 217
13.2.2 协议攻击 217
13.2.3 信令通道攻击 218
13.3 通信安全 219
13.3.1 通信隐私 219
13.3.2 通过信令通道传输密钥 220
13.3.3 媒体路径中的密钥协议 220
13.3.4 身份验证 221
13.3.5 身份 221
13.4 WebRTC中的身份 221
13.5 企业问题 224
13.6 隐私 225
13.6.1 身份隐私 225
13.6.2 IP地址隐私 225
13.6.3 浏览器指纹识别 226
13.7 基于数据通道的ZRTP 226
13.8 总结 227
13.9 参考资料 227
第14章 实现和应用 229
14.1 浏览器 229
14.1.1 Apple Safari 229
14.1.2 Google Chrome 229
14.1.3 Mozilla Firefox 230
14.1.4 Microsoft Internet Explorer 230
14.1.5 Opera 230
14.2 其他浏览器 230
14.3 STUN和TURN服务器实现 231
14.4 参考资料 231
附录A W3C标准流程 232
附录B IETF标准流程 235
附录C 术语表 238
附录D 补充阅读和信息资源 240