第3章 构建浏览器 RTC 梯形图:本地视角

在上一章中,我们通过介绍了所谓的10步 Web real-time 通信配方的前三个步骤,开始深入研究 Media Capture and Streams API。 尤其是,我们讨论了一些示例,这些示例展示了如何使用 getUserMedia() 方法访问和管理本地媒体流。现在开始研究通信部分的时机已经成熟。

在本章中,我们将分析 WebRTC 1.0 API,其主要目的是允许向其他浏览器发送和接收媒体

正如我们在前几章中已经预期的那样,需要一种机制来适当地协调实时通信,并允许对等方交换控制消息。 在 WebRTC 内部尚未定义这种机制(通常称为信令),因此不属于 RTCPeerConnection API 规范。

在一开始就做出了使这种 API 与信令不可知的选择。 WebRTC 中的信令未标准化,因为浏览器之间的互操作性是由 Web 服务器使用下载的 JavaScript 代码来确保的。 这意味着 WebRTC 开发人员可以通过依赖于他们最喜欢的消息传递协议(SIP,XMPP,Jingle等)来实现信令通道,或者他们可以设计一种专有的信令机制,该机制可能仅提供应用程序所需的功能。

关于 WebRTC 应用程序这一部分的唯一的体系结构要求涉及在 Web浏览器 和 Web服务器 之间正确配置的双向通信通道的可用性。 XMLHttpRequest(XHR),WebSocket 以及 Google 的 Channel API 之类的解决方案都是很好的选择

需要信令通道以允许WebRTC对等点之间交换三种类型的信息:

  • 媒体会话管理 设置和断开通信,并报告潜在的错误情况

  • 节点的网络配置 即使存在NAT也可用于交换实时数据的网络地址和端口

  • 节点的多媒体功能 支持的媒体,可用的编码器/解码器(编解码器),支持的分辨率和帧速率等。

在正确交换和协商所有上述信息之前,WebRTC 对等方之间无法传输任何数据。

在本章中,我们将忽略与信令通道的设置(和使用)有关的所有上述问题,仅关注 RTCPeerConnection API 的描述。我们将通过某种方式在单台计算机上模拟对等行为来实现此目标。这意味着我们暂时将绕过信令通道设置阶段,并让上述三个步骤(会话管理,网络配置和多媒体功能交换)在单个计算机上进行。 在第5章中,我们将通过展示本地场景如何在两个启用 WebRTC 的对等点之间引入真正的信令通道,来最终向 WebRTC 建筑中添加最后一块砖。

回到 API,调用 new RTCPeerConnection(configuration) 会创建一个 RTCPeerConnection 对象,该对象是两个用户/浏览器之间通信通道的抽象,可以为特定的 MediaStream 输入或输出,如 图3-1 所示。配置参数包含信息,以查找对 NAT 遍历设置阶段必需的对 STUN 和 TURN 服务器的访问。

图3-1

图3-1 将 MediaStream 添加到 PeerConnection