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