[+] 下发配置信令

This commit is contained in:
acgist
2022-11-17 08:38:25 +08:00
parent e1d497f28e
commit 9a77454255
17 changed files with 118 additions and 57 deletions

View File

@@ -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

View File

@@ -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();
}

View File

@@ -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();

View File

@@ -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())

View File

@@ -16,9 +16,6 @@ import com.acgist.taoyao.signal.protocol.ProtocolAdapter;
@Component
public class BroadcastProtocol extends ProtocolAdapter {
/**
* 信令协议标识
*/
public static final Integer PID = 2009;
@Autowired

View File

@@ -17,9 +17,6 @@ import lombok.extern.slf4j.Slf4j;
@Component
public class CloseProtocol extends ProtocolAdapter {
/**
* 信令协议标识
*/
public static final Integer PID = 2001;
public CloseProtocol() {

View File

@@ -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;
}
}

View File

@@ -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());
}
}

View File

@@ -16,9 +16,6 @@ import com.acgist.taoyao.signal.protocol.ProtocolAdapter;
@Component
public class ListProtocol extends ProtocolAdapter {
/**
* 信令协议标识
*/
public static final Integer PID = 2006;
@Autowired

View File

@@ -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() {

View File

@@ -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() {

View File

@@ -21,9 +21,6 @@ import com.acgist.taoyao.signal.protocol.ProtocolMapAdapter;
@Component
public class RegisterProtocol extends ProtocolMapAdapter {
/**
* 信令协议标识
*/
public static final Integer PID = 2000;
@Autowired

View File

@@ -22,9 +22,6 @@ import lombok.extern.slf4j.Slf4j;
@Component
public class StatusProtocol extends ProtocolMapAdapter {
/**
* 信令协议标识
*/
public static final Integer PID = 2007;
@Autowired

View File

@@ -22,9 +22,6 @@ import lombok.extern.slf4j.Slf4j;
@Component
public class UnicastProtocol extends ProtocolMapAdapter {
/**
* 信令协议标识
*/
public static final Integer PID = 2008;
@Autowired

View File

@@ -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;

View File

@@ -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() {

View File

@@ -18,9 +18,6 @@ import lombok.extern.slf4j.Slf4j;
@Component
public class ShutdownProtocol extends ProtocolAdapter {
/**
* 信令协议标识
*/
public static final Integer PID = 1000;
public ShutdownProtocol() {