From 9a774542550f1222d124109e1dde1e038120002a Mon Sep 17 00:00:00 2001 From: acgist <289547414@qq.com> Date: Thu, 17 Nov 2022 08:38:25 +0800 Subject: [PATCH] =?UTF-8?q?[+]=20=E4=B8=8B=E5=8F=91=E9=85=8D=E7=BD=AE?= =?UTF-8?q?=E4=BF=A1=E4=BB=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- taoyao-signal/README.md | 59 ++++++++++++++----- .../signal/client/ClientSessionStatus.java | 9 +++ .../listener/client/RegisterListener.java | 12 ++-- .../signal/protocol/ProtocolAdapter.java | 2 +- .../protocol/client/BroadcastProtocol.java | 3 - .../signal/protocol/client/CloseProtocol.java | 3 - .../protocol/client/ConfigProtocol.java | 52 ++++++++++++++++ .../protocol/client/HeartbeatProtocol.java | 5 +- .../signal/protocol/client/ListProtocol.java | 3 - .../protocol/client/OfflineProtocol.java | 3 - .../protocol/client/OnlineProtocol.java | 3 - .../protocol/client/RegisterProtocol.java | 3 - .../protocol/client/StatusProtocol.java | 3 - .../protocol/client/UnicastProtocol.java | 3 - .../protocol/platform/ErrorProtocol.java | 6 +- .../protocol/platform/ScriptProtocol.java | 3 - .../protocol/platform/ShutdownProtocol.java | 3 - 17 files changed, 118 insertions(+), 57 deletions(-) create mode 100644 taoyao-signal/src/main/java/com/acgist/taoyao/signal/protocol/client/ConfigProtocol.java diff --git a/taoyao-signal/README.md b/taoyao-signal/README.md index 35cef2d..c0b7985 100644 --- a/taoyao-signal/README.md +++ b/taoyao-signal/README.md @@ -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) -|发布|控制终端推流(服务端拉流)||| -|取消发布|控制终端暂停推流(服务端取消拉流)||| -|订阅|订阅终端媒体流(终端拉流)||| -|取消订阅|取消订阅终端媒体流(终端取消拉流)||| -|暂停媒体流|暂停终端媒体流分流(不关媒体流通道)||| -|恢复媒体流|恢复终端媒体流分流(不关媒体流通道)||| -|开启录像|||| -|关闭录像|||| \ No newline at end of file +### 发布信令(5000) + +控制终端推流(服务端拉流) + +### 取消发布指令(5001) + +控制终端暂停推流(服务端取消拉流) + +### 订阅指令(5002) + +订阅终端媒体流(终端拉流) + +### 取消订阅指令(5003) + +取消订阅终端媒体流(终端取消拉流) + +### 暂停指令(5004) + +暂停发布、订阅(不关媒体流通道) + +### 恢复指令(5005) + +暂停发布、订阅(不关媒体流通道) + +### 开启录像(5006) + +### 停止录像(5007) diff --git a/taoyao-signal/src/main/java/com/acgist/taoyao/signal/client/ClientSessionStatus.java b/taoyao-signal/src/main/java/com/acgist/taoyao/signal/client/ClientSessionStatus.java index 8a35ea3..498a6db 100644 --- a/taoyao-signal/src/main/java/com/acgist/taoyao/signal/client/ClientSessionStatus.java +++ b/taoyao-signal/src/main/java/com/acgist/taoyao/signal/client/ClientSessionStatus.java @@ -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(); } diff --git a/taoyao-signal/src/main/java/com/acgist/taoyao/signal/listener/client/RegisterListener.java b/taoyao-signal/src/main/java/com/acgist/taoyao/signal/listener/client/RegisterListener.java index be98001..cb26a3d 100644 --- a/taoyao-signal/src/main/java/com/acgist/taoyao/signal/listener/client/RegisterListener.java +++ b/taoyao-signal/src/main/java/com/acgist/taoyao/signal/listener/client/RegisterListener.java @@ -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 { + @Autowired + private ConfigProtocol configProtocol; @Autowired private OnlineProtocol onlineProtocol; @@ -31,11 +33,13 @@ public class RegisterListener extends ApplicationListenerAdapter 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(); diff --git a/taoyao-signal/src/main/java/com/acgist/taoyao/signal/protocol/ProtocolAdapter.java b/taoyao-signal/src/main/java/com/acgist/taoyao/signal/protocol/ProtocolAdapter.java index f4524cd..618b0d1 100644 --- a/taoyao-signal/src/main/java/com/acgist/taoyao/signal/protocol/ProtocolAdapter.java +++ b/taoyao-signal/src/main/java/com/acgist/taoyao/signal/protocol/ProtocolAdapter.java @@ -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()) diff --git a/taoyao-signal/src/main/java/com/acgist/taoyao/signal/protocol/client/BroadcastProtocol.java b/taoyao-signal/src/main/java/com/acgist/taoyao/signal/protocol/client/BroadcastProtocol.java index 8444468..f8c7b85 100644 --- a/taoyao-signal/src/main/java/com/acgist/taoyao/signal/protocol/client/BroadcastProtocol.java +++ b/taoyao-signal/src/main/java/com/acgist/taoyao/signal/protocol/client/BroadcastProtocol.java @@ -16,9 +16,6 @@ import com.acgist.taoyao.signal.protocol.ProtocolAdapter; @Component public class BroadcastProtocol extends ProtocolAdapter { - /** - * 信令协议标识 - */ public static final Integer PID = 2009; @Autowired diff --git a/taoyao-signal/src/main/java/com/acgist/taoyao/signal/protocol/client/CloseProtocol.java b/taoyao-signal/src/main/java/com/acgist/taoyao/signal/protocol/client/CloseProtocol.java index 545dc28..e6714e7 100644 --- a/taoyao-signal/src/main/java/com/acgist/taoyao/signal/protocol/client/CloseProtocol.java +++ b/taoyao-signal/src/main/java/com/acgist/taoyao/signal/protocol/client/CloseProtocol.java @@ -17,9 +17,6 @@ import lombok.extern.slf4j.Slf4j; @Component public class CloseProtocol extends ProtocolAdapter { - /** - * 信令协议标识 - */ public static final Integer PID = 2001; public CloseProtocol() { diff --git a/taoyao-signal/src/main/java/com/acgist/taoyao/signal/protocol/client/ConfigProtocol.java b/taoyao-signal/src/main/java/com/acgist/taoyao/signal/protocol/client/ConfigProtocol.java new file mode 100644 index 0000000..3cf4155 --- /dev/null +++ b/taoyao-signal/src/main/java/com/acgist/taoyao/signal/protocol/client/ConfigProtocol.java @@ -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; + } + +} diff --git a/taoyao-signal/src/main/java/com/acgist/taoyao/signal/protocol/client/HeartbeatProtocol.java b/taoyao-signal/src/main/java/com/acgist/taoyao/signal/protocol/client/HeartbeatProtocol.java index 19053c2..d2dde41 100644 --- a/taoyao-signal/src/main/java/com/acgist/taoyao/signal/protocol/client/HeartbeatProtocol.java +++ b/taoyao-signal/src/main/java/com/acgist/taoyao/signal/protocol/client/HeartbeatProtocol.java @@ -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()); } } diff --git a/taoyao-signal/src/main/java/com/acgist/taoyao/signal/protocol/client/ListProtocol.java b/taoyao-signal/src/main/java/com/acgist/taoyao/signal/protocol/client/ListProtocol.java index 0233750..0f25645 100644 --- a/taoyao-signal/src/main/java/com/acgist/taoyao/signal/protocol/client/ListProtocol.java +++ b/taoyao-signal/src/main/java/com/acgist/taoyao/signal/protocol/client/ListProtocol.java @@ -16,9 +16,6 @@ import com.acgist.taoyao.signal.protocol.ProtocolAdapter; @Component public class ListProtocol extends ProtocolAdapter { - /** - * 信令协议标识 - */ public static final Integer PID = 2006; @Autowired diff --git a/taoyao-signal/src/main/java/com/acgist/taoyao/signal/protocol/client/OfflineProtocol.java b/taoyao-signal/src/main/java/com/acgist/taoyao/signal/protocol/client/OfflineProtocol.java index adba5d4..f387b63 100644 --- a/taoyao-signal/src/main/java/com/acgist/taoyao/signal/protocol/client/OfflineProtocol.java +++ b/taoyao-signal/src/main/java/com/acgist/taoyao/signal/protocol/client/OfflineProtocol.java @@ -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() { diff --git a/taoyao-signal/src/main/java/com/acgist/taoyao/signal/protocol/client/OnlineProtocol.java b/taoyao-signal/src/main/java/com/acgist/taoyao/signal/protocol/client/OnlineProtocol.java index 8214788..23407de 100644 --- a/taoyao-signal/src/main/java/com/acgist/taoyao/signal/protocol/client/OnlineProtocol.java +++ b/taoyao-signal/src/main/java/com/acgist/taoyao/signal/protocol/client/OnlineProtocol.java @@ -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() { diff --git a/taoyao-signal/src/main/java/com/acgist/taoyao/signal/protocol/client/RegisterProtocol.java b/taoyao-signal/src/main/java/com/acgist/taoyao/signal/protocol/client/RegisterProtocol.java index 60f8dca..349b95a 100644 --- a/taoyao-signal/src/main/java/com/acgist/taoyao/signal/protocol/client/RegisterProtocol.java +++ b/taoyao-signal/src/main/java/com/acgist/taoyao/signal/protocol/client/RegisterProtocol.java @@ -21,9 +21,6 @@ import com.acgist.taoyao.signal.protocol.ProtocolMapAdapter; @Component public class RegisterProtocol extends ProtocolMapAdapter { - /** - * 信令协议标识 - */ public static final Integer PID = 2000; @Autowired diff --git a/taoyao-signal/src/main/java/com/acgist/taoyao/signal/protocol/client/StatusProtocol.java b/taoyao-signal/src/main/java/com/acgist/taoyao/signal/protocol/client/StatusProtocol.java index 43e8692..f39232c 100644 --- a/taoyao-signal/src/main/java/com/acgist/taoyao/signal/protocol/client/StatusProtocol.java +++ b/taoyao-signal/src/main/java/com/acgist/taoyao/signal/protocol/client/StatusProtocol.java @@ -22,9 +22,6 @@ import lombok.extern.slf4j.Slf4j; @Component public class StatusProtocol extends ProtocolMapAdapter { - /** - * 信令协议标识 - */ public static final Integer PID = 2007; @Autowired diff --git a/taoyao-signal/src/main/java/com/acgist/taoyao/signal/protocol/client/UnicastProtocol.java b/taoyao-signal/src/main/java/com/acgist/taoyao/signal/protocol/client/UnicastProtocol.java index 64267f0..8ee5e68 100644 --- a/taoyao-signal/src/main/java/com/acgist/taoyao/signal/protocol/client/UnicastProtocol.java +++ b/taoyao-signal/src/main/java/com/acgist/taoyao/signal/protocol/client/UnicastProtocol.java @@ -22,9 +22,6 @@ import lombok.extern.slf4j.Slf4j; @Component public class UnicastProtocol extends ProtocolMapAdapter { - /** - * 信令协议标识 - */ public static final Integer PID = 2008; @Autowired diff --git a/taoyao-signal/src/main/java/com/acgist/taoyao/signal/protocol/platform/ErrorProtocol.java b/taoyao-signal/src/main/java/com/acgist/taoyao/signal/protocol/platform/ErrorProtocol.java index 6b8776c..efc03d6 100644 --- a/taoyao-signal/src/main/java/com/acgist/taoyao/signal/protocol/platform/ErrorProtocol.java +++ b/taoyao-signal/src/main/java/com/acgist/taoyao/signal/protocol/platform/ErrorProtocol.java @@ -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; diff --git a/taoyao-signal/src/main/java/com/acgist/taoyao/signal/protocol/platform/ScriptProtocol.java b/taoyao-signal/src/main/java/com/acgist/taoyao/signal/protocol/platform/ScriptProtocol.java index 1c11342..bcd3fa8 100644 --- a/taoyao-signal/src/main/java/com/acgist/taoyao/signal/protocol/platform/ScriptProtocol.java +++ b/taoyao-signal/src/main/java/com/acgist/taoyao/signal/protocol/platform/ScriptProtocol.java @@ -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() { diff --git a/taoyao-signal/src/main/java/com/acgist/taoyao/signal/protocol/platform/ShutdownProtocol.java b/taoyao-signal/src/main/java/com/acgist/taoyao/signal/protocol/platform/ShutdownProtocol.java index 3bc4f15..109dbf8 100644 --- a/taoyao-signal/src/main/java/com/acgist/taoyao/signal/protocol/platform/ShutdownProtocol.java +++ b/taoyao-signal/src/main/java/com/acgist/taoyao/signal/protocol/platform/ShutdownProtocol.java @@ -18,9 +18,6 @@ import lombok.extern.slf4j.Slf4j; @Component public class ShutdownProtocol extends ProtocolAdapter { - /** - * 信令协议标识 - */ public static final Integer PID = 1000; public ShutdownProtocol() {