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等。当通信的双方结束通话后,用户需要发送离开房间的消息给信令服务器,此时信令服务器需要将房间内的所有人清除;如果房间里已经没有人了,还需要将空房间销毁掉。

相关推荐
m0_726365833 小时前
Ai漫剧系统 几分钟,让AI 把一篇小说变成了一部漫剧成片:从剧本到视频的全流程系统实现
人工智能·语言模型·ai作画·音视频
非凡ghost7 小时前
可拓浏览器:给手机浏览器装上“外挂“!2W+拓展+AI搜索,玩出无限可能!
windows·智能手机·音视频·firefox
美狐美颜SDK开放平台8 小时前
多场景美颜SDK解决方案:直播APP(iOS/安卓)开发接入详解
android·人工智能·ios·音视频·美颜sdk·第三方美颜sdk·短视频美颜sdk
三十_9 小时前
WebRTC 远端画面无法显示:ICE 与 SDP 时序问题深度解析与解决方案
webrtc
ai产品老杨10 小时前
深度解析:基于国产化异构计算的 AI 视频管理平台架构——从 GB28181 接入到 NPU 边缘推流的解耦实践
人工智能·架构·音视频
watson_pillow10 小时前
音视频相关基础知识储备入门-字幕
音视频
程序员JerrySUN11 小时前
Jetson边缘嵌入式实战课程第二讲:JetPack 和 SDK Manager 是什么
c语言·开发语言·网络·udp·音视频
weixin_66813 小时前
NVIDIA VSSVideo Search and Summarization视频搜索与摘要蓝图详尽使用说明与技术报告版本
人工智能·音视频
jiayong2314 小时前
国内外视频/图像大模型与智能体工具平台竞品对比
ai·音视频·agent
视频技术分享15 小时前
技术赋能生态革新:音视频产业开启千亿增长新周期 视频会议成核心增长亮点
音视频