信令
信令格式
{
"header": {
"v": "版本",
"id": 请求标识,
"sn": "设备标识"
"signal": "信令标识",
},
"code": "响应编码",
"message": "响应描述",
"body": {
// 信令主体
}
}
术语解释
请求:终端->信令服务 || 信令服务->媒体服务
响应:信令服务->终端 || 服务媒体->信令服务
广播:信令服务-)终端 || 信令服务+)终端
符号解释
-[消息类型]> 请求(单播):定向请求(单播)信令
-[消息类型]) 全员广播:对所有的终端广播信令(排除自己)
+[消息类型]) 全员广播:对所有的终端广播信令(包含自己)
注意:没有消息类型表示请求类型
终端信令(2000~2999)
终端信息
终端注册信令(client::register)
# 请求主体
{
"username": "信令用户",
"password": "信令密码",
"ip": "IP地址",
"mac": "MAC地址",
"signal": "信号强度",
"battery": "电池电量",
"mediasoup": "媒体服务名称"
}
# 响应主体
{
}
# 消息流程:终端->服务端->终端
# 广播主体
{
"sn": "终端标识",
"ip": "IP地址",
"mac": "MAC地址",
"signal": "信号强度",
"battery": "电池电量",
"mediasoup": "媒体服务名称"
}
# 消息流程:终端->服务端-)终端
终端关闭信令(client::close)
终端关闭以后广播终端下线信令,同时释放所有相关资源(信令通道、媒体通道等等)
# 请求主体
{
}
# 响应主体
{
"sn": "终端标识"
}
# 消息流程:终端->服务端
终端上线信令(client::online)
# 响应主体
{
"sn": "终端标识"
}
# 消息流程:服务端-)终端
参考终端注册信令
终端下线信令(client::offline)
# 响应主体
{
"sn": "终端标识"
}
# 消息流程:服务端-)终端
参考终端关闭信令
下发配置信令(client::config)
服务端收到终端注册信令后下发配置
# 响应主体
{
"time": "系统时间:yyyyMMddHHmmss",
"media": "媒体配置",
"webrtc": "WebRTC配置"
}
# 消息流程:服务端->终端
### 心跳信令(client::heartbeat)
通过心跳维护连接,实时同步终端信息:信号、电量等等
请求主体
{ "signal": "信号强度", "battery": "电池电量" }
消息流程:终端->服务端
### 单播信令(client::unicast)
请求主体
{ "to": "接收终端标识", // 主体信息 }
响应主体
{ // 主体信息 }
消息流程:终端->服务端->终端
终端转发信令到指定的终端
### 广播信令(client::broadcast)
请求主体
{ // 主体信息 }
响应主体
{ // 主体信息 }
消息流程:终端->服务端-)终端
终端广播信令到所有的终端
### 重启终端信令(client::reboot)
响应主体
{ }
消息流程:服务器->终端
重启终端
### 终端状态信令(client::status)
请求主体
{ "sn": "终端标识" }
响应主体
{ "sn": "终端标识", "ip": "IP地址", "mac": "MAC地址", "signal": "信号强度", "battery": "电池电量", "mediasoup": "媒体服务名称" }
消息流程:终端->服务端->终端
响应指定终端状态(如果没有指定终端标识默认查询自己)
### 终端列表信令(client::list)
#### 消息主体
请求主体
{ }
响应主体
[ { "sn": "终端标识", "ip": "IP地址", "mac": "MAC地址", "signal": "信号强度", "battery": "电池电量", "mediasoup": "媒体服务名称" }, ... ]
消息流程:终端->服务端->终端
响应所有终端状态列表
## 媒体信令
### 重启媒体信令(media::reboot)
请求主体:
{ }
响应主体:
{ }
消息流程:终端->信令服务+)终端
### 媒体注册信令(media::register)
请求主体:
{ "username": "媒体用户", "password": "媒体密码" }
响应主体:
{ }
消息流程:信令服务->媒体服务->信令服务
## 平台信令
### 异常信令(platform::error)
通知执行信令时发生的异常
响应主体:
{ }
消息流程:终端->信令服务->终端
### 关闭平台信令(platform::reboot)
请求主体:
{ }
广播主体:
{ }
消息流程:终端->信令服务+)终端
### 执行命令信令(platform::script)
请求主体
{ "script": "命令" }
响应主体
{ "result": "结果" }
消息流程:终端->服务端->终端
### 关闭平台信令(platform::shutdown)
请求主体:
{ }
广播主体:
{ }
消息流程:终端->信令服务+)终端
## 房间信令(4000~4999)
### 创建房间信令(4000)
#### 消息主体
{ "id": "房间标识" }
#### 消息流程:终端->服务端+)终端
### 关闭房间信令(4001)
释放资源、广播广播
### 进入房间信令(4002)
#### 消息主体
请求
{ "id": "房间标识" }
广播
{ "id": "房间标识", "sn": "终端标识" }
#### 消息流程:终端->服务端-)终端
终端进入房间,广播通知其他终端。
### 离开房间信令(4003)
广播
### 邀请终端信令(4004)
邀请终端进入房间,终端确认进入发送进入房间信令。
### 踢出终端信令(4005)
广播
### 房间广播信令(4006)
### 房间终端列表信令(4997)
### 房间状态信令(4998)
### 房间列表信令(4999)
## 系统信令
### 重启系统信令(system::reboot)
请求主体:
{ }
广播主体:
{ }
消息流程:终端->信令服务+)终端
### 关闭系统信令(system::shutdown)
请求主体:
{ }
广播主体:
{ }
消息流程:终端->信令服务+)终端
## 测试
let socket = new WebSocket("wss://localhost:8888/websocket.signal"); socket.send('{"header":{"pid":2000,"v":"1.0.0","id":"1","sn":"taoyao"},"body":{"username":"taoyao","password":"taoyao"}}'); socket.send('{"header":{"pid":1000,"v":"1.0.0","id":"1","sn":"taoyao"},"body":{}}');