WebRTC connectivity

现在我们已经单独介绍了协议,我们可以将它们放在一起。本文介绍了 WebRTC 各种相关协议如何相互交互,以便在对等体之间创建连接和传输数据和/或媒体。

备注: 这个页面需要对结构完整性和内容完整性进行大量重写。这里有很多信息,但是组织混乱,现在这里跟个垃圾场一样。

什么是提议/应答和信号通道?

不幸的是,WebRTC 中间无法创建没有某种服务器的连接。我们称之为信号通道。无论是通过电子邮件,明信片还是一只信鸽...,都可以通过任何通信方式交换信息,这取决于你。

我们需要交换的信息是提议和应答,其中仅包含下面提到的 SDP。

将作为连接发起者的同伴 A 将创建一个提议。然后他们将使用所选择的信号通道将此提议发送给对等体 B. 对等体 B 将从信号通道接收提议并创建应答。然后,它们将沿着信号通道发送回对等体 A。

会话描述

WebRTC 连接上的端点配置称为会话描述。该描述包括关于要发送的媒体类型,其格式,正在使用的传输协议,端点的 IP 地址和端口以及描述媒体传输端点所需的其他信息的信息。使用会话描述协议(SDP) 来交换和存储该信息; 如果你想要有关 SDP 数据格式的详细信息,可以在RFC 2327中找到。

当用户对另一个用户启动 WebRTC 调用时,将创建一个称为提议(offer) 的特定描述。该描述包括有关呼叫者建议的呼叫配置的所有信息。接收者然后用应答(answer) 进行响应,这是他们对呼叫结束的描述。以这种方式,两个设备彼此共享以便交换媒体数据所需的信息。该交换是使用交互式连接建立 (ICE)(ICE处理的,这是一种协议,即使两个设备通过网络地址转换 (NAT)。

然后,每个对等端保持两个描述:描述本身的本地描述和描述呼叫的远端的远程描述

在首次建立呼叫时,还可以在呼叫格式或其他配置需要更改的任何时候执行提议/应答过程。无论是新呼叫还是重新配置现有的呼叫,这些都是交换提议和回答所必需的基本步骤,暂时忽略了 ICE 层:

  1. 呼叫者通过 navigator.mediaDevices.getUserMedia() 捕捉本地媒体。
  2. 呼叫者创建一个RTCPeerConnection 并调用 RTCPeerConnection.addTrack() (注: addStream 已经过时。)
  3. 呼叫者调用 RTCPeerConnection.createOffer() 来创建一个提议 (offer).
  4. 呼叫者调用