[+] 下发配置信令
This commit is contained in:
@@ -22,7 +22,7 @@
|
||||
|
||||
### 关闭服务信令(1000)
|
||||
|
||||
关闭信令服务
|
||||
终端->服务端:关闭信令服务
|
||||
|
||||
```
|
||||
{}
|
||||
@@ -30,7 +30,7 @@
|
||||
|
||||
### 执行命令信令(1001)
|
||||
|
||||
执行系统命令
|
||||
终端->服务端:执行系统命令
|
||||
|
||||
```
|
||||
{
|
||||
@@ -40,6 +40,8 @@
|
||||
|
||||
### 异常信令(1999)
|
||||
|
||||
服务端->终端:提示异常信息
|
||||
|
||||
```
|
||||
{}
|
||||
```
|
||||
@@ -48,7 +50,7 @@
|
||||
|
||||
### 注册信令(2000)
|
||||
|
||||
终端注册:响应、广播上线通知
|
||||
终端->服务端:注册成功后服务端响应,同时下发配置信息,广播终端上线事件。
|
||||
|
||||
```
|
||||
{
|
||||
@@ -63,7 +65,7 @@
|
||||
|
||||
### 关闭信令(2001)
|
||||
|
||||
关闭终端(注销):广播下线通知、释放所有连接
|
||||
终端->服务端:广播终端下线事件,同时释放所有资源(信令通道、媒体通道等等)
|
||||
|
||||
```
|
||||
{}
|
||||
@@ -71,7 +73,7 @@
|
||||
|
||||
### 上线信令(2002)
|
||||
|
||||
通知终端上线
|
||||
服务端->终端:参考[注册信令](#注册信令)
|
||||
|
||||
```
|
||||
{
|
||||
@@ -81,7 +83,7 @@
|
||||
|
||||
### 下线信令(2003)
|
||||
|
||||
通知终端下线
|
||||
服务端->终端:参考[关闭信令](#关闭信令)
|
||||
|
||||
```
|
||||
{
|
||||
@@ -91,6 +93,16 @@
|
||||
|
||||
### 下发配置信令(2004)
|
||||
|
||||
服务端->终端:参考[注册信令](#注册信令)
|
||||
|
||||
```
|
||||
{
|
||||
"time": "系统时间:yyyyMMddHHmmss",
|
||||
"media": "媒体配置",
|
||||
"webrtc": "WebRTC配置"
|
||||
}
|
||||
```
|
||||
|
||||
### 心跳信令(2005)
|
||||
|
||||
心跳:响应
|
||||
@@ -181,11 +193,30 @@
|
||||
|
||||
## 媒体信令(5000~5999)
|
||||
|
||||
|发布|控制终端推流(服务端拉流)|||
|
||||
|取消发布|控制终端暂停推流(服务端取消拉流)|||
|
||||
|订阅|订阅终端媒体流(终端拉流)|||
|
||||
|取消订阅|取消订阅终端媒体流(终端取消拉流)|||
|
||||
|暂停媒体流|暂停终端媒体流分流(不关媒体流通道)|||
|
||||
|恢复媒体流|恢复终端媒体流分流(不关媒体流通道)|||
|
||||
|开启录像||||
|
||||
|关闭录像||||
|
||||
### 发布信令(5000)
|
||||
|
||||
控制终端推流(服务端拉流)
|
||||
|
||||
### 取消发布指令(5001)
|
||||
|
||||
控制终端暂停推流(服务端取消拉流)
|
||||
|
||||
### 订阅指令(5002)
|
||||
|
||||
订阅终端媒体流(终端拉流)
|
||||
|
||||
### 取消订阅指令(5003)
|
||||
|
||||
取消订阅终端媒体流(终端取消拉流)
|
||||
|
||||
### 暂停指令(5004)
|
||||
|
||||
暂停发布、订阅(不关媒体流通道)
|
||||
|
||||
### 恢复指令(5005)
|
||||
|
||||
暂停发布、订阅(不关媒体流通道)
|
||||
|
||||
### 开启录像(5006)
|
||||
|
||||
### 停止录像(5007)
|
||||
|
||||
@@ -1,5 +1,9 @@
|
||||
package com.acgist.taoyao.signal.client;
|
||||
|
||||
import java.time.LocalDateTime;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonIgnore;
|
||||
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
|
||||
@@ -32,5 +36,10 @@ public class ClientSessionStatus {
|
||||
* 电量(0~100)
|
||||
*/
|
||||
private Integer battery = 0;
|
||||
/**
|
||||
* 最后心跳时间
|
||||
*/
|
||||
@JsonIgnore
|
||||
private LocalDateTime lastHeartbeat = LocalDateTime.now();
|
||||
|
||||
}
|
||||
|
||||
@@ -6,11 +6,11 @@ import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.scheduling.annotation.Async;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import com.acgist.taoyao.boot.model.Message;
|
||||
import com.acgist.taoyao.signal.client.ClientSession;
|
||||
import com.acgist.taoyao.signal.client.ClientSessionStatus;
|
||||
import com.acgist.taoyao.signal.event.client.RegisterEvent;
|
||||
import com.acgist.taoyao.signal.listener.ApplicationListenerAdapter;
|
||||
import com.acgist.taoyao.signal.protocol.client.ConfigProtocol;
|
||||
import com.acgist.taoyao.signal.protocol.client.OnlineProtocol;
|
||||
|
||||
/**
|
||||
@@ -21,6 +21,8 @@ import com.acgist.taoyao.signal.protocol.client.OnlineProtocol;
|
||||
@Component
|
||||
public class RegisterListener extends ApplicationListenerAdapter<RegisterEvent> {
|
||||
|
||||
@Autowired
|
||||
private ConfigProtocol configProtocol;
|
||||
@Autowired
|
||||
private OnlineProtocol onlineProtocol;
|
||||
|
||||
@@ -31,11 +33,13 @@ public class RegisterListener extends ApplicationListenerAdapter<RegisterEvent>
|
||||
if (!session.authorized()) {
|
||||
return;
|
||||
}
|
||||
// 下发配置
|
||||
session.push(this.configProtocol.build());
|
||||
// 广播上线事件
|
||||
final Message message = this.onlineProtocol.build(
|
||||
Map.of("sn", session.sn())
|
||||
this.clientSessionManager.broadcast(
|
||||
session.sn(),
|
||||
this.onlineProtocol.build(Map.of("sn", session.sn()))
|
||||
);
|
||||
this.clientSessionManager.broadcast(session.sn(), message);
|
||||
// 修改终端状态
|
||||
final Map<?, ?> body = event.getBody();
|
||||
final ClientSessionStatus status = session.status();
|
||||
|
||||
@@ -77,7 +77,7 @@ public abstract class ProtocolAdapter implements Protocol {
|
||||
@Override
|
||||
public Message build(String id, MessageCode code, String message, Object body) {
|
||||
if(StringUtils.isEmpty(id)) {
|
||||
id = this.taoyaoProperties.getVersion();
|
||||
id = this.idService.buildIdToString();
|
||||
}
|
||||
final Header header = Header.builder()
|
||||
.v(this.taoyaoProperties.getVersion())
|
||||
|
||||
@@ -16,9 +16,6 @@ import com.acgist.taoyao.signal.protocol.ProtocolAdapter;
|
||||
@Component
|
||||
public class BroadcastProtocol extends ProtocolAdapter {
|
||||
|
||||
/**
|
||||
* 信令协议标识
|
||||
*/
|
||||
public static final Integer PID = 2009;
|
||||
|
||||
@Autowired
|
||||
|
||||
@@ -17,9 +17,6 @@ import lombok.extern.slf4j.Slf4j;
|
||||
@Component
|
||||
public class CloseProtocol extends ProtocolAdapter {
|
||||
|
||||
/**
|
||||
* 信令协议标识
|
||||
*/
|
||||
public static final Integer PID = 2001;
|
||||
|
||||
public CloseProtocol() {
|
||||
|
||||
@@ -0,0 +1,52 @@
|
||||
package com.acgist.taoyao.signal.protocol.client;
|
||||
|
||||
import java.time.LocalDateTime;
|
||||
import java.util.Map;
|
||||
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import com.acgist.taoyao.boot.config.MediaProperties;
|
||||
import com.acgist.taoyao.boot.config.WebrtcProperties;
|
||||
import com.acgist.taoyao.boot.model.Message;
|
||||
import com.acgist.taoyao.boot.utils.DateUtils;
|
||||
import com.acgist.taoyao.boot.utils.DateUtils.DateTimeStyle;
|
||||
import com.acgist.taoyao.signal.client.ClientSession;
|
||||
import com.acgist.taoyao.signal.protocol.ProtocolAdapter;
|
||||
|
||||
/**
|
||||
* 下发配置信令
|
||||
*
|
||||
* @author acgist
|
||||
*/
|
||||
@Component
|
||||
public class ConfigProtocol extends ProtocolAdapter {
|
||||
|
||||
public static final Integer PID = 2004;
|
||||
|
||||
@Autowired
|
||||
private MediaProperties mediaProperties;
|
||||
@Autowired
|
||||
private WebrtcProperties webrtcProperties;
|
||||
|
||||
public ConfigProtocol() {
|
||||
super(PID, "信令协议标识");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void execute(String sn, Message message, ClientSession session) {
|
||||
// 忽略
|
||||
}
|
||||
|
||||
@Override
|
||||
public Message build() {
|
||||
final Message message = super.build();
|
||||
message.setBody(Map.of(
|
||||
"time", DateUtils.format(LocalDateTime.now(), DateTimeStyle.YYYYMMDDHH24MMSS),
|
||||
"media", this.mediaProperties,
|
||||
"webrtc", this.webrtcProperties
|
||||
));
|
||||
return message;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,5 +1,6 @@
|
||||
package com.acgist.taoyao.signal.protocol.client;
|
||||
|
||||
import java.time.LocalDateTime;
|
||||
import java.util.Map;
|
||||
|
||||
import org.springframework.stereotype.Component;
|
||||
@@ -17,9 +18,6 @@ import com.acgist.taoyao.signal.protocol.ProtocolMapAdapter;
|
||||
@Component
|
||||
public class HeartbeatProtocol extends ProtocolMapAdapter {
|
||||
|
||||
/**
|
||||
* 信令协议标识
|
||||
*/
|
||||
public static final Integer PID = 2005;
|
||||
|
||||
public HeartbeatProtocol() {
|
||||
@@ -34,6 +32,7 @@ public class HeartbeatProtocol extends ProtocolMapAdapter {
|
||||
final ClientSessionStatus status = session.status();
|
||||
status.setSignal((Integer) body.get("signal"));
|
||||
status.setBattery((Integer) body.get("battery"));
|
||||
status.setLastHeartbeat(LocalDateTime.now());
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -16,9 +16,6 @@ import com.acgist.taoyao.signal.protocol.ProtocolAdapter;
|
||||
@Component
|
||||
public class ListProtocol extends ProtocolAdapter {
|
||||
|
||||
/**
|
||||
* 信令协议标识
|
||||
*/
|
||||
public static final Integer PID = 2006;
|
||||
|
||||
@Autowired
|
||||
|
||||
@@ -14,9 +14,6 @@ import com.acgist.taoyao.signal.protocol.ProtocolAdapter;
|
||||
@Component
|
||||
public class OfflineProtocol extends ProtocolAdapter {
|
||||
|
||||
/**
|
||||
* 信令协议标识
|
||||
*/
|
||||
public static final Integer PID = 2003;
|
||||
|
||||
public OfflineProtocol() {
|
||||
|
||||
@@ -14,9 +14,6 @@ import com.acgist.taoyao.signal.protocol.ProtocolAdapter;
|
||||
@Component
|
||||
public class OnlineProtocol extends ProtocolAdapter {
|
||||
|
||||
/**
|
||||
* 信令协议标识
|
||||
*/
|
||||
public static final Integer PID = 2002;
|
||||
|
||||
public OnlineProtocol() {
|
||||
|
||||
@@ -21,9 +21,6 @@ import com.acgist.taoyao.signal.protocol.ProtocolMapAdapter;
|
||||
@Component
|
||||
public class RegisterProtocol extends ProtocolMapAdapter {
|
||||
|
||||
/**
|
||||
* 信令协议标识
|
||||
*/
|
||||
public static final Integer PID = 2000;
|
||||
|
||||
@Autowired
|
||||
|
||||
@@ -22,9 +22,6 @@ import lombok.extern.slf4j.Slf4j;
|
||||
@Component
|
||||
public class StatusProtocol extends ProtocolMapAdapter {
|
||||
|
||||
/**
|
||||
* 信令协议标识
|
||||
*/
|
||||
public static final Integer PID = 2007;
|
||||
|
||||
@Autowired
|
||||
|
||||
@@ -22,9 +22,6 @@ import lombok.extern.slf4j.Slf4j;
|
||||
@Component
|
||||
public class UnicastProtocol extends ProtocolMapAdapter {
|
||||
|
||||
/**
|
||||
* 信令协议标识
|
||||
*/
|
||||
public static final Integer PID = 2008;
|
||||
|
||||
@Autowired
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
package com.acgist.taoyao.signal.protocol.platform;
|
||||
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import com.acgist.taoyao.boot.model.Message;
|
||||
@@ -16,9 +15,6 @@ import com.acgist.taoyao.signal.protocol.ProtocolAdapter;
|
||||
@Component
|
||||
public class ErrorProtocol extends ProtocolAdapter {
|
||||
|
||||
/**
|
||||
* 信令协议标识
|
||||
*/
|
||||
public static final Integer PID = 1999;
|
||||
|
||||
/**
|
||||
@@ -44,7 +40,7 @@ public class ErrorProtocol extends ProtocolAdapter {
|
||||
@Override
|
||||
public Message build(String id, MessageCode code, String message, Object body) {
|
||||
final String oldId = this.idLocal.get();
|
||||
if(StringUtils.isEmpty(oldId)) {
|
||||
if(oldId == null) {
|
||||
id = this.idService.buildIdToString();
|
||||
} else {
|
||||
id = oldId;
|
||||
|
||||
@@ -17,9 +17,6 @@ import com.acgist.taoyao.signal.protocol.ProtocolMapAdapter;
|
||||
@Component
|
||||
public class ScriptProtocol extends ProtocolMapAdapter {
|
||||
|
||||
/**
|
||||
* 信令协议标识
|
||||
*/
|
||||
public static final Integer PID = 1001;
|
||||
|
||||
public ScriptProtocol() {
|
||||
|
||||
@@ -18,9 +18,6 @@ import lombok.extern.slf4j.Slf4j;
|
||||
@Component
|
||||
public class ShutdownProtocol extends ProtocolAdapter {
|
||||
|
||||
/**
|
||||
* 信令协议标识
|
||||
*/
|
||||
public static final Integer PID = 1000;
|
||||
|
||||
public ShutdownProtocol() {
|
||||
|
||||
Reference in New Issue
Block a user