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
   300   301   302   303   304   305   306   307   308   309   310