WebRTC 是如何工作的?

我对浏览器中的点对点连接感兴趣。由于 WebRTC 似乎可以做到这一点,我想知道它到底是如何工作的。

我已经阅读了一些解释,并看到了关于它的图表,现在对我来说很清楚,连接建立在服务器上工作。服务器似乎在愿意相互连接的客户机之间交换一些数据,以便它们可以开始一个独立于服务器的直接连接。

但这正是我不明白的地方。到目前为止,我认为创建连接的唯一方法是监听计算机 A 上的一个端口,并从计算机 B 连接到该端口。但 WebRTC 似乎并非如此。我觉得没有一个客户开始监听端口。不知何故,他们可以创建一个连接,而不用监听端口和接受连接。客户端 A 和客户端 B 都不开始充当服务器。

但是怎么做呢? 在 WebRTC 服务器上交换哪些数据,客户端可以使用这些数据彼此连接?

谢谢你对此的解释:)

剪辑

我找到了 这个的文章。它与 WebRTC 无关,但我认为它回答了我的一部分问题。我不确定,坚强。如果有人能给我解释一下,给我一些额外的链接,那还是很酷的。

24070 次浏览

WebRTC 将 SDP Offer 提供给客户端 JS 应用程序,以便(无论 JS 应用程序希望如何)发送给另一个设备,后者使用该设备生成 SDP 应答。

技巧是 SDP 包括 ICE 候选人(有效地“试着在这个 IP 地址和这个端口与我交谈”)。ICE 可以打开防火墙中的端口; 但是如果双方都是对称 NAT,那么一般情况下是不可能的,可以使用另一个候选端口(在 TURN 服务器上)。

一旦他们直接通话(或通过 TURN,这实际上是一个包镜像) ,他们可以打开一个 DTLS 连接,并使用它来键入 SRTP-DTLS 媒体流,并通过 DTLS 发送 DataChannel。

编辑: 这里的首字母缩略词是 http://blog.1click.io/10-jargons-abbreviations-for-webrtc-fans/,其余的是 Google,大部分都是由 IETF (http://ietf.org/)定义的

编辑2: Firefox 和 Chrome (以及规范)已经转向对 ICE 候选人使用“涓流”,所以 ICE 候选人通常在面试后添加到 PeerConnection,并独立于最初的 SDP 进行交换(尽管你可以等到最初的候选人准备好之后再发送报价,并将它们捆绑在一起)。 参见 https://webrtcglossary.com/trickle-ice/和 < a href = “ https://datatracer.ietf.org/doc/draft-ietf-ice-trickle/”> https://datatracker.ietf.org/doc/draft-ietf-ice-trickle/

一个非常好的解释可以在这本书 “高性能浏览器网络(O’Reilly)” < a href = “ http://chimera.labs.oreilly.com/books/1230000000545/ch03.html # STUN _ TURN _ ICE”rel = “ nofollow noReferrer”> http://chimera.labs.oreilly.com/books/1230000000545/ch03.html#stun_turn_ice 中找到 它提供了 WebRTC 如何使用 ICE 技术的基本原理。

enter image description here

特别是假设 STUN 服务器的 IP 地址已知,WebRTC 应用程序首先向 STUN 服务器发送绑定请求。STUN 服务器用一个包含公共 IP 地址和从公共网络看到的客户端端口的响应进行响应。

现在应用程序发现它的公共 IP 和端口元组,可以通过 SDP 发送到另一个对等方。(请注意,SDP 是通过外部信令通道发送的,该信令通道是通过 Web 服务建立的 fi.websocket)

有了这种机制,每当两个对等点希望通过 UDP 彼此通信时,它们就可以使用已建立的公共 IP 和端口元组来交换数据。

不幸的是,在某些情况下 UDP 可能被防火墙阻塞。为了解决这个问题,每当 STUN 失败时,我们可以使用 TURN (tURN)协议作为备用,它可以在 UDP 上运行,并在所有其他协议都失败时切换到 TCP。

建立 p2p WebRTC 连接有3个步骤(10000英尺概述) :

  1. 步骤1: 发信号: 两个对等点都连接到一个信令服务器(使用超过80/443的 websockets、 comet、 SIP 等)并交换信息(关于它们的媒体能力、公共 IP: 端口对可用时的信息,等等)

  2. 步骤2: 发现号: 连接到局域网或移动网络的设备不知道他们的公共 IP (和端口) ,所以他们使用位于公共互联网上的 STUN/TURN 服务器来发现他们的 IP: 端口对(ICE 候选)。在这个过程中,他们在 NAT/路由器上打了一个洞,这是步骤3中使用的:

  3. 步骤3: P2P 连接: 一旦 ICE 候选人通过初始信令通道进行交换,每个对等方都会知道对方的 ip: port (NAT/路由器中已经穿孔) ,这样就可以建立一个对等的 UDP 连接。

enter image description here

上面的方案解释了使用2个设备连接到本地网络的过程。这是我写的一篇关于 解决连接问题的文章的一部分,但是它很好地解释了 WebRTC 是如何工作的。

WebRTC 如何工作

本文档提供了 WebRTC 的简要介绍。为了获得更多关于 WebRTC 的信息,请查看本文末尾的进一步阅读部分。

WebRTC

WebRTC (Web 实时通信)是为浏览器之间的对等双工实时通信而开发的一组技术。正如它的名字所提到的,它与 Web 兼容,而且是 W3C 标准。 WebRTC 的一个重要特性是,它甚至可以在 NAT 地址之后工作。

WebRTC Peer to Peer

WebRTC 使用多种技术提供浏览器之间的实时对等通信

运行 WebRTC 还需要 信令服务器。但是,在实现信令服务器方面没有定义标准。每个实现创建自己的样式。本节后面将提供有关信令服务器的更多信息。

让我们给出一些关于上述技术的快速信息。

会话描述协议

SDP 是一个简单的协议,用于浏览器中支持的编解码器。例如,假设有两个对等点(客户 A客户 B)将通过 WebRTC 连接。客户 A客户 B创建定义它们支持的编解码器的 SDP 字符串。例如,客户 A可能支持视频的 H264、 VP8和 VP9编解码器,音频的 Opus 和 PCM 编解码器。客户 B可能只支持视频 H264和音频 Opus 编解码器。对于这种情况,将在 客户 A客户 B之间使用的编解码器是 H264和 Opus。如果对等点之间没有公共的编解码器,则无法建立对等点通信。

您可能对这些 SDP 字符串如何在彼此之间发送有疑问。这是发生信令服务器的地方。

交互式连接建立

ICE 是建立同龄人之间联系的魔法,即使他们是在 NAT 之后。让我们再次假设 客户 A客户 B将得到连接,并采取看看 ICE 是如何使用的。

  • 客户端 A 使用 STUN 服务器查找他们的本地地址和公共 Internet 地址,并通过信令服务器将这些地址发送给 客户 B。从 STUN 服务器接收到的每个地址称为 < em > ICE 候选地址

在上图中,有两个服务器,一个是 STUN,另一个是 TURN 服务器。

STUN 服务器用于让 客户 A了解它的所有地址。让我举个例子,我们的计算机通常在192.168.0.0网络中有一个本地地址,当我们连接到 Www.whatismyip.com时会看到第二个地址,这个 IP 地址实际上是我们的 Internet 网关(调制解调器、路由器等)的公共 IP 地址,所以让我们定义 STUN 服务器; STUN 服务器让同行知道他们的公共和本地 IP 地址。顺便说一句,谷歌提供免费的 STUN 服务器( STUN.l.Google.com : 19302)。

图像中还有一个服务器 TURN Server。当对等点之间无法建立对等点连接时,将使用 TURN Server。TURN 服务器只是在对等点之间中继数据。

  • 客户端 B 执行同样的操作,从 STUN 服务器获取本地和公共 IP 地址,并通过信令服务器将这些地址发送到 客户 A

  • 客户端 A 接收 客户 B的地址,并通过发送特殊 ping 来尝试每个 IP 地址,以便与 客户 B建立连接。如果 客户 A接收到来自任何 IP 地址的响应,它将该地址与响应时间和其他性能凭证一起放在一个列表中。最后根据 客户 A的性能选择最佳地址。

  • 客户端 B 执行同样的操作,以便连接到客户端 A

实时协议

RTP 是一种成熟的实时数据传输协议。它是基于 UDP 的。在 WebRTC 中,音频和视频通过 RTP 传输。RTP 有一个姊妹协议,即实时控制协议(Real-time Control Protocol,RTCP) ,它在 RTP 通信中提供 QoS 服务。RTP 也用于 RTSP (实时流协议)

信令服务器

最后一部分是未在 WebRTC 中定义的信令服务器。如上所述,信令服务器用于在 客户 A客户 B之间发送 SDP 字符串和 ICE 候选字符串。信令服务器还决定哪些对等点彼此连接。通常在信令服务器中使用 WebSocket 技术进行通信。

兼容性

在过去的一年中,包括 Safari,Edge 在内的所有浏览器都发布了支持 WebRTC 的新版本。Chrome、 Firefox 和 Opera 已经支持 WebRTC 一段时间了。浏览器通用的视频编解码器是 H264。在音频方面,Opus 在浏览器中很常见。PCM 也可以用于音频编解码器,但是由于许可问题,即使所有浏览器都支持 AAC,也不会使用 AAC。IP 摄像头通常支持 H264视频编解码器和 PCM 或 AAC 音频编解码器。

进一步阅读及参考资料

顺便说一下,我是 蚂蚁媒体服务器的开发人员,它支持可伸缩的一对多 WebRTC 和对等网络 WebRTC 连接