Page 305 - Web性能权威指南
P. 305
<script src="http://simplewebrtc.com/latest.js"></script>
<div id="local_video"></div>
<div id="remote_video"></div>
<script>
var webrtc = new WebRTC({
localVideoEl: "local_video",
remoteVideosEl: "remote_video",
autoRequestMedia: true
});
webrtc.on("readyToCall", function () {
webrtc.joinRoom("your awesome room name");
});
</script>
以上这几行 JavaScript 代码能实现与前面例子一样的视频会议功能。可是,这里也
没有什么神秘的,只不过 simpleWebRTC 替我们做了一些决定而已。在这几行代
码的背后,simpleWebRTC 使用一个用于穿透 NAT 的公共 STUN 服务器初始化了
RTCPeerConnection,使用 getUserMedia 请求音频和视频流,并初始化了连接到它
自己发信服务器的 WebSocket 连接。而应用要做的,只是指定一个“房间名”,那
是所有想建立端到端连接的节点都必须认可的。
其他细节请大家参考 simpleWebRTC 的文档(http://simplewebrtc.com/)。值得一提
的是,这个项目还提供了一个开源的发信服务器,你可以利用它,也可以在实现
自己的发信服务器时参考它。
18.5 交付媒体和应用数据
建立端到端的连接需要花很多工夫。可是,即便两端完成了提议 - 应答工作流,每
端也完成了 NAT 穿越和 STUN 连接检查,在 WebRTC 协议栈中仍然只走了一半的
路。此时,两端相互都打开了原始的 UDP 连接,可以传输基本的数据报,但我们知
道仅仅这样是不行的(参见 3.3 节“针对 UDP 的优化建议”)。
没有流量控制、拥塞控制、错误校验,以及一些预测带宽和延迟的机制,很容易把
网络搞得一团糟,而这又会进一步降低两端及周边节点的性能。另外,UDP 以明
文传输数据,而 WebRTC 要求对所有通信加密!为解决这个问题,WebRTC 又在
UDP 之上增加了几层协议:
• 数据报传输层安全(DTLS,Datagram Transport Layer Security),用于加密传输
应用数据时针对要传输的媒体数据协商密钥;
• 安全实时传输(SRTP,Secure Real-Time Transport),用于传输音频和视频流;
WebRTC | 295