WebRTC ——实现视频会议的协议

自 COVID 时代开始以来,远程工作变得越来越流行已经不是什么秘密了,尽管疫苗已经出现,但许多公司和团队已经完全接受了在线工作的想法,并且不打算放手。因此,对在线协​​作工具的需求不断增加;尤其是视频会议解决方案。刚开始时,我对视频会议知之甚少。在彻底调查此事之后,我遇到了WebRTC 一种负责实时通信的协议(因此是RTC)。

WebRTC不一定要用于视频会议,但绝对是在考虑到这一点而构建的。按照今天的标准,不到一秒的延迟被认为是实时的。WebRTC 是当今最快的解决方案,最重要的是,它是开源的,这使得该技术免费。任何其他解决方案都在延迟方面落后,但请记住,它们的构建目的不是为我们提供实时性能,而是用于不同的目的。下面是一个延迟比较图,这样你就可以了解 WebRTC 到底有多快:

当我开始接触 WebRTC 时,我意识到它在架构上很复杂。总结起来不是像 REST 或 Web 套接字这样的单一方法,而是涉及许多。

WebRTC 概述

WebRTC是旨在支持浏览器之间直接通信的协议。它包含用于标准化过程的一组类和方法,并且自Chrome 23开始可用:

除了标准化通信流程外,浏览器还使您可以轻松,安全地访问硬件,这是对WebRTC的补充。您可以流式传输屏幕,麦克风和相机;这通常需要您安装外部插件或二进制文件,并且可能会变得非常复杂,因为每个操作系统和硬件都需要不同(且复杂!)的配置。

Peer connections(对等连接)

WebRTC基于p2p(点对点);呼叫的参与者负责将数据从一端传输到另一端,而无需依赖中间人。如果一个参与者由于任何原因断开连接,则其他参与者将继续发送数据,其他参与者将继续发送数据。与传统通信不同,传统通信中如果与服务器的连接丢失,数据将不再流式传输。

因此我们对话时候必须要实例化peer对象代表这每个对方考虑有3个对方和一个自己要实例化

3个对方其中每个实例都连接到不同的通道上如下:

                                             

Signaling Server (信令服务)

随着通话的进行,我将必须跟踪加入或退出对话的人员,并分别创建或处置连接。为了监听跟踪这些事件我们要有信令服务器来控制。

信令服务器专用于在两个或两个以上想要通信的对等点之间建立初始连接。建立连接后,您将不需要使用它进行持续的通信。但是如果您想向其他事件发出信号你可以使用它。

信令服务器可以通过多种方式实现,您所需要的只是对等体A和对等体B之间的桥梁。

一般都是通过WebSocket来进行操作场景因为通信可以随时自发发起:

SDP

一旦我们知道有人加入了对话,我们就需要交换有关彼此系统的信息以建立连接。此信息基于称为SDP(会话描述协议)的协议,它包括有关其所属对等方的详细信息,例如它使用什么代理、它支持什么硬件、它想要交换什么类型的媒体等。 SDP config 是一个简单的键值对象:

SDP的配置也可以表示Anwer 也可以作为Offer ,每次连接时候都要先发送一个offer 作为回报

我们要收到一个anwer,提供offer/anwer是双向的但是,重要的是要跟踪有问题的SDP配置代表什么端:我们还是另一端。初始化对等实例时,我们需要两件事:本地描述和远程描述。本地描述,代表我们,远程描述,代表另一端。我们可以一起成功建立连接:

ICE候选人

一个对等连接可能有很多通信传输,而不仅仅是一个。某人可能有多个私有IP /端口,或多个公共IP /端口,或各种协议,或一个或多个反向代理,等等。一旦我们创建了SDP WebRTC就会尝试查找每个到浏览器的可能通信传输,称为ICE候选(交互式连接建立):

CE候选对象只是应该添加到SDP中的另一个键值对。我们可以等待 WebRTC 找到所有可能的候选并发送完整的 SDP,也可以将每个检测到的 ICE 候选与信令服务器一起发送并逐步扩展 SDP;两个选项都有效。WebRTC 应该知道如何在 ICE 之间交替并选择最可行的选项。

默认情况下,WebRTC将优先基于UDP(用户数据报协议)的ICE 。与TCP(传输控制协议,HTTP所使用的传统协议)不同,在TCP中,除非先发送100%的数据包,否则不传输数据包,而UDP将保持数据流的传输,而不管先前数据包的状态如何,从而使通信速度更快。

NAT穿越 

大多数机器没有直接连接到全球网络,它们很可能通过NAT层(网络地址转换)。通过路由器传输时,您机器的专用IP /端口实际上将转换为其他公用IP /端口。

由于WebRTC努力在两方之间建立尽可能直接的联系,因此任何一方都通过代理进行的事实在过程中会带来一些复杂性,因此我们应该意识到这一点。让我们看看不同的 NAT 配置,看看我们如何使用它们建立直接连接

STUN

如果我们的计算机连接到NAT层,则需要我们的公共IP /端口来创建ICE候选对象。因此,WebRTC 使我们能够在初始化 WebRTC 连接时指定STUN服务器 URL:

TURN

其他2个受限NAT与对等体的连接方式与完整NAT类似,但是它们有一个小的限制。他们需要知道他们的公共 IP/端口,他们还需要确保传入请求的目标 IP/端口存在于 NAT 表中。与完全NAT基本不同,在完整NAT中,路由器基本上信任所有人,而受限制的仅信任那些试图与其建立连接的人。

为了克服这个问题,我们使用了一种称为turn(打洞)的技术

作者:tiantian_cool

%s 个评论

要回复文章请先登录注册