相关简介
信令:驱动系统运转。控制各个模块的前后调用关系;业务不同,逻辑不同,信令也会千差万别
要实现
一对一通信
,驱动系统的核心就是信令。信令控制着系统各个模块之间的前后调用关系
,比如当收到用户成功加入房间后,系统需要立即将RTCPeerConnention
对象创建好,以便向STUN/TURN服务器
请求其
外网的IP地址和端口;而当收到另一个用户加入房间的消息时,系统需要将自己的外网IP地址和端口交换给对方
,从而建立起Socket连接;
WebRTC使用信令服务器交换
媒体信息
和网络候选者
信息,信令服务器承担着消息传输和交换的工作,WebRTC规定了信令服务器的实现方式:任何能够进行网络信息交换的技术都可以用来实现信令服务器
,如HTTP、XMPP及WebSocket
等
信令服务器主要作用
- 实现
业务层
管理* 如用户创建房间,加入房间,退出房间等* 确定何时初始化、关闭和修改通话会议,也可以进行错误报告 - 让通信双方彼此
交换网络
信息* 最常见的是交换通信双方的IP地址和端口 - ICE Candidate
* 两个WebRTC之间会尽可能选择P2P
进行传输,同一个局域网
内直接通过P2P进行传输,不同局域网
内需要使用P2P穿越
后进行数据传输,P2P穿越成功后直接传输,失败后进行中转
等 - 后续的候选人中进行解说 - 通信双方交换
媒体信息
* 媒体信息用SDP
来表示,这个SDP可以简单理解为:媒体类型的编码器是什么、是否支持该媒体类型和对应的编码器、编码方式是什么等
最简单的信令系统的分类
- 客户端发送给服务器的信令
- 服务端发送给客户端的信令
常见的信令系统
- 客户端* 用户加入房间 - join* 用户离开房间 - leave* 端到端的命令 - message
- 服务端* 用户已加入 - joined* 用户已离开 - left* 其他用户已加入 - other_joined* 其他用户已离开 - bye* 房间已满 - full
信令传输协议的选择
一般选择
TCP
或者基于TCP
的HTTP/HTTPS、WS/WSS等协议作为信令服务器的传输协议;
- 原因一:TCP是
可靠的传输协议
,可以保证传输的数据可靠、有序到达 - 原因二:TCP上传输数据是
流式的
,不必担心传输的数据过大导致的拆包传输
的问题
信令服务器的常见特点
- 可以同时支撑
多个WebRTC通话环境
,即多个房间
,且房间之间互不影响 - 每个房间的参与人数不受限制
- 实时性好,不可有明显的延时
- 支持可靠的信令传输,发送者要知道明确的发送反馈,即使发送失败了
- 性能好、可拓展性要好,要兼顾后续的拓展功能如传输应用数据等
信令时序
在发送信令前,各端需要先与信令服务器SigServer建立连接,
建立连接
后终端会向信令服务器发送join消息
,服务器收到该消息后会返回joined消息
(信令服务器在收到该信令后,会先将该用户加入服务器管理的房间,然后向客户端返回joined信令),标识已加入房间,同理其他用户加入也是类似只是会收到otherjoin
的消息;> 房间:房间服务器将多端聚集到一起管理;