当前位置: 移动技术网 > IT编程>开发语言>.net > WebRTC信令服务器实现 八、第二节 WebRTC信令服务器原理

WebRTC信令服务器实现 八、第二节 WebRTC信令服务器原理

2020年07月13日  | 移动技术网IT编程  | 我要评论

WebRTC是没有将信令服务纳入到整个的规范中,更多的是规范了客户端这边的所有的过程,那为什么没有将信令服务器放到规范中,各个公司它的业务模型都是不一样的,很难将每个公司的信令都统一订成一套规范。所有与其这个不如让他们各自自己去定义。

只有是我必须的这些信息的交换可以实现,其他的业务你可以自己去定义,这个比较灵活,各个公司也比较容易接受这套方案。

其实这个对整个WebRTC的推广其实是有好处的。

下面我看看 信令服务器的作用。

如果我们没有信令服务器,WebRTC之间是肯定不能通信的,这个大家是一定要清楚的,我们来看上图,这张图就表达了信令服务器在整个通话过程中它起到的作用。

首先我们先看下面蓝色的发起端和接受端,这个发起端和接受端如果想传递媒体数据的时候 ,它有两个信息是必须要经过信令服务器交换之后才能进行通信的,这个两个信息。第一个就是媒体信息,它是通过SDP来表述。可以简单的理解,我们双方要通信,你的编解码的器是什么,比如说我现在可以进行视频传输,我的编码是H264,那么对方也要告诉我你的编解码器能不能支持H264的码,比如我们给你传过去H264的码,你说只能解H265的,那肯定双方之间就没法通信了。所有这个信息是必须要传递的。

此外你是否支持视频是否支持音频,你们的编码方式是什么,这些信息是通过SDP给它描述出来,通过信令服务器,首先客户端要将这个SDP信息发送到服务端 ,服务端再中转,中转到另一端,大家已经知道了为什么要通过信令服务器进行中转,因为这个时候相互之间还没有进行连接,相互之间还不知道对方的存在。那这是第一个要传递的信息,第二个要传递的信息是网络信息,大家知道WebRTC最终之间尽可能通过P2P进行传输,那在他们连接之前,他们如何发现对方呢?也是通过信令服务器,首先你要将所有网络相关的信息传到服务器,那么这个服务器在帮你交换到对端,那对端拿到你的信息之后,才知道我们是在同一个局域网内,那就直接通过P2P就传输好了。那如果不在同一个网络内,那我要通过P2P穿越 ,看看之间能不能打通,这里面又分了好几种类型,对于对称是肯定打通不了,对于非对称的那就可以尝试打通,打通之后,他们之间才能进行通信。如果打通不了,还要通过服务端进行中转。所以这个信令服务器最基础的要传输媒体相关的信息进行交换,第二个是网络相关的信息要进行交换,再有第三个就是你的具体的业务,加入房间,离开房间,禁言,将对方禁止发言,或者给对方权限让他发言等等有很多信令,可以根据自己的业务模型去设置。

这个就是信令服务器在整个WebRTC在整个WebRTC通讯中的作用,所以这是WebRTC中必须要有的信令服务器。

为什么要使用socket.io

我们这里要实现一个信令服务器,我们这里使用的是socket.io,主要是因为它有几个优点

socket.io是WebSocket超集,它本身就有WebSocket功能,我们都知道在整个音视频传输的时候,一般有两种协议,TCP和UDP,底层协议里面UDP主要用于流媒体的传输,比如音频、视频、文本可以通过 UDP进行传输,UDP的问题在于它是不可靠的传输,也就是说我是可以丢包的,对于音频视频来说这是没有任何问题的。当我网络不好的时候,我丢了音频数据,它顶多就卡一下,它还能继续运行,不太影响我们正常的通话。

但是如果对于信令来说就不一样了,信令一般就使用TCP,叫做可靠性连接,我的包是要必须保证到达的,否则我就断开连接了,因为网络就不能支持我的整个业务运转。所以它要么就必须达到,我们就甭玩了。就这两种状况,所以我们的信令在传输的过程中是必须要到达的。

如果我们的媒体信息和网络信息不能交换的话,那肯定就是不能工作的,所以对于 信令来说我们一般使用TCP,websocket底层使用的就是TCP,所以socket.io底层使用的也是 TCP。

 

socket.io有房间的概念,socket.io两个人或者多个人进行通讯的时候,首先我要进入到 一个房间里,这是很自然的一个逻辑,我们 要上课 或者开会,首先大家要聚集在一起,有一个虚拟的逻辑的概念,就是大家要在一个房间里,大家在这个房间大家就可以相互通信了。

我们可以看webrtc官方提供的例子,实际上他有三种服务器,分别是房间服务器,信令服务器,流媒体中转服务器,我们这里用了socket.io我们这里就不用单独写一个房间服务器了,也就是说房间服务器和信令服务器是在同一个服务器上。

 

socket.io跨平台、跨终端、跨语言,这样就方便我们在各个端上去实现信令的各个端,去与我们的服务端进行连接,所以特别方便,这就是使用socket来实现socket.io来实现信令服务器的根本原因。

 

socket.io工作原理

其实非常简单,socket.io其他它是一个js库,它是基于node.js 的Server的,这个和我们的技术选项有关,我们之前选择web服务器的时候选择的是nodeJS,在这个nodeJS的服务器上 我们在增加这个socket.io,那么我们整个服务器端就完成了,非常简单,但是如果我们单独写一套的话,那要花很长很长时间,在我们现有的nodeJS  web服务器上我们只有增加了socket.io,简简单单的修改几行代码,我们就实现了一个服务器端,其实光有服务器它还是不能工作的,所以还有客户端。

在网页 也好,在安卓或者IOS也好,在任何终端都可以引入socket.io这个client lib客户端的库,那么客户端这个库我们就可以连接到NodeJS 的socket.io的这个服务上,那么这样就建立了连接,建立了连接之后,我们才可以创建房间或者加入到房间里,那么在整个房间内的用户就可以相互通信了,这块的逻辑非常的简单。

这个socket.io它是可以横向扩展的,还可以级联部署很多个socket.io服务,还可以串到一起,这时当我去发送信息的时候,它是可以在各个socket.io上传输的,比如有两个用户,第一个用户在北京那个节点上,有一个 用户是上海这个节点上,没关系在它上层也就是它服务端可以串在一起的,那么北京的用户首先将你的信息发送到北京的服务端,北京的服务端通过整个网络曾然后传到上海的节点,上海的节点最终找到上海的用户,最后发送出去,这样他们之间就实现了通信。

当然这是一个非常宏大的场景了,我们真实的部署中可以这样设置。

以上就是WebRTC信令服务器的基本内容。

 

本文地址:https://blog.csdn.net/xyphf/article/details/107289846

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网