1078-修复断开连接时设备未下线的BUG

This commit is contained in:
panlinlin
2024-06-08 21:54:58 +08:00
parent 7ffe773175
commit dbb2492640
5 changed files with 59 additions and 8 deletions

View File

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

View File

@@ -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<ConnectCh
log.info("[JT-设备已连接] 终端ID {}", event.getPhoneNumber());
}else{
log.info("[JT-设备连接已断开] 终端ID {}", event.getPhoneNumber());
if(SessionManager.INSTANCE.get(event.getPhoneNumber()) != null) {
SessionManager.INSTANCE.get(event.getPhoneNumber()).unregister();
}
}
JTDevice device = service.getDevice(event.getPhoneNumber());
if (device != null) {

View File

@@ -141,9 +141,6 @@ public class jt1078ServiceImpl implements Ijt1078Service {
if (device == null) {
throw new ControllerException(ErrorCode.ERROR100.getCode(), "设备不存在");
}
if (SessionManager.INSTANCE.get(phoneNumber) == null) {
throw new ControllerException(ErrorCode.ERROR100.getCode(), "设备离线");
}
// 检查流是否已经存在,存在则返回
String playKey = VideoManagerConstants.INVITE_INFO_1078_PLAY + phoneNumber + ":" + channelId;
List<GeneralCallback<StreamInfo>> 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<GeneralCallback<StreamInfo>> generalCallbacks = inviteErrorCallbackMap.get(playKey);

View File

@@ -59,6 +59,7 @@ public enum SessionManager {
*/
protected void put(Object clientId, Session newSession) {
sessionMap.put(clientId, newSession);
System.out.println(sessionMap.size());
}

View File

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