我对浏览器中的点对点连接感兴趣。由于这似乎可以使用WebRTC,我想知道它是如何运作的。

我已经阅读了一些解释并看到了关于它的图表,现在它对我来说很清楚,连接建立在服务器上有效。服务器似乎在愿意彼此连接的客户端之间交换一些数据,以便它们可以启动直接连接,它独立于服务器。

但那是一种我不明白的东西。到目前为止,我认为创建连接的唯一方法是在计算机A上侦听一个端口,并从计算机B连接到该端口。但这似乎不是WebRTC的情况。我认为没有一个客户开始倾听港口。不知何故,他们可以在不收听端口和接受连接的情况下创建连接。既不是客户A,也不是客户机B启动作为服务器。

但怎么样?在WebRTC服务器上交换哪些数据,即客户可以使用彼此连接?

感谢您的解释:)

编辑

我找到了这个< / a>文章。它与WebRTC无关,但我认为它会回答我的一部分问题。我不确定,艰难。如果有人可以向我解释并给我一些额外的链接,它仍然会很酷。

有帮助吗?

解决方案

WebRTC向客户端JS应用程序提供SDP优惠以将其发送到另一个设备(无论是JS应用程序),它使用它来生成SDP答案。

诀窍是SDP包括冰候选(有效地尝试在此IP地址和此端口与我交谈“)。冰致力于打开防火墙的开放端口;虽然如果两侧是对称的NAT,则通常可以使用,并且可以使用替代候选者(在旋转服务器上)。

一旦他们直接说话(或通过有效的转弯,它有效地是分组镜像),它们可以打开DTL连接并使用它来键键键入SRTP-DTLS媒体流,并在DTL上发送数据闹剧。

编辑: 首字母缩略词这里: http://blog.1click.io/10-jargons-abbreviastions-for- WebRTC-FANS / 其余的,还有谷歌。其中大多数由IETF( http://ietf.org/ )定义

编辑2: Firefox和Chrome(和规格)已经向冰候选使用“涓流”,因此冰候选通常在旁边添加到Peerconnection并独立于初始SDP交换(尽管您可以等到最初的候选人在发送报价之前准备好,并将它们捆绑在一起)。 请参阅 https://webrtcglossary.com/trickle -ice/ https://datatracker.ietf.org/doc/draft - itef-ice-trickle/

其他提示

可以在本书中找到非常好的解释 http:/ /chimera.labs.Oreilly.com/books/1230000000545/Ch03.html#stun_turn_ice 这提供了WebRTC如何使用冰技术的基础。

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

现在,应用程序发现其公共IP和端口元组,可以通过SDP发送到其他对等体。 (请注意,SDP通过外部信令通道,F.I.WWESOCECTER通过Web服务建立)发送)

在此机制到位,每当两个同行都希望通过UDP互相交谈,然后他们可以使用已建立的公共IP和端口元组来交换数据。

不幸的是,在某些情况下,防火墙可能会阻止UDP。要解决此问题,每当stun失败时,我们都可以使用遍历NAT(转动)协议周围的遍历作为回退,这可以通过UDP运行,然后如果所有其他其他原因失败,则可以运行到TCP。

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

  1. 步骤1:信令:两个对等体连接到信令服务器(使用80/443超过80/443,comet,sip等。)和交换信息(关于它们的媒体功能,公共IP:当它们可用时,端口对等。)

  2. 步骤2:发现:连接到LAN或移动网络的设备不知道它们可以访问的公共IP(和端口),以便它们使用STUN / WETS服务器在公共互联网上发现他们的IP:端口对(冰候选)。在该过程中,它们穿过步骤3:

  3. 中使用的NAT /路由器打孔

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

  5. 上面的方案介绍了连接到本地网络的2个设备的过程。这是我写的文章的一部分,它写了与故障排除连接问题做好WebRTC如何工作,做好。

WebRTC如何工作

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

WebRTC

WebRTC(Web实时通信)是一组技术,用于对等体于浏览器之间的对等双工实时通信开发的技术。由于它的名称提到它与Web兼容,它是一个标准在w3c 其中一个WebRTC的重要特征是它即使在NAT地址后面也适用。

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

运行WebBrtc需要更多的是信令服务器。但是,在实现信令服务器方面没有定义的standart。每个实现都会创建自己的风格。将在此部分稍后将提供有关信令服务器的更多信息。

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

SDP(会话描述协议)

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

您可能对彼此之间发送这些SDP字符串的问题。这是发信号服务器发生的地方。

ICE(交互连接建立)

Ice是即使在NAT背后也建立了同伴之间的连接的魔法。让我们再次假设客户端a 客户端b 将得到连接,看看如何使用ICE。

  • 客户端a 通过使用stun服务器查找其本地地址和公共互联网地址,并通过信令服务器向客户端B 发送这些地址。从STUN服务器接收的每个地址都称为 ICE候选

在上面的图像中,有两个服务器。其中一个是令人震惊的,他们中的其他是转向服务器。

stun服务器用于让客户端A 了解其所有地址。让我举个例子,我们的计算机通常在192.168.0.0网络中拥有一个本地地址,并且我们在连接到 www.whatismyip.com ,这个IP地址实际上是我们互联网网关的公共IP地址(调制解调器,路由器等),因此让我们定义stun服务器; STUN服务器让同行了解他们的公共和本地IP地址。 BTW,Google提供免费STUN服务器(stun.l.google.com:19302)。

还有一个服务器,转动服务器,在图像中。在对等体之间无法建立对等连接时,使用转动服务器。转动服务器只需继承对等体之间的数据。

  • 客户端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字符串和冰候选。信令服务器还决定彼此连接的对等体。 WebSocket技术通常用于信令服务器进行通信。

兼容性

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

进一步读取和参考

btw,我是在 ant媒体服务器上的开发人员,它支持可扩展的一对多WebRTC和对等体WebRTC连接

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top