WebRTC 中的三角形和梯形会话
WebRTC实现音视频通话有两种不同的结构模式,即为梯形模式和三角形模式。
# 梯形结构
WebRTC 在浏览器之间的引入点对点通信范式来扩展 client-server 的语义(semantics)。 最通用的 WebRTC 架构模型从所谓的 SIP (会话发起协议)梯形(RFC3261 (opens new window))中汲取灵感。
在 WebRTC 梯形模型中,两个浏览器都运行一个 Web 应用程序,该应用程序是从其他 Web 服务器下载的。 信令消息用于建立和终止通信。 它们是通过 HTTP 或 WebSocket 协议通过 Web 服务器传输的,这些Web服务器可以根据需要修改,转换或管理它们。 值得注意的是,WebRTC 中浏览器和服务器之间的信令未标准化,因为它被认为是应用程序的一部分(请参阅信令)。 关于数据路径,PeerConnection 允许媒体直接在浏览器之间流动,而无需任何中间服务器。 这两个 Web 服务器可以使用标准信令协议(例如 SIP 或 Jingle(XEP-0166))进行通信。 或者,也可以使用专有的信令协议。
注意
- 在WebRTC中我们常常把浏览器和服务器之间的连接成为信令,但是其实他并非指电话系统中的信令。信令在WebRTC中并没有实现标准化。
- WebRTC梯形中采用的都是标准协议。例如:很多视频会议系统用到的会话发起协议(SIP)或者Jingle。当然,还可以采用专有的信令协议。
WebRTC梯形调用流程(SIP):
WebRTC梯形调用流程(Jingle):
扩展
什么是 SIP 和 Jingle?
SIP:会话发起协议(Session Initiation Protocol,缩写SIP)是一个由 IETF MMUSIC 工作组开发的协议,作为标准被提议用于建立,修改和终止包括视频,语音,即时通信,在线游戏和虚拟现实等多种多媒体元素在内的交互式用户会话。
Jingle:由 Google 及 XMPP 标准基金会设计。其多媒体流被设计用于RTP(实时传输协议)。若需要,可由NAT穿透辅助以使用ICE(交互式连接建立)。
# 采用SIP协议实现WebRTC通话
如果浏览器想和一个SIP客户端(例如SIP电话)进行视频通话,首先要做的少就是从Web服务器下载带有WebRTC代码的网页程序,在浏览器端向Web服务器发起音频通话请求对象M,Web服务器把M发给SIP服务器,SIP服务器把请求M发给SIP客户端(例如SIP电话)。
SIP客户端在成功接收请求之后会相应另外一个请求对象S发给SIP服务器,SIP服务器把S发给Web服务器,Web服务器把S发给浏览器。在进行外上面的步骤后,浏览器和SIP服务器开始进行打洞,密钥协商,媒体会话等操作。会话关闭的时候流程和建立链接的时候类似。这里不再复述。
# 采用Jingle协议实现WebRTC通话
整个过程和SIP模式相比除了Web服务器A和Web服务器B之间采用的协议不同,其他的基本相似。这里不再详细说明。
# 三角形结构
最常见的 WebRTC 场景很可能是两种浏览器都运行相同的 Web 应用程序(从相同的网页下载)。 在这种情况下,梯形变为三角形。
为什么会是三角形?
因为这三个元素之间的信令路线和和媒体之间所构成的形状恰似一个三角形。两个浏览器之间的媒体通讯并不通过Web服务器,而是通过建立对等连接来实现音视频媒体以及一些附加数据。
又如:
WebRTC三角形数据调用流程: