WebRTC如何运作?

时间:2012-10-03 12:13:23

标签: webrtc

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

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

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

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

感谢您对此的解释:)

修改

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

4 个答案:

答案 0 :(得分:43)

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/其余部分,有谷歌。其中大部分是由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/

答案 1 :(得分:4)

本书中可以找到一个非常好的解释http://chimera.labs.oreilly.com/books/1230000000545/ch03.html#STUN_TURN_ICE 它提供了WebRTC如何使用ICE技术的基础知识。

enter image description here

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

现在,应用程序发现了可以通过SDP发送给其他对等方的公共IP和端口元组。 (请注意,SDP是通过外部信令通道发送的,f.i。websocket通过Web服务建立)

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

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

答案 2 :(得分:4)

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

  1. 步骤1:信令:两个对等体连接到信令服务器(使用超过80/443,彗星,SIP等的网页套件)并交换信息(关于其媒体功能,公共IP:可用时的端口对等。)

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

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

  4. enter image description here

    上述方案解释了连接到本地网络的2个设备的过程。这是我撰写的一篇文章的一部分,该文章涉及troubleshooting connection issues,但它很好地解释了WebRTC的工作原理。

答案 3 :(得分:2)

WebRTC的工作方式

本文档提供了WebRTC的快速抽象介绍。为了获得有关WebRTC的更多信息,请参阅本文档末尾的“进一步阅读”部分。

WebRTC

WebRTC(Web实时通信)是为浏览器之间的对等双工实时通信而开发的一组技术。顾名思义,它与Web兼容,并且是standard in W3C。WebRTC的重要功能之一是它甚至可以在NAT地址后面使用。

WebRTC Peer to Peer

WebRTC使用多种技术来提供浏览器之间的实时对等通信。这些技术是 * SDP (Session Description Protocol) * ICE (Interactivity Connection Establishment) * RTP (Real Time Protocol)

还有另外一件事,即运行WebRTC需要 Signalling Server 。但是,在实现信令服务器方面没有定义好的标准。每个实现都会创建自己的样式。本节稍后将提供有关Signaling Server的更多信息。

让我们快速介绍一下上面的技术。

SDP(会话描述协议)

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

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

ICE(交互连接建立)

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

  • 客户端A 使用STUN服务器查找其本地地址和公用Internet地址,并将这些地址通过Signaling Server发送给客户端B 。从STUN服务器收到的每个地址称为 ICE候选

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

STUN服务器用于让客户端A 了解其所有地址。让我举一个例子,我们的计算机通常在192.168.0.0网络中有一个本地地址,当我们连接到www.whatismyip.com时,我们看到了另一个地址,该IP地址实际上是我们的公共IP地址。 Internet网关(调制解调器,路由器等),因此让我们定义STUN服务器; STUN服务器使对等方知道其公共和本地IP地址。顺便说一句,Google提供了免费的STUN服务器(stun.l.google.com:19302)。

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

  • 客户端B 相同,从STUN服务器获取本地和公共IP地址,并将这些地址通过Signaling Server发送到客户端A

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

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

RTP(实时协议)

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

信号发送服务器

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

兼容性

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

进一步的阅读和参考文献

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