十一、信令服务器原理

十一、信令服务器原理,第1张

没有信令服务器,各个WebRTC之间是没办法通信的。

传递媒体数据有两个信息,必须经过信令服务器进行交换

通过SDP来表示,如编解码器是什么?是否支持音频视频?编码方式是什么?等

这些信息是通过SDP协议描述出来,通过信令服务器中转的

两个WebRTC客户端会尽可能选择P2P进行连接,那么进行连接前是如何发现对方的?就是通过信令服务器。

首先将你所有网络相关信息传到信令服务器,服务器帮你交换到对端,对端拿到你的信息后,

若在同一局域网内,直接通过P2P传输;若不在,首先进行P2P穿越,看是否能打通,打通则传输,打不通则中转等。

还有一点也需要信令服务器进行传输,比如加入房间,离开房间,禁言等功能

在传输时,一般有两种协议 TCP和 UDP

底层协议使用 UDP主要用于流媒体传输(音频视频)还有文本,文字聊天等,但 UDP是不可靠传输,是可以丢包的,当然音频视频是可以丢包的,丢失一帧只会卡顿下,还可以继续工作。

但信令服务器不能丢失数据,所有的包必须保证到达,否则断开连接,所以信令服务器一般使用TCP可靠性传输。

websocket底层使用的就是 TCP协议, socket.io 使用的也是TCP

在websocket官方中,是有三个服务器的,ROOM服务器(提供用户进出房间服务)、信令服务器、流媒体(中转)服务器

选用socket.io 即不用单独写ROOM服务器,这里ROOM和信令是同一个服务器

socket.io是一个基于Nodejs的库,在现有的Node Server上增加个socket.io即可

在任何终端都可以引入socket.io客户端的库,通过客户端的库就可以连接到 Nodejs中 socket.io服务器上

这样就可以建立连接,然后就可以创建,加入房间,这样房间内的人就可以通信了

多个 socke.io可以串行通信。

在WebRTC简介中提到信令服务器用于向中端传输数据,信令服务器是实现两个webRTC中端通信的重要角色。今天就来实现一下信令服务器。

作为前端开发对于后端的东西不是很熟悉,只能使用现成的一些服务器软件和nodejs来搭建信令服务器。

业务逻辑

当两个用户要进行通信时,他们首先要创建一个房间,成功加入房间之后,双方才能交换必要的信息。

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

这样的逻辑socket.io已经帮我们实现了,我们只需要使用就行,不需要自己重新开发。

因此,我们使用nodejs+express+socket.io实现信令服务器。

创建服务器

const http = require('http')//引入http库

const express = require('express')//引入express库

//创建HTTP服务,并侦听8980端口

const app = express()

const http_server = http.createServer(app)

http_server.listen(8080, '0.0.0.0')

1

2

3

4

5

6

7

1

2

3

4

5

6

7

首先,通过express创建一个Web应用;之后调用HTTP库的createServer()方法创建HTTP对象,即http_server;最后调用http_server对象的listen()方法侦听8080端口。通过上面的步骤就实现了一个HTTP服务。

注册socket.io的回调函数

io.sockets.on('connection', (socket) =>{

//收到message时,进行转发

socket.on('message', (message) =>{

//给另一端转发消息

socket.to(room).emit('message', message)

})

//收到 join 消息

socket.on('join', (room) =>{

var o = io.sockets.adapter.rooms[room]

//得到房

WebRTC 的服务器大体分为信令服务器和媒体服务器

WebRTC 信令服务器是主要功能是为 WebRTC 通讯搭建一个了解彼此能力的通道, 交换信息, 同步改动.

而媒体服务器就是用来交换媒体,包括对媒体数据的加解密,编解码,带宽和速率控制等功能

不同的 RTP Toplogies 对服务器有不同的要求

WebRTC 或者说多媒体通信一般有如下的几种拓扑结构:

如果是两个人之间的端到端 (P2P) 的通信, 信令服务器的功能很简单

而由于是点对点的通信,媒体服务器也就不需要了。

如果是 SFU(Selective Forward Unit), 那么它的信令服务器除了上述的 SDP 媒体参数协商, ICE 连接地址交换,还有参加 RTP 会话的参加者信息的同步。

多个人之间的会议系统, 信令控制会麻烦很多,除了上述两个基本功能之外, 还要有

在 RFC4575 中有这样的定义

Multiple Control Unit 多点控制单元相比 SFU, 它有着对于媒体流的 Mix 和 translate 功能,可以很好地适配传统的通信设备,在实际应用中,一般我们会以 SFU 为主, MCU 为辅,共同形成一个服务器集群。

在 WebRTC 服务器上,我们一般会维护如下的领域对象

领域对象的具体内容从略,一般有如下的 Command 或 Event

应用层的事件大约可以分为 5 类

具体的有

在一个视频会议中,大家都在向会议室中发布自己的音视频流,也订阅他人的音视频媒体流,所以服务器,特别是 SFU 需要维护这样一个 pub-sub 发布者和订阅者之间的关系


欢迎分享,转载请注明来源:夏雨云

原文地址:https://www.xiayuyun.com/zonghe/431564.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-27
下一篇2023-05-27

发表评论

登录后才能评论

评论列表(0条)

    保存