Files
taoyao/taoyao-signal-server/taoyao-signal
acgist 50f80bee2d [*]
2023-02-08 21:31:09 +08:00
..
[*]
2023-02-08 21:31:09 +08:00
[*]
2023-02-08 21:31:09 +08:00
[*]
2023-02-08 21:31:09 +08:00

信令

信令格式

{
	"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":{}}');