# 信令 ## 信令格式 ``` { "header": { "v": "版本", "id": 请求标识, "sn": "设备标识" "signal": "信令标识", }, "code": "响应编码", "message": "响应描述", "body": { // 信令主体 } } ``` ### 术语解释 ``` 请求:终端->信令服务 || 信令服务->媒体服务 响应:信令服务->终端 || 服务媒体->信令服务 广播:信令服务-)终端 || 信令服务+)终端 ``` ### 符号解释 ``` -[消息类型]> 请求(单播):定向请求(单播)信令 -[消息类型]) 全员广播:对所有的终端广播信令(排除自己) +[消息类型]) 全员广播:对所有的终端广播信令(包含自己) ``` > 注意:没有消息类型表示请求类型 ## 终端信令(2000~2999) ### 终端信息 ### 终端注册信令(client::register) 终端注册成功响应以后[下发配置信令](#下发配置信令2004)同时广播[终端上线信令](#终端上线信令2002)。 ``` # 请求主体 { "username": "信令用户", "password": "信令密码", "ip": "IP地址", "mac": "MAC地址", "signal": "信号强度", "battery": "电池电量", "mediasoup": "媒体服务名称" } # 响应主体 { } # 消息流程:终端->服务端->终端 # 广播主体 { "sn": "终端标识", "ip": "IP地址", "mac": "MAC地址", "signal": "信号强度", "battery": "电池电量", "mediasoup": "媒体服务名称" } # 消息流程:终端->服务端-)终端 ``` ### 终端关闭信令(client::close) 终端关闭以后广播[终端下线信令](#终端下线信令2003),同时释放所有相关资源(信令通道、媒体通道等等) ``` # 请求主体 { } # 响应主体 { "sn": "终端标识" } # 消息流程:终端->服务端 ``` ### 终端上线信令(client::online) ``` # 响应主体 { "sn": "终端标识" } # 消息流程:服务端-)终端 ``` 参考[终端注册信令](#终端注册信令2000) ### 终端下线信令(client::offline) ``` # 响应主体 { "sn": "终端标识" } # 消息流程:服务端-)终端 ``` 参考[终端关闭信令](#终端关闭信令2001) ### 下发配置信令(client::config) 服务端收到[终端注册信令](#终端注册信令2000)后下发配置 ``` # 响应主体 { "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":{}}'); ```