WebRTC | 信令服务器

目录

一、相关术语

1.NAT

2.STUN服务器

[3. TURN服务器](#3. TURN服务器)

4.打洞

二、WebRTC一对一架构

三、信令

[1. 信令传输协议的选择](#1. 信令传输协议的选择)

[2. 信令服务器的实现方案](#2. 信令服务器的实现方案)

[3. 信令服务器的业务逻辑](#3. 信令服务器的业务逻辑)


信令服务器的作用主要有两个:一是实现业务层的管理,如用户创建房间,加入房间,退出房间等;二是让通信的双方彼此交换信息,其中最常见的是交换通信双方的外网IP地址和端口。

一、相关术语

1.NAT

Network Address Translation,网络地址转换。"NAT环境"通常指网络地址转换(Network Address Translation)环境。在计算机网络中,NAT是一种网络协议,用于将一个或多个内部网络的IP地址转换为另一个或多个外部网络的IP地址,以实现网络通信。NAT环境常用于家庭网络、企业网络和互联网服务提供商(ISP)等场景中,以提供更好的网络连接和资源共享。通过NAT,多个设备可以共享同一个公共IP地址,从而节省IP地址资源,并增强网络安全性。

2.STUN服务器

Session Traversal Utilities for NAT,NAT会话穿越实用工具协议。STUN服务器用于帮助设备发现自己在NAT后面的公共IP地址和端口。当设备处于NAT环境中时,它的私有IP地址无法直接被其他设备访问。STUN服务器充当一个中间人,设备可以向STUN服务器发送请求,以获取自己的公共IP地址和端口。设备可以使用这些信息来建立直接的点对点连接,从而避免通过中继服务器进行通信。

3. TURN服务器

Traversal Using Relay NAT,通过中继方式穿越NAT。TURN服务器用于在NAT环境下进行中继通信。当设备无法直接建立点对点连接时,它们可以通过TURN服务器进行通信。设备将数据发送到TURN服务器,然后由服务器转发给目标设备。TURN服务器在中继通信中起到一个中间人的作用,帮助设备进行数据的中转。TURN服务器通常会分配一个临时的公共IP地址和端口给设备,以便进行通信。中继通信会增加一些延迟和带宽消耗,因此在实时通信中,尽量避免使用中继,而是优先选择直接的点对点连接。

4.打洞

打洞通常是指在NAT环境下,通过一些技术手段实现内网设备与外网设备之间的直接通信。

NAT(网络地址转换)的类型中,打洞是指在内网和外网之间建立直接通信的一种技术。打洞可以是内网对外网访问时打洞,也可以是内网中的设备互相打洞。打洞通常用于解决NAT环境下的双向通信问题,而外网对内网的访问是单向的,只需要将请求转发到内网设备即可,不需要打洞操作。(即:在外网对内网进行访问时,并不涉及打洞的概念。)

二、WebRTC一对一架构

WebRTC由四部分组成,分别为两个WebRTC终端、一个信令服务器、一台中继服务器(STUN/TURN)和两个NAT,这是最经典的一对一通信架构。其中,信令服务器与中继服务器都在NAT外,也就是属于外网。而两个WebRTC终端在NAT内,属于内网。

两个WebRTC终端通信步骤:

  1. 首先两个终端在通信之前,都要先与信令服务器连接,即步骤1。与服务端建立好连接后,通信的双方就可以通过信令服务器彼此交换必要的信息了,比如告诉对方自己的外网IP地址和端口是多少等。
  2. 不过在交换信息之前,WebRTC终端还要与STUN/TURN服务器建立连接。这样做的目的是通过STUN/TURN服务器获得各自的外网IP地址和端口,即步骤2。
  3. WebRTC终端拿到自己的外网IP地址和端口后,再通过信令服务器交换给对方。当彼此获得对方地址后,它们就可以尝试NAT穿越,进行P2P连接了,即步骤3。

三、信令

要实现一对一通信,驱动系统运转的核心就是信令,如创建房间、退出房间等都会用到信令。信令控制着系统各模块之间的前后调用关系。比如当收到用户成功加入房间的信令后,系统需要立即将RTCPeerConnection对象创建好,以便向STUN/TURN服务器请求其外网的IP地址和端口;而当收到另一个用户加入房间的消息时,系统需要将自己的外网IP地址和端口交换给对方,从而建立起socket连接,等等。

1. 信令传输协议的选择

我们一般选择TCP或基于TCP的HTTP/HTTPS、WS/WSS等协议作为信令服务器的传输协议。这样做有两点好处:一是不用担心信令丢失,因为TCP是可靠的传输协议,能保证传输的数据可靠、有序到达;二是在TCP上传输的数据是流式的,因此不必担心传输的数据过大导致拆包传输的问题。

注意:WebRTC在信令控制方面采用了可靠的TCP,但是音视频数据传输上,使用了UDP作为传输层协议(传输快、低延时)。

2. 信令服务器的实现方案

方案一:使用C/C++、Java等语言从零开始开发一个信令服务器。这种方案的实现成本非常高,要写很多代码,还要对编写的代码进行大量的测试。使用这种方案,即使开发一个最简单的HTTPS服务器,至少也要花两周以上的时间。

方案二:利用现成的Web服务器做应用开发,如以Apache、Nginx、NodeJS为服务,在其上做应用开发是非常不错的选择。

建议采用第二种方案,它有以下几方面优势:

  • 一般信令系统都需要使用HTTP/HTTPS、WS/WSS等传输协议,而Apache、Ng inx、NodeJS等服务器显然在这方面有天然的优势。
  • 实时通信的信令服务器一般负载都不是特别高。举个例子,假设有10000个房间同时在线,我们可以评估出大部分房间只需要处理几个信令,那么总的消息量也不过是几万个,这个量级对于Nginx和NodeJS来说,单台服务器就可以应付了。
  • 通过Nginx或NodeJS实现信令服务器特别简单,只要几行代码就可以实现。
  • 稳定性高。像Apache、Nginx、NodeJS这类服务器都经过了长时间的验证,所以它们的稳定性是可以得到保障的。

在第二种方案中,尤其推荐使用Node.js来实现信令服务器。虽然NodeJS在性能上不如Nginx,但对于我们这种学习项目来说使用它已经足够了,而且它使用起来也特别简单,还有非常好的生态链,很多逻辑关系不需要我们自己写,大大减少了开发信令服务器的工作量。

3. 信令服务器的业务逻辑

当两个用户要进行通信时,他们首先要创建一个房间,成功加入房间之后,双方才能交换必要的信息,如Ofer/Answer、Candidate等。当通信的双方结束通话后,用户需要发送离开房间的消息给信令服务器,此时信令服务器需要将房间内的所有人清除;如果房间里已经没有人了,还需要将空房间销毁掉。

相关推荐
TechVoyager_82468 小时前
多形态输入与12 通道音频:IT6615 这颗 HDMI 发射器的接口宽度
音视频·音频芯片·芯片选型·视频发射
Raymond16888 小时前
AI配音工具长文本合成架构技术解析:全局音色锚定与声学状态跟踪
人工智能·架构·实时互动·视觉检测·音视频·语音识别
海边捡石子10 小时前
从零设计一个通用智能电话平台:FreeSWITCH + ESL + AI 实战架构
人工智能·架构·webrtc
hflmwl814 小时前
Wise Data Recovery找回误删的文档照片音乐和视频
音视频·datarecovery·找回误删的文档照片音乐和视频·找回误删的文档照片音乐视频
技灵AI15 小时前
AI 视频转场提示词怎么写?让前后画面衔接更自然
人工智能·prompt·aigc·音视频
youandyouyou17 小时前
跨区培训的屏幕共享怎么做才稳?同屏同步与弱网优化实践
音视频·网络通信
开开心心就好17 小时前
课堂随机点名工具,绿色版免安装双击即用
java·服务器·前端·ffmpeg·音视频·perl·symfony
美狐美颜SDK开放平台17 小时前
直播APP集成美颜SDK,如何梳理第三方组件的数据权限?
开发语言·人工智能·深度学习·音视频·第三方美颜sdk
l143723326719 小时前
批量视频硬字幕擦除多少钱?影响报价的关键因素全解析
音视频
重生六道19 小时前
B站视频时长统计:一段JS脚本搞定分P/合集总时长(附倍速计算)
开发语言·javascript·音视频