WebRTC如何运作?

Van*_*ing 48 webrtc

我对浏览器中的Peer-to-Peer连接感兴趣.由于这似乎可以通过WebRTC实现,我想知道它是如何工作的.

我已经阅读了一些解释并看到了关于它的图表,现在我很清楚,连接建立在服务器上工作.服务器似乎在愿意相互连接的客户端之间交换一些数据,以便它们可以启动直接连接,这与服务器无关.

但这是我不明白的特别之处.到目前为止,我认为创建连接的唯一方法是侦听计算机A上的端口并从计算机B连接到该端口.但在WebRTC中似乎并非如此.我认为没有一个客户端开始监听端口.不知何故,他们可以在不监听端口和接受连接的情况下创建连接.客户端A和客户端B都不会充当服务器.

但是怎么样?通过WebRTC服务器交换哪些数据,客户端可以使用它们相互连接?

谢谢你的解释:)

编辑

我找到了这篇文章.它与WebRTC无关,但我认为它回答了我的一部分问题.我不确定,很难.如果有人能向我解释并给我一些额外的链接,它仍然会很酷.

jes*_*sup 45

WebRTC向客户端JS应用程序提供SDP Offer以发送(但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/https://datatracker.ietf.org/doc/draft-ietf-ice-trickle/

  • 一些建设性的批评:我很难理解这个答案,因为使用了很多首字母缩写词(SDP,ICE,DTLS,SRTP-DTLS)和不精确的语言(例如,"然而**它**想要",代理人是什么"它? "). (13认同)
  • 有关WebRTC的更详细的阅读,请查看此免费报告:https://bloggeek.me/webrtc-business-people/; 有关首字母缩略词的解释,请查看WebRTC词汇表:https://webrtcglossary.com/ (2认同)

far*_*way 24

WebRTC 的工作原理

本文档提供了对 WebRTC 的快速而抽象的介绍。要获得有关 WebRTC 的更多信息,请查看本文档末尾的进一步阅读部分。

实时时钟

WebRTC(Web Real-Time Communication)是为浏览器之间的点对点双工实时通信而开发的一套技术。顾名思义,它与 Web 兼容,并且是W3C 中标准WebRTC 的一个重要特性是它甚至可以在 NAT 地址之后工作。

WebRTC 点对点

WebRTC 使用多种技术来提供浏览器之间的实时对等通信。这些技术是 * SDP(会话描述协议) * ICE(交互连接建立) * RTP(实时协议)

还有一件事是运行 WebRTC 需要信令服务器。然而,在实现信令服务器方面没有明确的标准。每个实现都会创建自己的风格。本节稍后将提供有关信令服务器的更多信息。

让我们提供一些有关上述技术的快速信息。

SDP(会话描述协议)

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

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

ICE(交互连接建立)

ICE 是在对等点之间建立连接的魔法,即使它们在 NAT 之后。让我们再次假设客户端 A客户端 B将连接并查看 ICE 是如何用于连接的。

  • 客户端A通过STUN服务器找到自己的本地地址和公网地址,并通过信令服务器将这些地址发送给客户端B。从 STUN 服务器收到的每个地址称为ICE 候选地址

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

STUN 服务器用于让客户端 A了解其所有地址。举个例子,我们的电脑一般在 192.168.0.0 网络有一个本地地址,当我们连接到www.whatismyip.com 时,我们看到第二个地址,这个 IP 地址实际上是我们的公共 IP 地址。 Internet 网关(调制解调器、路由器等)让我们定义 STUN 服务器;STUN 服务器让对等方知道他们的公共和本地 IP 地址。顺便说一句,谷歌提供免费的 STUN 服务器(stun.l.google.com:19302)。

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

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

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

  • 客户端 B执行相同操作以连接到客户端 A

RTP(实时协议)

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

信令服务器

最后一部分是信令服务器,在 WebRTC 中没有定义。如上所述,信令服务器用于在客户端 A客户端 B之间发送 SDP 字符串和 ICE Candidates 。信令服务器还决定哪些对等点相互连接。WebSocket 技术一般用于信令服务器中进行通信。

兼容性

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

进一步阅读和参考

顺便说一句,我是Ant Media Server 的开发人员,它支持可扩展的一对多 WebRTC 和对等 WebRTC 连接

  • 这是对彼此相关的各个部分的非常好的解释,大多数其他资源只是在您面前扔了很多缩写词。 (2认同)

Oct*_*icu 21

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

  1. 第 1 步:信令:双方都连接到信令服务器(使用 80/443、comet、SIP 上的 websockets 等)并交换信息(关于它们的媒体功能、公共 IP:端口对可用时等)

  2. 第 2 步:发现:连接到 LAN 或移动网络的设备不知道可以访问它们的公共 IP(和端口),因此它们使用位于公共 Internet 上的 STUN/TURN 服务器来发现它们的 ip:port 对(ICE候选人)。在这个过程中,他们在步骤 3 中使用的 NAT/路由器上打了一个洞:

  3. 第 3 步:P2P 连接:一旦通过初始信令通道交换 ICE 候选对象,每个对等方都知道彼此的 ip:port(并且已在 NAT/路由器中打孔),因此可以建立对等 UDP 连接。

在此处输入图片说明

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


gae*_*ano 9

“高性能浏览器网络(O'Reilly)” 一书中可以找到一个很好的解释http://chimera.labs.oreilly.com/books/1230000000545/ch03.html#STUN_TURN_ICE 它提供了 WebRTC 如何使用的基础知识冰技术。

在此处输入图片说明

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

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

有了这种机制,每当两个对等点想要通过 UDP 相互交谈时,他们就可以使用已建立的公共 IP 和端口元组来交换数据。

不幸的是,在某些情况下,UDP 可能会被防火墙阻止。为了解决这个问题,每当 STUN 失败时,我们可以使用围绕 NAT 的中继遍历(TURN)协议作为后备,它可以在 UDP 上运行并在其他一切都失败时切换到 TCP。