# 信令 ## 信令格式 ``` { "header": { "v": "版本", "id": 请求标识, "sn": "设备标识" "pid": 信令标识, }, "code": "响应编码", "message": "响应描述", "body": { // 信令主体 } } ``` ### 符号解释 ``` -> 单播:定向传播信令 -) 广播:广播信令(排除自己) +) 全员广播:广播信令(包含自己) ``` ## 平台信令(1000~1999) ### 关闭服务信令(1000) #### 消息主体 ``` # 请求 {} # 广播 {} ``` #### 消息流程:终端->服务端+)终端 全员广播[关闭服务信令](#关闭服务信令1000),然后关闭信令服务。 ### 执行命令信令(1001) #### 消息主体 ``` # 请求 { "script": "命令" } # 响应 { "result": "结果" } ``` #### 消息流程:终端->服务端->终端 执行命令同时响应结果 ### 异常信令(1999) #### 消息主体 ``` {} ``` ## 终端信令(2000~2999) ### 终端信息 ### 终端注册信令(2000) #### 消息主体 ``` # 请求 { "username": "信令授权用户", "password": "信令授权密码", "ip": "IP地址", "mac": "MAC地址", "signal": "信号强度", "battery": "电池电量" } # 响应 {} # 广播 { "sn": "终端标识", "ip": "IP地址", "mac": "MAC地址", "signal": "信号强度", "battery": "电池电量" } ``` #### 消息流程:终端->服务端-)终端 终端注册成功以后响应同时[下发配置信令](#下发配置信令2004),并且广播[终端上线信令](#终端上线信令2002)。 ### 终端关闭信令(2001) #### 消息主体 ``` # 请求 {} # 广播 { "sn": "终端标识" } ``` #### 消息流程:终端-)服务端 终端关闭以后广播[终端下线信令](#终端下线信令2003),同时释放所有相关资源(信令通道、媒体通道等等) ### 终端上线信令(2002) #### 消息主体 ``` { "sn": "终端标识" } ``` #### 消息流程:服务端->终端 参考[终端注册信令](#终端注册信令2000) ### 终端下线信令(2003) #### 消息主体 ``` { "sn": "终端标识" } ``` #### 消息流程:服务端->终端 参考[终端关闭信令](#终端关闭信令2001) ### 下发配置信令(2004) #### 消息主体 ``` { "time": "系统时间:yyyyMMddHHmmss", "media": "媒体配置", "webrtc": "WebRTC配置" } ``` #### 消息流程:服务端->终端 参考[终端注册信令](#终端注册信令2000) ### 心跳信令(2005) #### 消息主体 ``` # 请求 { "signal": "信号强度", "battery": "电池电量" } # 响应 {} ``` #### 消息流程:终端->服务端->终端 ### 单播信令(2006) #### 消息主体 ``` # 请求 { "to": "接收终端标识", // 主体信息 } # 转发 { // 主体信息 } ``` #### 消息流程:终端->服务端->终端 终端转发信令到指定的终端 ### 广播信令(2007) #### 消息主体 ``` # 请求 { // 主体信息 } # 广播 { // 主体信息 } ``` #### 消息流程:终端->服务端-)终端 终端广播信令到所有的终端 ### 重启终端信令(2997) #### 消息主体 ``` # 请求 { } ``` #### 消息流程:服务器->终端 重启终端 ### 终端状态信令(2998) #### 消息主体 ``` # 请求 { "sn": "终端标识" } # 响应 { "sn": "终端标识", "ip": "IP地址", "mac": "MAC地址", "signal": "信号强度", "battery": "电池电量" } ``` #### 消息流程:终端->服务端->终端 响应指定终端状态(如果没有指定终端标识默认查询自己) ### 终端列表信令(2999) #### 消息主体 ``` # 请求 {} # 响应 [ { "sn": "终端标识", "ip": "IP地址", "mac": "MAC地址", "signal": "信号强度", "battery": "电池电量" }, ... ] ``` #### 消息流程:终端->服务端->终端 响应所有终端状态列表 ## 直播信令(3000~3999) ### 开启直播信令(3000) ### 关闭直播信令(3001) ### 直播广播信令(3002) ### 直播终端列表信令(3997) ### 直播状态信令(3998) ### 直播列表信令(3999) ## 会议信令(4000~4999) ### 创建会议信令(4000) #### 消息主体 ``` {} ---- { "id": "会议标识" } ``` #### 消息流程:终端->服务端+)终端 ### 关闭会议信令(4001) 释放资源、广播广播 ### 进入会议信令(4002) #### 消息主体 ``` # 请求 { "id": "会议标识" } # 广播 { "id": "会议标识", "sn": "终端标识" } ``` #### 消息流程:终端->服务端-)终端 终端进入会议,广播通知其他终端。 ### 离开会议信令(4003) 广播 ### 邀请终端信令(4004) 邀请终端进入会议,终端确认进入发送进入会议信令。 ### 踢出终端信令(4005) 广播 ### 会议广播信令(4006) ### 会议终端列表信令(4997) ### 会议状态信令(4998) ### 会议列表信令(4999) ## 媒体信令(5000~5999) ### 发布信令(5000) 控制终端推流(服务端拉流) ### 取消发布指令(5001) 控制终端暂停推流(服务端取消拉流) ### 订阅指令(5002) 订阅终端媒体流(终端拉流) ### 取消订阅指令(5003) 取消订阅终端媒体流(终端取消拉流) ### 暂停信令(5004) 终端->服务端 暂停发布、订阅(不关媒体流通道) MCU/SFU模式有效 ### 恢复信令(5005) 终端->服务端 暂停发布、订阅(不关媒体流通道) MCU/SFU模式有效 ### 开启录像信令(5006) ### 停止录像信令(5007) ### 配置媒体信令(5008) 配置订阅媒体:码率、帧率、分辨率等等 ### Offer信令(5997) Offer ### Answer信令(5998) Answer ### 候选信令(5999) IceCandidate ## 测试 ``` 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":{}}'); ```