From b1fb1c4616a1924496465c6cff60acf328d7ab05 Mon Sep 17 00:00:00 2001
From: QingObject <1120359293@qq.com>
Date: 星期五, 28 四月 2023 14:39:50 +0800
Subject: [PATCH] 1、新增视频回放、视频回放控制Template 2、修复直播控制指令BUG
---
src/main/java/com/genersoft/iot/vmp/jt1078/proc/response/J9205.java | 94 +++++++
src/main/java/com/genersoft/iot/vmp/jt1078/proc/response/J9202.java | 80 ++++++
src/main/java/com/genersoft/iot/vmp/jt1078/session/SessionManager.java | 6
src/main/java/com/genersoft/iot/vmp/jt1078/proc/response/J9102.java | 16 +
src/main/java/com/genersoft/iot/vmp/jt1078/proc/entity/Cmd.java | 11
src/main/java/com/genersoft/iot/vmp/jt1078/proc/response/J9101.java | 2
src/main/java/com/genersoft/iot/vmp/jt1078/cmd/JT1078Template.java | 71 +++++
src/main/java/com/genersoft/iot/vmp/jt1078/proc/request/J1205.java | 190 ++++++++++++++
src/main/java/com/genersoft/iot/vmp/jt1078/proc/response/J9201.java | 173 +++++++++++++
src/test/java/com/genersoft/iot/vmp/jt1078/JT1078ServerTest.java | 103 +++++++
src/main/java/com/genersoft/iot/vmp/jt1078/config/JT1078AutoConfiguration.java | 2
src/main/java/com/genersoft/iot/vmp/jt1078/config/JT1078Controller.java | 9
12 files changed, 744 insertions(+), 13 deletions(-)
diff --git a/src/main/java/com/genersoft/iot/vmp/jt1078/cmd/JT1078Template.java b/src/main/java/com/genersoft/iot/vmp/jt1078/cmd/JT1078Template.java
index ad3ab00..c55c627 100644
--- a/src/main/java/com/genersoft/iot/vmp/jt1078/cmd/JT1078Template.java
+++ b/src/main/java/com/genersoft/iot/vmp/jt1078/cmd/JT1078Template.java
@@ -1,8 +1,7 @@
package com.genersoft.iot.vmp.jt1078.cmd;
import com.genersoft.iot.vmp.jt1078.proc.entity.Cmd;
-import com.genersoft.iot.vmp.jt1078.proc.response.J9101;
-import com.genersoft.iot.vmp.jt1078.proc.response.J9102;
+import com.genersoft.iot.vmp.jt1078.proc.response.*;
import com.genersoft.iot.vmp.jt1078.session.SessionManager;
import java.util.Random;
@@ -16,6 +15,15 @@
private final Random random = new Random();
+ private static final String H9101 = "9101";
+ private static final String H9102 = "9102";
+ private static final String H9201 = "9201";
+ private static final String H9202 = "9202";
+ private static final String H9205 = "9205";
+
+ private static final String H0001 = "0001";
+ private static final String H1205 = "1205";
+
/**
* 寮�鍚洿鎾棰�
*
@@ -26,8 +34,8 @@
Cmd cmd = new Cmd.Builder()
.setDevId(devId)
.setPackageNo(randomInt())
- .setMsgId("9101")
- .setRespId("0001")
+ .setMsgId(H9101)
+ .setRespId(H0001)
.setRs(j9101)
.build();
return SessionManager.INSTANCE.request(cmd, timeOut);
@@ -43,13 +51,64 @@
Cmd cmd = new Cmd.Builder()
.setDevId(devId)
.setPackageNo(randomInt())
- .setMsgId("9102")
- .setRespId("0001")
+ .setMsgId(H9102)
+ .setRespId(H0001)
.setRs(j9102)
.build();
return SessionManager.INSTANCE.request(cmd, timeOut);
}
+ /**
+ * 鏌ヨ闊宠棰戝垪琛�
+ *
+ * @param devId 璁惧鍙�
+ * @param j9205 鏌ヨ闊宠棰戝垪琛�
+ */
+ public String queryBackTime(String devId, J9205 j9205, Integer timeOut) {
+ Cmd cmd = new Cmd.Builder()
+ .setDevId(devId)
+ .setPackageNo(randomInt())
+ .setMsgId(H9205)
+ .setRespId(H1205)
+ .setRs(j9205)
+ .build();
+ return SessionManager.INSTANCE.request(cmd, timeOut);
+ }
+
+ /**
+ * 寮�鍚棰戝洖鏀�
+ *
+ * @param devId 璁惧鍙�
+ * @param j9201 瑙嗛鍥炴斁鍙傛暟
+ */
+ public String startBackLive(String devId, J9201 j9201, Integer timeOut) {
+ Cmd cmd = new Cmd.Builder()
+ .setDevId(devId)
+ .setPackageNo(randomInt())
+ .setMsgId(H9201)
+ .setRespId(H1205)
+ .setRs(j9201)
+ .build();
+ return SessionManager.INSTANCE.request(cmd, timeOut);
+ }
+
+ /**
+ * 瑙嗛鍥炴斁鎺у埗
+ *
+ * @param devId 璁惧鍙�
+ * @param j9202 鎺у埗瑙嗛鍥炴斁鍙傛暟
+ */
+ public String controlBackLive(String devId, J9202 j9202, Integer timeOut) {
+ Cmd cmd = new Cmd.Builder()
+ .setDevId(devId)
+ .setPackageNo(randomInt())
+ .setMsgId(H9202)
+ .setRespId(H0001)
+ .setRs(j9202)
+ .build();
+ return SessionManager.INSTANCE.request(cmd, timeOut);
+ }
+
private Long randomInt() {
return (long) random.nextInt(1000) + 1;
}
diff --git a/src/main/java/com/genersoft/iot/vmp/jt1078/config/TcpAutoConfiguration.java b/src/main/java/com/genersoft/iot/vmp/jt1078/config/JT1078AutoConfiguration.java
similarity index 95%
rename from src/main/java/com/genersoft/iot/vmp/jt1078/config/TcpAutoConfiguration.java
rename to src/main/java/com/genersoft/iot/vmp/jt1078/config/JT1078AutoConfiguration.java
index 0b07bb4..6cac30c 100644
--- a/src/main/java/com/genersoft/iot/vmp/jt1078/config/TcpAutoConfiguration.java
+++ b/src/main/java/com/genersoft/iot/vmp/jt1078/config/JT1078AutoConfiguration.java
@@ -16,7 +16,7 @@
@Order(Integer.MIN_VALUE)
@Configuration
@ConditionalOnProperty(value = "jt1078.enable", havingValue = "true")
-public class TcpAutoConfiguration {
+public class JT1078AutoConfiguration {
@Bean(initMethod = "start", destroyMethod = "stop")
public TcpServer jt1078Server(@Value("${jt1078.port}") Integer port) {
diff --git a/src/main/java/com/genersoft/iot/vmp/jt1078/config/JT1078Controller.java b/src/main/java/com/genersoft/iot/vmp/jt1078/config/JT1078Controller.java
index cffb147..0c71d26 100644
--- a/src/main/java/com/genersoft/iot/vmp/jt1078/config/JT1078Controller.java
+++ b/src/main/java/com/genersoft/iot/vmp/jt1078/config/JT1078Controller.java
@@ -1,7 +1,7 @@
package com.genersoft.iot.vmp.jt1078.config;
import com.genersoft.iot.vmp.jt1078.cmd.JT1078Template;
-import com.genersoft.iot.vmp.jt1078.proc.response.J9101;
+import com.genersoft.iot.vmp.jt1078.proc.response.*;
import com.genersoft.iot.vmp.vmanager.bean.WVPResult;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.web.bind.annotation.GetMapping;
@@ -26,6 +26,9 @@
@Resource
JT1078Template jt1078Template;
+ /**
+ * jt1078Template 璋冪敤绀轰緥
+ */
@GetMapping("/start/live/{deviceId}/{channelId}")
public WVPResult<?> startLive(@PathVariable String deviceId, @PathVariable String channelId) {
J9101 j9101 = new J9101();
@@ -35,12 +38,14 @@
j9101.setTcpPort(7618);
j9101.setUdpPort(7618);
j9101.setType(0);
-
+ // TODO 鍒嗛厤ZLM,鑾峰彇IP銆佺鍙�
String s = jt1078Template.startLive(deviceId, j9101, 6);
+ // TODO 璁惧鍝嶅簲鎴愬姛鍚�,灏佽鎷夋祦缁撴灉闆�
WVPResult<String> wvpResult = new WVPResult<>();
wvpResult.setCode(200);
wvpResult.setData(String.format("http://192.168.1.1/rtp/%s_%s.live.mp4", deviceId, channelId));
return wvpResult;
}
+
}
diff --git a/src/main/java/com/genersoft/iot/vmp/jt1078/proc/entity/Cmd.java b/src/main/java/com/genersoft/iot/vmp/jt1078/proc/entity/Cmd.java
index 19d6d8f..28726e8 100644
--- a/src/main/java/com/genersoft/iot/vmp/jt1078/proc/entity/Cmd.java
+++ b/src/main/java/com/genersoft/iot/vmp/jt1078/proc/entity/Cmd.java
@@ -102,4 +102,15 @@
}
}
+
+ @Override
+ public String toString() {
+ return "Cmd{" +
+ "devId='" + devId + '\'' +
+ ", packageNo=" + packageNo +
+ ", msgId='" + msgId + '\'' +
+ ", respId='" + respId + '\'' +
+ ", rs=" + rs +
+ '}';
+ }
}
diff --git a/src/main/java/com/genersoft/iot/vmp/jt1078/proc/request/J1205.java b/src/main/java/com/genersoft/iot/vmp/jt1078/proc/request/J1205.java
new file mode 100644
index 0000000..da0b89e
--- /dev/null
+++ b/src/main/java/com/genersoft/iot/vmp/jt1078/proc/request/J1205.java
@@ -0,0 +1,190 @@
+package com.genersoft.iot.vmp.jt1078.proc.request;
+
+import com.alibaba.fastjson2.JSON;
+import com.genersoft.iot.vmp.jt1078.annotation.MsgId;
+import com.genersoft.iot.vmp.jt1078.proc.Header;
+import com.genersoft.iot.vmp.jt1078.proc.response.J8001;
+import com.genersoft.iot.vmp.jt1078.proc.response.Rs;
+import com.genersoft.iot.vmp.jt1078.session.Session;
+import com.genersoft.iot.vmp.jt1078.session.SessionManager;
+import io.netty.buffer.ByteBuf;
+import io.netty.buffer.ByteBufUtil;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * 缁堢涓婁紶闊宠棰戣祫婧愬垪琛�
+ *
+ * @author QingtaiJiang
+ * @date 2023/4/28 10:36
+ * @email qingtaij@163.com
+ */
+@MsgId(id = "1205")
+public class J1205 extends Re {
+ Integer respNo;
+
+ private List<JRecordItem> recordList = new ArrayList<JRecordItem>();
+
+ @Override
+ protected Rs decode0(ByteBuf buf, Header header, Session session) {
+ respNo = buf.readUnsignedShort();
+ long size = buf.readUnsignedInt();
+
+ for (int i = 0; i < size; i++) {
+ JRecordItem item = new JRecordItem();
+ item.setChannelId(buf.readUnsignedByte());
+ item.setStartTime(ByteBufUtil.hexDump(buf.readSlice(6)));
+ item.setEndTime(ByteBufUtil.hexDump(buf.readSlice(6)));
+ item.setWarn(buf.readLong());
+ item.setMediaType(buf.readUnsignedByte());
+ item.setStreamType(buf.readUnsignedByte());
+ item.setStorageType(buf.readUnsignedByte());
+ item.setSize(buf.readUnsignedInt());
+ recordList.add(item);
+ }
+
+ return null;
+ }
+
+ @Override
+ protected Rs handler(Header header, Session session) {
+ SessionManager.INSTANCE.response(header.getDevId(), "1205", (long) respNo, JSON.toJSONString(this));
+
+ J8001 j8001 = new J8001();
+ j8001.setRespNo(header.getSn());
+ j8001.setRespId(header.getMsgId());
+ j8001.setResult(J8001.SUCCESS);
+ return j8001;
+ }
+
+
+ public Integer getRespNo() {
+ return respNo;
+ }
+
+ public void setRespNo(Integer respNo) {
+ this.respNo = respNo;
+ }
+
+ public List<JRecordItem> getRecordList() {
+ return recordList;
+ }
+
+ public void setRecordList(List<JRecordItem> recordList) {
+ this.recordList = recordList;
+ }
+
+ public static class JRecordItem {
+
+ // 閫昏緫閫氶亾鍙�
+ private int channelId;
+
+ // 寮�濮嬫椂闂�
+ private String startTime;
+
+ // 缁撴潫鏃堕棿
+ private String endTime;
+
+ // 鎶ヨ鏍囧織
+ private long warn;
+
+ // 闊宠棰戣祫婧愮被鍨�
+ private int mediaType;
+
+ // 鐮佹祦绫诲瀷
+ private int streamType = 1;
+
+ // 瀛樺偍鍣ㄧ被鍨�
+ private int storageType;
+
+ // 鏂囦欢澶у皬
+ private long size;
+
+ public int getChannelId() {
+ return channelId;
+ }
+
+ public void setChannelId(int channelId) {
+ this.channelId = channelId;
+ }
+
+ public String getStartTime() {
+ return startTime;
+ }
+
+ public void setStartTime(String startTime) {
+ this.startTime = startTime;
+ }
+
+ public String getEndTime() {
+ return endTime;
+ }
+
+ public void setEndTime(String endTime) {
+ this.endTime = endTime;
+ }
+
+ public long getWarn() {
+ return warn;
+ }
+
+ public void setWarn(long warn) {
+ this.warn = warn;
+ }
+
+ public int getMediaType() {
+ return mediaType;
+ }
+
+ public void setMediaType(int mediaType) {
+ this.mediaType = mediaType;
+ }
+
+ public int getStreamType() {
+ return streamType;
+ }
+
+ public void setStreamType(int streamType) {
+ this.streamType = streamType;
+ }
+
+ public int getStorageType() {
+ return storageType;
+ }
+
+ public void setStorageType(int storageType) {
+ this.storageType = storageType;
+ }
+
+ public long getSize() {
+ return size;
+ }
+
+ public void setSize(long size) {
+ this.size = size;
+ }
+
+ @Override
+ public String toString() {
+ return "JRecordItem{" +
+ "channelId=" + channelId +
+ ", startTime='" + startTime + '\'' +
+ ", endTime='" + endTime + '\'' +
+ ", warn=" + warn +
+ ", mediaType=" + mediaType +
+ ", streamType=" + streamType +
+ ", storageType=" + storageType +
+ ", size=" + size +
+ '}';
+ }
+ }
+
+ @Override
+ public String toString() {
+ return "J1205{" +
+ "respNo=" + respNo +
+ ", recordList=" + recordList +
+ '}';
+ }
+}
diff --git a/src/main/java/com/genersoft/iot/vmp/jt1078/proc/response/J9101.java b/src/main/java/com/genersoft/iot/vmp/jt1078/proc/response/J9101.java
index d671372..77e90b7 100644
--- a/src/main/java/com/genersoft/iot/vmp/jt1078/proc/response/J9101.java
+++ b/src/main/java/com/genersoft/iot/vmp/jt1078/proc/response/J9101.java
@@ -6,6 +6,8 @@
import io.netty.util.CharsetUtil;
/**
+ * 瀹炴椂闊宠棰戜紶杈撹姹�
+ *
* @author QingtaiJiang
* @date 2023/4/27 18:25
* @email qingtaij@163.com
diff --git a/src/main/java/com/genersoft/iot/vmp/jt1078/proc/response/J9102.java b/src/main/java/com/genersoft/iot/vmp/jt1078/proc/response/J9102.java
index f92fe8e..8d560b2 100644
--- a/src/main/java/com/genersoft/iot/vmp/jt1078/proc/response/J9102.java
+++ b/src/main/java/com/genersoft/iot/vmp/jt1078/proc/response/J9102.java
@@ -1,13 +1,17 @@
package com.genersoft.iot.vmp.jt1078.proc.response;
+import com.genersoft.iot.vmp.jt1078.annotation.MsgId;
import io.netty.buffer.ByteBuf;
import io.netty.buffer.Unpooled;
/**
+ * 闊宠棰戝疄鏃朵紶杈撴帶鍒�
+ *
* @author QingtaiJiang
* @date 2023/4/27 18:49
* @email qingtaij@163.com
*/
+@MsgId(id = "9102")
public class J9102 extends Rs {
// 閫氶亾鍙�
@@ -47,7 +51,7 @@
buffer.writeByte(command);
buffer.writeByte(closeType);
buffer.writeByte(streamType);
- return null;
+ return buffer;
}
@@ -82,4 +86,14 @@
public void setStreamType(Integer streamType) {
this.streamType = streamType;
}
+
+ @Override
+ public String toString() {
+ return "J9102{" +
+ "channel=" + channel +
+ ", command=" + command +
+ ", closeType=" + closeType +
+ ", streamType=" + streamType +
+ '}';
+ }
}
diff --git a/src/main/java/com/genersoft/iot/vmp/jt1078/proc/response/J9201.java b/src/main/java/com/genersoft/iot/vmp/jt1078/proc/response/J9201.java
new file mode 100644
index 0000000..8a66f35
--- /dev/null
+++ b/src/main/java/com/genersoft/iot/vmp/jt1078/proc/response/J9201.java
@@ -0,0 +1,173 @@
+package com.genersoft.iot.vmp.jt1078.proc.response;
+
+import com.genersoft.iot.vmp.jt1078.annotation.MsgId;
+import io.netty.buffer.ByteBuf;
+import io.netty.buffer.ByteBufUtil;
+import io.netty.buffer.Unpooled;
+import io.netty.util.CharsetUtil;
+
+/**
+ * 鍥炴斁璇锋眰
+ *
+ * @author QingtaiJiang
+ * @date 2023/4/28 10:37
+ * @email qingtaij@163.com
+ */
+@MsgId(id = "9201")
+public class J9201 extends Rs {
+ // 鏈嶅姟鍣↖P鍦板潃
+ private String ip;
+
+ // 瀹炴椂瑙嗛鏈嶅姟鍣═CP绔彛鍙�
+ private int tcpPort;
+
+ // 瀹炴椂瑙嗛鏈嶅姟鍣║DP绔彛鍙�
+ private int udpPort;
+
+ // 閫昏緫閫氶亾鍙�
+ private int channel;
+
+ // 闊宠棰戣祫婧愮被鍨嬶細0.闊宠棰� 1.闊抽 2.瑙嗛 3.瑙嗛鎴栭煶瑙嗛
+ private int type;
+
+ // 鐮佹祦绫诲瀷锛�0.鎵�鏈夌爜娴� 1.涓荤爜娴� 2.瀛愮爜娴�(濡傛灉姝ら�氶亾鍙紶杈撻煶棰�,姝ゅ瓧娈电疆0)
+ private int rate;
+
+ // 瀛樺偍鍣ㄧ被鍨嬶細0.鎵�鏈夊瓨鍌ㄥ櫒 1.涓诲瓨鍌ㄥ櫒 2.鐏惧瀛樺偍鍣�"
+ private int storageType;
+
+ // 鍥炴斁鏂瑰紡锛�0.姝e父鍥炴斁 1.蹇繘鍥炴斁 2.鍏抽敭甯у揩閫�鍥炴斁 3.鍏抽敭甯ф挱鏀� 4.鍗曞抚涓婁紶
+ private int playbackType;
+
+ // 蹇繘鎴栧揩閫�鍊嶆暟锛�0.鏃犳晥 1.1鍊� 2.2鍊� 3.4鍊� 4.8鍊� 5.16鍊� (鍥炴斁鎺у埗涓�1鍜�2鏃�,姝ゅ瓧娈靛唴瀹规湁鏁�,鍚﹀垯缃�0)
+ private int playbackSpeed;
+
+ // 寮�濮嬫椂闂碮YMMDDHHMMSS,鍥炴斁鏂瑰紡涓�4鏃�,璇ュ瓧娈佃〃绀哄崟甯т笂浼犳椂闂�
+ private String startTime;
+
+ // 缁撴潫鏃堕棿YYMMDDHHMMSS,鍥炴斁鏂瑰紡涓�4鏃�,璇ュ瓧娈垫棤鏁�,涓�0琛ㄧず涓�鐩村洖鏀�
+ private String endTime;
+
+ @Override
+ public ByteBuf encode() {
+ ByteBuf buffer = Unpooled.buffer();
+ buffer.writeByte(ip.getBytes().length);
+ buffer.writeCharSequence(ip, CharsetUtil.UTF_8);
+ buffer.writeShort(tcpPort);
+ buffer.writeShort(udpPort);
+ buffer.writeByte(channel);
+ buffer.writeByte(type);
+ buffer.writeByte(rate);
+ buffer.writeByte(storageType);
+ buffer.writeByte(playbackType);
+ buffer.writeByte(playbackSpeed);
+ buffer.writeBytes(ByteBufUtil.decodeHexDump(startTime));
+ buffer.writeBytes(ByteBufUtil.decodeHexDump(endTime));
+ return buffer;
+ }
+
+ public String getIp() {
+ return ip;
+ }
+
+ public void setIp(String ip) {
+ this.ip = ip;
+ }
+
+ public int getTcpPort() {
+ return tcpPort;
+ }
+
+ public void setTcpPort(int tcpPort) {
+ this.tcpPort = tcpPort;
+ }
+
+ public int getUdpPort() {
+ return udpPort;
+ }
+
+ public void setUdpPort(int udpPort) {
+ this.udpPort = udpPort;
+ }
+
+ public int getChannel() {
+ return channel;
+ }
+
+ public void setChannel(int channel) {
+ this.channel = channel;
+ }
+
+ public int getType() {
+ return type;
+ }
+
+ public void setType(int type) {
+ this.type = type;
+ }
+
+ public int getRate() {
+ return rate;
+ }
+
+ public void setRate(int rate) {
+ this.rate = rate;
+ }
+
+ public int getStorageType() {
+ return storageType;
+ }
+
+ public void setStorageType(int storageType) {
+ this.storageType = storageType;
+ }
+
+ public int getPlaybackType() {
+ return playbackType;
+ }
+
+ public void setPlaybackType(int playbackType) {
+ this.playbackType = playbackType;
+ }
+
+ public int getPlaybackSpeed() {
+ return playbackSpeed;
+ }
+
+ public void setPlaybackSpeed(int playbackSpeed) {
+ this.playbackSpeed = playbackSpeed;
+ }
+
+ public String getStartTime() {
+ return startTime;
+ }
+
+ public void setStartTime(String startTime) {
+ this.startTime = startTime;
+ }
+
+ public String getEndTime() {
+ return endTime;
+ }
+
+ public void setEndTime(String endTime) {
+ this.endTime = endTime;
+ }
+
+ @Override
+ public String toString() {
+ return "J9201{" +
+ "ip='" + ip + '\'' +
+ ", tcpPort=" + tcpPort +
+ ", udpPort=" + udpPort +
+ ", channel=" + channel +
+ ", type=" + type +
+ ", rate=" + rate +
+ ", storageType=" + storageType +
+ ", playbackType=" + playbackType +
+ ", playbackSpeed=" + playbackSpeed +
+ ", startTime='" + startTime + '\'' +
+ ", endTime='" + endTime + '\'' +
+ '}';
+ }
+}
diff --git a/src/main/java/com/genersoft/iot/vmp/jt1078/proc/response/J9202.java b/src/main/java/com/genersoft/iot/vmp/jt1078/proc/response/J9202.java
new file mode 100644
index 0000000..7cb4e53
--- /dev/null
+++ b/src/main/java/com/genersoft/iot/vmp/jt1078/proc/response/J9202.java
@@ -0,0 +1,80 @@
+package com.genersoft.iot.vmp.jt1078.proc.response;
+
+import com.genersoft.iot.vmp.jt1078.annotation.MsgId;
+import io.netty.buffer.ByteBuf;
+import io.netty.buffer.ByteBufUtil;
+import io.netty.buffer.Unpooled;
+
+/**
+ * 骞冲彴涓嬪彂杩滅▼褰曞儚鍥炴斁鎺у埗
+ *
+ * @author QingtaiJiang
+ * @date 2023/4/28 10:37
+ * @email qingtaij@163.com
+ */
+@MsgId(id = "9202")
+public class J9202 extends Rs {
+ // 閫昏緫閫氶亾鍙�
+ private int channel;
+
+ // 鍥炴斁鎺у埗锛�0.寮�濮嬪洖鏀� 1.鏆傚仠鍥炴斁 2.缁撴潫鍥炴斁 3.蹇繘鍥炴斁 4.鍏抽敭甯у揩閫�鍥炴斁 5.鎷栧姩鍥炴斁 6.鍏抽敭甯ф挱鏀�
+ private int playbackType;
+
+ // 蹇繘鎴栧揩閫�鍊嶆暟锛�0.鏃犳晥 1.1鍊� 2.2鍊� 3.4鍊� 4.8鍊� 5.16鍊� (鍥炴斁鎺у埗涓�3鍜�4鏃�,姝ゅ瓧娈靛唴瀹规湁鏁�,鍚﹀垯缃�0)
+ private int playbackSpeed;
+
+ // 鎷栧姩鍥炴斁浣嶇疆(YYMMDDHHMMSS,鍥炴斁鎺у埗涓�5鏃�,姝ゅ瓧娈垫湁鏁�)
+ private String playbackTime;
+
+ @Override
+ public ByteBuf encode() {
+ ByteBuf buffer = Unpooled.buffer();
+ buffer.writeByte(channel);
+ buffer.writeByte(playbackType);
+ buffer.writeByte(playbackSpeed);
+ buffer.writeBytes(ByteBufUtil.decodeHexDump(playbackTime));
+ return buffer;
+ }
+
+ public int getChannel() {
+ return channel;
+ }
+
+ public void setChannel(int channel) {
+ this.channel = channel;
+ }
+
+ public int getPlaybackType() {
+ return playbackType;
+ }
+
+ public void setPlaybackType(int playbackType) {
+ this.playbackType = playbackType;
+ }
+
+ public int getPlaybackSpeed() {
+ return playbackSpeed;
+ }
+
+ public void setPlaybackSpeed(int playbackSpeed) {
+ this.playbackSpeed = playbackSpeed;
+ }
+
+ public String getPlaybackTime() {
+ return playbackTime;
+ }
+
+ public void setPlaybackTime(String playbackTime) {
+ this.playbackTime = playbackTime;
+ }
+
+ @Override
+ public String toString() {
+ return "J9202{" +
+ "channel=" + channel +
+ ", playbackType=" + playbackType +
+ ", playbackSpeed=" + playbackSpeed +
+ ", playbackTime='" + playbackTime + '\'' +
+ '}';
+ }
+}
diff --git a/src/main/java/com/genersoft/iot/vmp/jt1078/proc/response/J9205.java b/src/main/java/com/genersoft/iot/vmp/jt1078/proc/response/J9205.java
new file mode 100644
index 0000000..36b858e
--- /dev/null
+++ b/src/main/java/com/genersoft/iot/vmp/jt1078/proc/response/J9205.java
@@ -0,0 +1,94 @@
+package com.genersoft.iot.vmp.jt1078.proc.response;
+
+import com.genersoft.iot.vmp.jt1078.annotation.MsgId;
+import io.netty.buffer.ByteBuf;
+import io.netty.buffer.ByteBufUtil;
+import io.netty.buffer.Unpooled;
+
+/**
+ * 鏌ヨ璧勬簮鍒楄〃
+ *
+ * @author QingtaiJiang
+ * @date 2023/4/28 10:36
+ * @email qingtaij@163.com
+ */
+@MsgId(id = "9205")
+public class J9205 extends Rs {
+ // 閫昏緫閫氶亾鍙�
+ private int channelId;
+
+ // 寮�濮嬫椂闂碮YMMDDHHMMSS,鍏�0琛ㄧず鏃犺捣濮嬫椂闂�
+ private String startTime;
+
+ // 缁撴潫鏃堕棿YYMMDDHHMMSS,鍏�0琛ㄧず鏃犵粓姝㈡椂闂�
+ private String endTime;
+
+ // 鎶ヨ鏍囧織
+ private final int warnType = 0;
+
+ // 闊宠棰戣祫婧愮被鍨嬶細0.闊宠棰� 1.闊抽 2.瑙嗛 3.瑙嗛鎴栭煶瑙嗛
+ private int mediaType;
+
+ // 鐮佹祦绫诲瀷锛�0.鎵�鏈夌爜娴� 1.涓荤爜娴� 2.瀛愮爜娴�
+ private int streamType = 0;
+
+ // 瀛樺偍鍣ㄧ被鍨嬶細0.鎵�鏈夊瓨鍌ㄥ櫒 1.涓诲瓨鍌ㄥ櫒 2.鐏惧瀛樺偍鍣�
+ private int storageType = 0;
+
+ @Override
+ public ByteBuf encode() {
+ ByteBuf buffer = Unpooled.buffer();
+
+ buffer.writeByte(channelId);
+ buffer.writeBytes(ByteBufUtil.decodeHexDump(startTime));
+ buffer.writeBytes(ByteBufUtil.decodeHexDump(endTime));
+ buffer.writeLong(warnType);
+ buffer.writeByte(mediaType);
+ buffer.writeByte(streamType);
+ buffer.writeByte(storageType);
+
+ return buffer;
+ }
+
+
+ public void setChannelId(int channelId) {
+ this.channelId = channelId;
+ }
+
+ public void setStartTime(String startTime) {
+ this.startTime = startTime;
+ }
+
+ public void setEndTime(String endTime) {
+ this.endTime = endTime;
+ }
+
+ public void setMediaType(int mediaType) {
+ this.mediaType = mediaType;
+ }
+
+ public void setStreamType(int streamType) {
+ this.streamType = streamType;
+ }
+
+ public void setStorageType(int storageType) {
+ this.storageType = storageType;
+ }
+
+ public int getWarnType() {
+ return warnType;
+ }
+
+ @Override
+ public String toString() {
+ return "J9205{" +
+ "channelId=" + channelId +
+ ", startTime='" + startTime + '\'' +
+ ", endTime='" + endTime + '\'' +
+ ", warnType=" + warnType +
+ ", mediaType=" + mediaType +
+ ", streamType=" + streamType +
+ ", storageType=" + storageType +
+ '}';
+ }
+}
diff --git a/src/main/java/com/genersoft/iot/vmp/jt1078/session/SessionManager.java b/src/main/java/com/genersoft/iot/vmp/jt1078/session/SessionManager.java
index 9347249..c2876e5 100644
--- a/src/main/java/com/genersoft/iot/vmp/jt1078/session/SessionManager.java
+++ b/src/main/java/com/genersoft/iot/vmp/jt1078/session/SessionManager.java
@@ -76,13 +76,13 @@
Session session = this.get(cmd.getDevId());
if (session == null) {
log.error("DevId: {} not online!", cmd.getDevId());
- return "-1";
+ return null;
}
String requestKey = requestKey(cmd.getDevId(), cmd.getRespId(), cmd.getPackageNo());
SynchronousQueue<String> subscribe = subscribe(requestKey);
if (subscribe == null) {
log.error("DevId: {} key:{} send repaid", cmd.getDevId(), requestKey);
- return "-1";
+ return null;
}
session.writeObject(cmd);
try {
@@ -105,7 +105,7 @@
log.error("{}", e.getMessage(), e);
}
}
- log.warn("鏈壘鍒板搴斿洖澶嶆寚浠�,key:{} 娑堟伅:{} ", requestKey, data);
+ log.warn("Not find response,key:{} data:{} ", requestKey, data);
return false;
}
diff --git a/src/test/java/com/genersoft/iot/vmp/jt1078/JT1078ServerTest.java b/src/test/java/com/genersoft/iot/vmp/jt1078/JT1078ServerTest.java
new file mode 100644
index 0000000..8986f91
--- /dev/null
+++ b/src/test/java/com/genersoft/iot/vmp/jt1078/JT1078ServerTest.java
@@ -0,0 +1,103 @@
+package com.genersoft.iot.vmp.jt1078;
+
+import com.genersoft.iot.vmp.jt1078.cmd.JT1078Template;
+import com.genersoft.iot.vmp.jt1078.codec.netty.TcpServer;
+import com.genersoft.iot.vmp.jt1078.proc.response.J9102;
+import com.genersoft.iot.vmp.jt1078.proc.response.J9201;
+import com.genersoft.iot.vmp.jt1078.proc.response.J9202;
+import com.genersoft.iot.vmp.jt1078.proc.response.J9205;
+
+import java.util.Scanner;
+
+/**
+ * @author QingtaiJiang
+ * @date 2023/4/28 14:22
+ * @email qingtaij@163.com
+ */
+public class JT1078ServerTest {
+
+ private static final JT1078Template jt1078Template = new JT1078Template();
+
+ public static void main(String[] args) {
+ System.out.println("Starting jt1078 server...");
+ TcpServer tcpServer = new TcpServer(21078);
+ tcpServer.start();
+ System.out.println("Start jt1078 server success!");
+
+
+ Scanner s = new Scanner(System.in);
+ while (true) {
+ String code = s.nextLine();
+ switch (code) {
+ case "1":
+ test9102();
+ break;
+ case "2":
+ test9201();
+ break;
+ case "3":
+ test9202();
+ break;
+ case "4":
+ test9205();
+ break;
+ default:
+ break;
+ }
+ }
+ }
+
+ private static void test9102() {
+ J9102 j9102 = new J9102();
+ j9102.setChannel(1);
+ j9102.setCommand(0);
+ j9102.setCloseType(0);
+ j9102.setStreamType(0);
+
+ String s = jt1078Template.stopLive("18864197066", j9102, 6);
+ System.out.println(s);
+ }
+
+ private static void test9201() {
+ J9201 j9201 = new J9201();
+ j9201.setIp("192.168.1.1");
+ j9201.setChannel(1);
+ j9201.setTcpPort(7618);
+ j9201.setUdpPort(7618);
+ j9201.setType(0);
+ j9201.setRate(0);
+ j9201.setStorageType(0);
+ j9201.setPlaybackType(0);
+ j9201.setPlaybackSpeed(0);
+ j9201.setStartTime("230428134100");
+ j9201.setEndTime("230428134200");
+
+ String s = jt1078Template.startBackLive("18864197066", j9201, 6);
+ System.out.println(s);
+ }
+
+ private static void test9202() {
+ J9202 j9202 = new J9202();
+
+ j9202.setChannel(1);
+ j9202.setPlaybackType(2);
+ j9202.setPlaybackSpeed(0);
+ j9202.setPlaybackTime("230428134100");
+
+ String s = jt1078Template.controlBackLive("18864197066", j9202, 6);
+ System.out.println(s);
+ }
+
+ private static void test9205() {
+ J9205 j9205 = new J9205();
+ j9205.setChannelId(1);
+ j9205.setStartTime("230428134100");
+ j9205.setEndTime("230428134100");
+ j9205.setMediaType(0);
+ j9205.setStreamType(0);
+ j9205.setStorageType(0);
+
+ String s = jt1078Template.queryBackTime("18864197066", j9205, 6);
+ System.out.println(s);
+ }
+}
--
Gitblit v1.8.0