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 70cf538b6..306b11ee7 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,10 @@ package com.genersoft.iot.vmp.jt1078.cmd; +import com.genersoft.iot.vmp.conf.exception.ControllerException; import com.genersoft.iot.vmp.jt1078.proc.entity.Cmd; import com.genersoft.iot.vmp.jt1078.proc.response.*; import com.genersoft.iot.vmp.jt1078.session.SessionManager; +import com.genersoft.iot.vmp.vmanager.bean.ErrorCode; import org.springframework.stereotype.Component; import java.util.Random; @@ -73,6 +75,12 @@ public class JT1078Template { private static final String H1003 = "1003"; private static final String H1205 = "1205"; + public void checkTerminalStatus(String devId){ + if (SessionManager.INSTANCE.get(devId) == null) { + throw new ControllerException(ErrorCode.ERROR100.getCode(), "终端不在线"); + } + } + /** * 开启直播视频 * @@ -80,6 +88,7 @@ public class JT1078Template { * @param j9101 开启视频参数 */ public Object startLive(String devId, J9101 j9101, Integer timeOut) { + checkTerminalStatus(devId); Cmd cmd = new Cmd.Builder() .setPhoneNumber(devId) .setPackageNo(randomInt()) @@ -97,6 +106,7 @@ public class JT1078Template { * @param j9102 关闭视频参数 */ public Object stopLive(String devId, J9102 j9102, Integer timeOut) { + checkTerminalStatus(devId); Cmd cmd = new Cmd.Builder() .setPhoneNumber(devId) .setPackageNo(randomInt()) @@ -114,6 +124,7 @@ public class JT1078Template { * @param j9205 查询音视频列表 */ public Object queryBackTime(String devId, J9205 j9205, Integer timeOut) { + checkTerminalStatus(devId); Cmd cmd = new Cmd.Builder() .setPhoneNumber(devId) .setPackageNo(randomInt()) @@ -131,6 +142,7 @@ public class JT1078Template { * @param j9201 视频回放参数 */ public Object startBackLive(String devId, J9201 j9201, Integer timeOut) { + checkTerminalStatus(devId); Cmd cmd = new Cmd.Builder() .setPhoneNumber(devId) .setPackageNo(randomInt()) @@ -148,6 +160,7 @@ public class JT1078Template { * @param j9202 控制视频回放参数 */ public Object controlBackLive(String devId, J9202 j9202, Integer timeOut) { + checkTerminalStatus(devId); Cmd cmd = new Cmd.Builder() .setPhoneNumber(devId) .setPackageNo(randomInt()) @@ -165,6 +178,7 @@ public class JT1078Template { * @param j9206 文件上传参数 */ public Object fileUpload(String devId, J9206 j9206, Integer timeOut) { + checkTerminalStatus(devId); Cmd cmd = new Cmd.Builder() .setPhoneNumber(devId) .setPackageNo(randomInt()) @@ -182,6 +196,7 @@ public class JT1078Template { * @param j9207 文件上传控制参数 */ public Object fileUploadControl(String devId, J9207 j9207, Integer timeOut) { + checkTerminalStatus(devId); Cmd cmd = new Cmd.Builder() .setPhoneNumber(devId) .setPackageNo(randomInt()) @@ -199,6 +214,7 @@ public class JT1078Template { * @param j9301 云台旋转参数 */ public Object ptzRotate(String devId, J9301 j9301, Integer timeOut) { + checkTerminalStatus(devId); Cmd cmd = new Cmd.Builder() .setPhoneNumber(devId) .setPackageNo(randomInt()) @@ -216,6 +232,7 @@ public class JT1078Template { * @param j9302 云台焦距控制参数 */ public Object ptzFocal(String devId, J9302 j9302, Integer timeOut) { + checkTerminalStatus(devId); Cmd cmd = new Cmd.Builder() .setPhoneNumber(devId) .setPackageNo(randomInt()) @@ -233,6 +250,7 @@ public class JT1078Template { * @param j9303 云台光圈控制参数 */ public Object ptzIris(String devId, J9303 j9303, Integer timeOut) { + checkTerminalStatus(devId); Cmd cmd = new Cmd.Builder() .setPhoneNumber(devId) .setPackageNo(randomInt()) @@ -250,6 +268,7 @@ public class JT1078Template { * @param j9304 云台雨刷控制参数 */ public Object ptzWiper(String devId, J9304 j9304, Integer timeOut) { + checkTerminalStatus(devId); Cmd cmd = new Cmd.Builder() .setPhoneNumber(devId) .setPackageNo(randomInt()) @@ -267,6 +286,7 @@ public class JT1078Template { * @param j9305 云台红外补光控制参数 */ public Object ptzSupplementaryLight(String devId, J9305 j9305, Integer timeOut) { + checkTerminalStatus(devId); Cmd cmd = new Cmd.Builder() .setPhoneNumber(devId) .setPackageNo(randomInt()) @@ -284,6 +304,7 @@ public class JT1078Template { * @param j9306 云台变倍控制参数 */ public Object ptzZoom(String devId, J9306 j9306, Integer timeOut) { + checkTerminalStatus(devId); Cmd cmd = new Cmd.Builder() .setPhoneNumber(devId) .setPackageNo(randomInt()) @@ -300,7 +321,7 @@ public class JT1078Template { * @param devId 设备号 */ public Object getDeviceConfig(String devId, J8104 j8104, Integer timeOut) { - + checkTerminalStatus(devId); Cmd cmd = new Cmd.Builder() .setPhoneNumber(devId) .setPackageNo(randomInt()) @@ -317,7 +338,7 @@ public class JT1078Template { * @param devId 设备号 */ public Object getDeviceSpecifyConfig(String devId, J8106 j8106, Integer timeOut) { - + checkTerminalStatus(devId); Cmd cmd = new Cmd.Builder() .setPhoneNumber(devId) .setPackageNo(randomInt()) @@ -334,7 +355,7 @@ public class JT1078Template { * @param devId 设备号 */ public Object setDeviceSpecifyConfig(String devId, J8103 j8103, Integer timeOut) { - + checkTerminalStatus(devId); Cmd cmd = new Cmd.Builder() .setPhoneNumber(devId) .setPackageNo(randomInt()) @@ -353,6 +374,7 @@ public class JT1078Template { * 设备控制 */ public Object deviceControl(String devId, J8105 j8105, int timeOut) { + checkTerminalStatus(devId); Cmd cmd = new Cmd.Builder() .setPhoneNumber(devId) .setPackageNo(randomInt()) @@ -367,6 +389,7 @@ public class JT1078Template { * 查询终端属性 */ public Object deviceAttribute(String devId, J8107 j8107, int timeOut) { + checkTerminalStatus(devId); Cmd cmd = new Cmd.Builder() .setPhoneNumber(devId) .setPackageNo(randomInt()) @@ -381,6 +404,7 @@ public class JT1078Template { * 位置信息查询 */ public Object queryPositionInfo(String devId, J8201 j8201, int timeOut) { + checkTerminalStatus(devId); Cmd cmd = new Cmd.Builder() .setPhoneNumber(devId) .setPackageNo(randomInt()) @@ -392,6 +416,7 @@ public class JT1078Template { } public Object tempPositionTrackingControl(String devId, J8202 j8202, int timeOut) { + checkTerminalStatus(devId); Cmd cmd = new Cmd.Builder() .setPhoneNumber(devId) .setPackageNo(randomInt()) @@ -403,6 +428,7 @@ public class JT1078Template { } public Object confirmationAlarmMessage(String devId, J8203 j8203, int timeOut) { + checkTerminalStatus(devId); Cmd cmd = new Cmd.Builder() .setPhoneNumber(devId) .setPackageNo(randomInt()) @@ -414,6 +440,7 @@ public class JT1078Template { } public Object linkDetection(String devId, J8204 j8204, int timeOut) { + checkTerminalStatus(devId); Cmd cmd = new Cmd.Builder() .setPhoneNumber(devId) .setPackageNo(randomInt()) @@ -425,6 +452,7 @@ public class JT1078Template { } public Object textMessage(String devId, J8300 j8300, int timeOut) { + checkTerminalStatus(devId); Cmd cmd = new Cmd.Builder() .setPhoneNumber(devId) .setPackageNo(randomInt()) @@ -436,6 +464,7 @@ public class JT1078Template { } public Object telephoneCallback(String devId, J8400 j8400, int timeOut) { + checkTerminalStatus(devId); Cmd cmd = new Cmd.Builder() .setPhoneNumber(devId) .setPackageNo(randomInt()) @@ -447,6 +476,7 @@ public class JT1078Template { } public Object setPhoneBook(String devId, J8401 j8401, int timeOut) { + checkTerminalStatus(devId); Cmd cmd = new Cmd.Builder() .setPhoneNumber(devId) .setPackageNo(randomInt()) @@ -458,6 +488,7 @@ public class JT1078Template { } public Object vehicleControl(String devId, J8500 j8500, int timeOut) { + checkTerminalStatus(devId); Cmd cmd = new Cmd.Builder() .setPhoneNumber(devId) .setPackageNo(randomInt()) @@ -469,6 +500,7 @@ public class JT1078Template { } public Object setAreaForCircle(String devId, J8600 j8600, int timeOut) { + checkTerminalStatus(devId); Cmd cmd = new Cmd.Builder() .setPhoneNumber(devId) .setPackageNo(randomInt()) @@ -480,6 +512,7 @@ public class JT1078Template { } public Object deleteAreaForCircle(String devId, J8601 j8601, int timeOut) { + checkTerminalStatus(devId); Cmd cmd = new Cmd.Builder() .setPhoneNumber(devId) .setPackageNo(randomInt()) @@ -491,6 +524,7 @@ public class JT1078Template { } public Object setAreaForRectangle(String devId, J8602 j8602, int timeOut) { + checkTerminalStatus(devId); Cmd cmd = new Cmd.Builder() .setPhoneNumber(devId) .setPackageNo(randomInt()) @@ -502,6 +536,7 @@ public class JT1078Template { } public Object deleteAreaForRectangle(String devId, J8603 j8603, int timeOut) { + checkTerminalStatus(devId); Cmd cmd = new Cmd.Builder() .setPhoneNumber(devId) .setPackageNo(randomInt()) @@ -513,6 +548,7 @@ public class JT1078Template { } public Object setAreaForPolygon(String devId, J8604 j8604, int timeOut) { + checkTerminalStatus(devId); Cmd cmd = new Cmd.Builder() .setPhoneNumber(devId) .setPackageNo(randomInt()) @@ -524,6 +560,7 @@ public class JT1078Template { } public Object deleteAreaForPolygon(String devId, J8605 j8605, int timeOut) { + checkTerminalStatus(devId); Cmd cmd = new Cmd.Builder() .setPhoneNumber(devId) .setPackageNo(randomInt()) @@ -535,6 +572,7 @@ public class JT1078Template { } public Object setRoute(String devId, J8606 j8606, int timeOut) { + checkTerminalStatus(devId); Cmd cmd = new Cmd.Builder() .setPhoneNumber(devId) .setPackageNo(randomInt()) @@ -546,6 +584,7 @@ public class JT1078Template { } public Object deleteRoute(String devId, J8607 j8607, int timeOut) { + checkTerminalStatus(devId); Cmd cmd = new Cmd.Builder() .setPhoneNumber(devId) .setPackageNo(randomInt()) @@ -557,6 +596,7 @@ public class JT1078Template { } public Object queryAreaOrRoute(String devId, J8608 j8608, int timeOut) { + checkTerminalStatus(devId); Cmd cmd = new Cmd.Builder() .setPhoneNumber(devId) .setPackageNo(randomInt()) @@ -568,6 +608,7 @@ public class JT1078Template { } public Object queryDriverInformation(String devId, J8702 j8702, int timeOut) { + checkTerminalStatus(devId); Cmd cmd = new Cmd.Builder() .setPhoneNumber(devId) .setPackageNo(randomInt()) @@ -579,6 +620,7 @@ public class JT1078Template { } public Object shooting(String devId, J8801 j8801, int timeOut) { + checkTerminalStatus(devId); Cmd cmd = new Cmd.Builder() .setPhoneNumber(devId) .setPackageNo(randomInt()) @@ -590,6 +632,7 @@ public class JT1078Template { } public Object queryMediaData(String devId, J8802 j8802, int timeOut) { + checkTerminalStatus(devId); Cmd cmd = new Cmd.Builder() .setPhoneNumber(devId) .setPackageNo(randomInt()) @@ -601,6 +644,7 @@ public class JT1078Template { } public Object uploadMediaData(String devId, J8803 j8803, int timeOut) { + checkTerminalStatus(devId); Cmd cmd = new Cmd.Builder() .setPhoneNumber(devId) .setPackageNo(randomInt()) @@ -612,6 +656,7 @@ public class JT1078Template { } public Object record(String devId, J8804 j8804, int timeOut) { + checkTerminalStatus(devId); Cmd cmd = new Cmd.Builder() .setPhoneNumber(devId) .setPackageNo(randomInt()) @@ -623,6 +668,7 @@ public class JT1078Template { } public Object uploadMediaDataForSingle(String devId, J8805 j8805, int timeOut) { + checkTerminalStatus(devId); Cmd cmd = new Cmd.Builder() .setPhoneNumber(devId) .setPackageNo(randomInt()) @@ -634,6 +680,7 @@ public class JT1078Template { } public Object queryMediaAttribute(String devId, J9003 j9003, int timeOut) { + checkTerminalStatus(devId); Cmd cmd = new Cmd.Builder() .setPhoneNumber(devId) .setPackageNo(randomInt()) diff --git a/src/main/java/com/genersoft/iot/vmp/jt1078/event/eventListener/ConnectChangeEventListener.java b/src/main/java/com/genersoft/iot/vmp/jt1078/event/eventListener/ConnectChangeEventListener.java index 88d569713..2392262aa 100644 --- a/src/main/java/com/genersoft/iot/vmp/jt1078/event/eventListener/ConnectChangeEventListener.java +++ b/src/main/java/com/genersoft/iot/vmp/jt1078/event/eventListener/ConnectChangeEventListener.java @@ -5,6 +5,7 @@ import com.genersoft.iot.vmp.jt1078.event.ConnectChangeEvent; import com.genersoft.iot.vmp.jt1078.event.RegisterEvent; import com.genersoft.iot.vmp.jt1078.proc.request.J0003; import com.genersoft.iot.vmp.jt1078.service.Ijt1078Service; +import com.genersoft.iot.vmp.jt1078.session.SessionManager; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -25,6 +26,9 @@ public class ConnectChangeEventListener implements ApplicationListener> errorCallbacks = inviteErrorCallbackMap.computeIfAbsent(playKey, k -> new ArrayList<>()); @@ -236,6 +233,7 @@ public class jt1078ServiceImpl implements Ijt1078Service { if (streamInfo != null) { // 关闭rtpServer mediaServerService.closeRTPServer(streamInfo.getMediaServerId(), streamInfo.getStream()); + redisTemplate.delete(playKey); } // 清理回调 List> generalCallbacks = inviteErrorCallbackMap.get(playKey); 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 7e262961a..4d20e9c2b 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 @@ -59,6 +59,7 @@ public enum SessionManager { */ protected void put(Object clientId, Session newSession) { sessionMap.put(clientId, newSession); + System.out.println(sessionMap.size()); } diff --git a/web_src/src/components/JTChannelList.vue b/web_src/src/components/JTChannelList.vue index 6b4bad514..fa7046df4 100755 --- a/web_src/src/components/JTChannelList.vue +++ b/web_src/src/components/JTChannelList.vue @@ -261,9 +261,10 @@ export default { var that = this; this.$axios({ method: 'get', - url: '/api/play/stop/' + this.deviceId + "/" + itemData.channelId, + url: '/api/jt1078/live/stop', params: { - isSubStream: this.isSubStream + phoneNumber: this.device.phoneNumber, + channelId: itemData.channelId, } }).then(function (res) { that.initData();