From bb226c431e28ffdda284ba2420a93cf4ed4e0c30 Mon Sep 17 00:00:00 2001 From: 648540858 <648540858@qq.com> Date: Tue, 2 Nov 2021 16:50:22 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E8=AE=A2=E9=98=85sip?= =?UTF-8?q?=E6=B6=88=E6=81=AF=E5=AF=BC=E8=87=B4=E7=9A=84=E5=86=85=E5=AD=98?= =?UTF-8?q?=E6=BA=A2=E5=87=BA=E4=BB=A5=E5=8F=8A=E5=BD=95=E5=83=8F=E5=9B=9E?= =?UTF-8?q?=E6=94=BE=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../genersoft/iot/vmp/conf/WVPTimerTask.java | 8 +- .../genersoft/iot/vmp/gb28181/SipLayer.java | 24 ++++- .../iot/vmp/gb28181/event/SipSubscribe.java | 87 ++++++++++++++++++- .../PlatformKeepaliveExpireEventLister.java | 4 +- .../transmit/cmd/impl/SIPCommander.java | 24 +++-- .../cmd/impl/SIPCommanderFroPlatform.java | 2 +- .../request/impl/InviteRequestProcessor.java | 2 +- .../request/impl/MessageRequestProcessor.java | 2 +- .../iot/vmp/service/impl/PlayServiceImpl.java | 19 ++-- .../MobilePositionController.java | 3 +- .../vmanager/gb28181/device/DeviceConfig.java | 6 +- .../gb28181/device/DeviceControl.java | 12 +-- .../vmanager/gb28181/device/DeviceQuery.java | 9 +- .../vmanager/gb28181/play/PlayController.java | 3 +- .../gb28181/playback/DownloadController.java | 5 +- .../gb28181/playback/PlaybackController.java | 7 +- .../vmanager/gb28181/ptz/PtzController.java | 3 +- 17 files changed, 160 insertions(+), 60 deletions(-) diff --git a/src/main/java/com/genersoft/iot/vmp/conf/WVPTimerTask.java b/src/main/java/com/genersoft/iot/vmp/conf/WVPTimerTask.java index 79ca77b1..72f0db6c 100644 --- a/src/main/java/com/genersoft/iot/vmp/conf/WVPTimerTask.java +++ b/src/main/java/com/genersoft/iot/vmp/conf/WVPTimerTask.java @@ -17,8 +17,8 @@ public class WVPTimerTask { @Autowired private MediaConfig mediaConfig; - @Scheduled(cron="0/2 * * * * ? ") //每3秒执行一次 - public void execute(){ -// redisCatchStorage.updateWVPInfo(); - } +// @Scheduled(cron="0/2 * * * * ? ") //每3秒执行一次 +// public void execute(){ +//// redisCatchStorage.updateWVPInfo(); +// } } diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/SipLayer.java b/src/main/java/com/genersoft/iot/vmp/gb28181/SipLayer.java index fb1aae24..1afabb7c 100644 --- a/src/main/java/com/genersoft/iot/vmp/gb28181/SipLayer.java +++ b/src/main/java/com/genersoft/iot/vmp/gb28181/SipLayer.java @@ -9,6 +9,7 @@ import java.util.concurrent.TimeUnit; import javax.sip.*; import javax.sip.header.CallIdHeader; +import javax.sip.header.Header; import javax.sip.message.Response; import com.genersoft.iot.vmp.gb28181.event.SipSubscribe; @@ -168,7 +169,8 @@ public class SipLayer implements SipListener { if (callIdHeader != null) { SipSubscribe.Event subscribe = sipSubscribe.getOkSubscribe(callIdHeader.getCallId()); if (subscribe != null) { - subscribe.response(evt); + SipSubscribe.EventResult eventResult = new SipSubscribe.EventResult(evt); + subscribe.response(eventResult); } } } @@ -181,7 +183,8 @@ public class SipLayer implements SipListener { if (callIdHeader != null) { SipSubscribe.Event subscribe = sipSubscribe.getErrorSubscribe(callIdHeader.getCallId()); if (subscribe != null) { - subscribe.response(evt); + SipSubscribe.EventResult eventResult = new SipSubscribe.EventResult(evt); + subscribe.response(eventResult); } } } @@ -204,7 +207,11 @@ public class SipLayer implements SipListener { @Override public void processTimeout(TimeoutEvent timeoutEvent) { // TODO Auto-generated method stub - + CallIdHeader callIdHeader = timeoutEvent.getClientTransaction().getDialog().getCallId(); + String callId = callIdHeader.getCallId(); + SipSubscribe.Event errorSubscribe = sipSubscribe.getErrorSubscribe(callId); + SipSubscribe.EventResult timeoutEventEventResult = new SipSubscribe.EventResult<>(timeoutEvent); + errorSubscribe.response(timeoutEventEventResult); } /** @@ -220,6 +227,7 @@ public class SipLayer implements SipListener { @Override public void processIOException(IOExceptionEvent exceptionEvent) { // TODO Auto-generated method stub + } /** @@ -235,6 +243,11 @@ public class SipLayer implements SipListener { @Override public void processTransactionTerminated(TransactionTerminatedEvent transactionTerminatedEvent) { // TODO Auto-generated method stub +// CallIdHeader callIdHeader = transactionTerminatedEvent.getClientTransaction().getDialog().getCallId(); +// String callId = callIdHeader.getCallId(); +// SipSubscribe.Event errorSubscribe = sipSubscribe.getErrorSubscribe(callId); +// SipSubscribe.EventResult eventResult = new SipSubscribe.EventResult<>(transactionTerminatedEvent); +// errorSubscribe.response(eventResult); } /** @@ -250,6 +263,11 @@ public class SipLayer implements SipListener { @Override public void processDialogTerminated(DialogTerminatedEvent dialogTerminatedEvent) { // TODO Auto-generated method stub +// CallIdHeader callIdHeader = dialogTerminatedEvent.getDialog().getCallId(); +// String callId = callIdHeader.getCallId(); +// SipSubscribe.Event errorSubscribe = sipSubscribe.getErrorSubscribe(callId); +// SipSubscribe.EventResult eventResult = new SipSubscribe.EventResult<>(dialogTerminatedEvent); +// errorSubscribe.response(eventResult); } diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/event/SipSubscribe.java b/src/main/java/com/genersoft/iot/vmp/gb28181/event/SipSubscribe.java index e00a59fc..377cd94b 100644 --- a/src/main/java/com/genersoft/iot/vmp/gb28181/event/SipSubscribe.java +++ b/src/main/java/com/genersoft/iot/vmp/gb28181/event/SipSubscribe.java @@ -1,38 +1,121 @@ package com.genersoft.iot.vmp.gb28181.event; +import com.genersoft.iot.vmp.gb28181.transmit.cmd.impl.SIPCommander; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; -import javax.sip.ResponseEvent; +import javax.sip.*; +import java.util.Calendar; +import java.util.Date; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; @Component public class SipSubscribe { + private final Logger logger = LoggerFactory.getLogger(SipSubscribe.class); + private Map errorSubscribes = new ConcurrentHashMap<>(); private Map okSubscribes = new ConcurrentHashMap<>(); + private Map timeSubscribes = new ConcurrentHashMap<>(); + +// @Scheduled(cron="*/5 * * * * ?") //每五秒执行一次 + @Scheduled(cron="0 * */1 * * ?") //每小时执行一次 + public void execute(){ + logger.info("[定时任务] 清理过期的订阅信息"); + Calendar calendar = Calendar.getInstance(); + calendar.setTime(new Date()); + calendar.set(Calendar.HOUR, calendar.get(Calendar.HOUR) - 1); + for (String key : timeSubscribes.keySet()) { + if (timeSubscribes.get(key).before(calendar.getTime())){ + logger.info("[定时任务] 清理过期的订阅信息: {}", key); + errorSubscribes.remove(key); + okSubscribes.remove(key); + timeSubscribes.remove(key); + } + } + } + public interface Event { - void response(ResponseEvent event); + void response(EventResult eventResult); + } + + public static class EventResult{ + public int statusCode; + public String type; + public String msg; + public String callId; + public Dialog dialog; + public EventObject event; + + public EventResult() { + } + + public EventResult(EventObject event) { + this.event = event; + if (event instanceof ResponseEvent) { + ResponseEvent responseEvent = (ResponseEvent)event; + this.type = "response"; + this.msg = responseEvent.getResponse().getReasonPhrase(); + this.statusCode = responseEvent.getResponse().getStatusCode(); + this.callId = responseEvent.getDialog().getCallId().getCallId(); + this.dialog = responseEvent.getDialog(); + }else if (event instanceof TimeoutEvent) { + TimeoutEvent timeoutEvent = (TimeoutEvent)event; + this.type = "timeout"; + this.msg = "消息超时未回复"; + this.statusCode = -1024; + this.callId = timeoutEvent.getClientTransaction().getDialog().getCallId().getCallId(); + this.dialog = timeoutEvent.getClientTransaction().getDialog(); + }else if (event instanceof TransactionTerminatedEvent) { + TransactionTerminatedEvent transactionTerminatedEvent = (TransactionTerminatedEvent)event; + this.type = "transactionTerminated"; + this.msg = "事务已结束"; + this.statusCode = -1024; + this.callId = transactionTerminatedEvent.getClientTransaction().getDialog().getCallId().getCallId(); + this.dialog = transactionTerminatedEvent.getClientTransaction().getDialog(); + }else if (event instanceof DialogTerminatedEvent) { + DialogTerminatedEvent dialogTerminatedEvent = (DialogTerminatedEvent)event; + this.type = "dialogTerminated"; + this.msg = "会话已结束"; + this.statusCode = -1024; + this.callId = dialogTerminatedEvent.getDialog().getCallId().getCallId(); + this.dialog = dialogTerminatedEvent.getDialog(); + } + } } public void addErrorSubscribe(String key, SipSubscribe.Event event) { errorSubscribes.put(key, event); + timeSubscribes.put(key, new Date()); } public void addOkSubscribe(String key, SipSubscribe.Event event) { okSubscribes.put(key, event); + timeSubscribes.put(key, new Date()); } public SipSubscribe.Event getErrorSubscribe(String key) { return errorSubscribes.get(key); } + public void removeErrorSubscribe(String key) { + errorSubscribes.remove(key); + timeSubscribes.remove(key); + } + public SipSubscribe.Event getOkSubscribe(String key) { return okSubscribes.get(key); } + public void removeOkSubscribe(String key) { + okSubscribes.remove(key); + timeSubscribes.remove(key); + } public int getErrorSubscribesSize(){ return errorSubscribes.size(); } diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/event/platformKeepaliveExpire/PlatformKeepaliveExpireEventLister.java b/src/main/java/com/genersoft/iot/vmp/gb28181/event/platformKeepaliveExpire/PlatformKeepaliveExpireEventLister.java index 480ed1d9..801e1259 100644 --- a/src/main/java/com/genersoft/iot/vmp/gb28181/event/platformKeepaliveExpire/PlatformKeepaliveExpireEventLister.java +++ b/src/main/java/com/genersoft/iot/vmp/gb28181/event/platformKeepaliveExpire/PlatformKeepaliveExpireEventLister.java @@ -75,8 +75,8 @@ public class PlatformKeepaliveExpireEventLister implements ApplicationListener

{ - if (responseEvent.getResponse().getStatusCode() == Response.OK) { + sipSubscribe.addOkSubscribe(callId, (SipSubscribe.EventResult eventResult) ->{ + if (eventResult.statusCode == Response.OK) { // 收到心跳响应信息, parentPlatformCatch.setKeepAliveReply(0); redisCatchStorage.updatePlatformCatchInfo(parentPlatformCatch); diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/impl/SIPCommander.java b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/impl/SIPCommander.java index 6f67c22b..0d36d527 100644 --- a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/impl/SIPCommander.java +++ b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/impl/SIPCommander.java @@ -427,8 +427,8 @@ public class SIPCommander implements ISIPCommander { mediaServerService.releaseSsrc(mediaServerItem, ssrcInfo.getSsrc()); errorEvent.response(e); }), e ->{ - streamSession.put(device.getDeviceId(), channelId ,ssrcInfo.getSsrc(), finalStreamId, mediaServerItem.getId(),e.getClientTransaction()); - streamSession.put(device.getDeviceId(), channelId , e.getDialog()); + streamSession.put(device.getDeviceId(), channelId ,ssrcInfo.getSsrc(), finalStreamId, mediaServerItem.getId(), ((ResponseEvent)e.event).getClientTransaction()); + streamSession.put(device.getDeviceId(), channelId , e.dialog); }); @@ -535,9 +535,9 @@ public class SIPCommander implements ISIPCommander { Request request = headerProvider.createPlaybackInviteRequest(device, channelId, content.toString(), null, "fromplybck" + tm, null, callIdHeader, ssrcInfo.getSsrc()); transmitRequest(device, request, errorEvent, okEvent -> { - Dialog dialog = okEvent.getClientTransaction().getDialog(); - streamSession.put(device.getDeviceId(), channelId, ssrcInfo.getSsrc(), ssrcInfo.getStreamId(), mediaServerItem.getId(), okEvent.getClientTransaction()); - streamSession.put(device.getDeviceId(), channelId, dialog); + ResponseEvent responseEvent = (ResponseEvent) okEvent.event; + streamSession.put(device.getDeviceId(), channelId, ssrcInfo.getSsrc(), ssrcInfo.getStreamId(), mediaServerItem.getId(), responseEvent.getClientTransaction()); + streamSession.put(device.getDeviceId(), channelId, okEvent.dialog); }); } catch ( SipException | ParseException | InvalidArgumentException e) { e.printStackTrace(); @@ -667,6 +667,10 @@ public class SIPCommander implements ISIPCommander { ClientTransaction transaction = streamSession.getTransaction(deviceId, channelId); if (transaction == null) { logger.warn("[ {} -> {}]停止视频流的时候发现事务已丢失", deviceId, channelId); + SipSubscribe.EventResult eventResult = new SipSubscribe.EventResult<>(); + if (okEvent != null) { + okEvent.response(eventResult); + } return; } SIPDialog dialog = streamSession.getDialog(deviceId, channelId); @@ -1506,11 +1510,17 @@ public class SIPCommander implements ISIPCommander { CallIdHeader callIdHeader = (CallIdHeader)request.getHeader(CallIdHeader.NAME); // 添加错误订阅 if (errorEvent != null) { - sipSubscribe.addErrorSubscribe(callIdHeader.getCallId(), errorEvent); + sipSubscribe.addErrorSubscribe(callIdHeader.getCallId(), (eventResult -> { + errorEvent.response(eventResult); + sipSubscribe.removeErrorSubscribe(eventResult.callId); + })); } // 添加订阅 if (okEvent != null) { - sipSubscribe.addOkSubscribe(callIdHeader.getCallId(), okEvent); + sipSubscribe.addOkSubscribe(callIdHeader.getCallId(), eventResult ->{ + okEvent.response(eventResult); + sipSubscribe.removeOkSubscribe(eventResult.callId); + }); } clientTransaction.sendRequest(); diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/impl/SIPCommanderFroPlatform.java b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/impl/SIPCommanderFroPlatform.java index 56ba0bac..65348ab6 100644 --- a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/impl/SIPCommanderFroPlatform.java +++ b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/impl/SIPCommanderFroPlatform.java @@ -100,7 +100,7 @@ public class SIPCommanderFroPlatform implements ISIPCommanderForPlatform { if (event != null) { logger.info("向上级平台 [ {} ] 注册发上错误: {} ", parentPlatform.getServerGBId(), - event.getResponse().getReasonPhrase()); + event.msg); } if (errorEvent != null ) { errorEvent.response(event); diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/request/impl/InviteRequestProcessor.java b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/request/impl/InviteRequestProcessor.java index 3d21c8d6..06ae3d8b 100644 --- a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/request/impl/InviteRequestProcessor.java +++ b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/request/impl/InviteRequestProcessor.java @@ -235,7 +235,7 @@ public class InviteRequestProcessor extends SIPRequestAbstractProcessor { // 未知错误。直接转发设备点播的错误 Response response = null; try { - response = getMessageFactory().createResponse(event.getResponse().getStatusCode(), evt.getRequest()); + response = getMessageFactory().createResponse(event.statusCode, evt.getRequest()); ServerTransaction serverTransaction = getServerTransaction(evt); serverTransaction.sendResponse(response); if (serverTransaction.getDialog() != null) serverTransaction.getDialog().delete(); diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/request/impl/MessageRequestProcessor.java b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/request/impl/MessageRequestProcessor.java index 51aa2dfc..285ccd38 100644 --- a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/request/impl/MessageRequestProcessor.java +++ b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/request/impl/MessageRequestProcessor.java @@ -806,7 +806,7 @@ public class MessageRequestProcessor extends SIPRequestAbstractProcessor { storager.insertMobilePosition(mobilePosition); } } - System.out.println("存储报警信息、报警分类"); + logger.debug("存储报警信息、报警分类"); // 存储报警信息、报警分类 deviceAlarmService.add(deviceAlarm); diff --git a/src/main/java/com/genersoft/iot/vmp/service/impl/PlayServiceImpl.java b/src/main/java/com/genersoft/iot/vmp/service/impl/PlayServiceImpl.java index a22ab8a1..d7b8ffe8 100644 --- a/src/main/java/com/genersoft/iot/vmp/service/impl/PlayServiceImpl.java +++ b/src/main/java/com/genersoft/iot/vmp/service/impl/PlayServiceImpl.java @@ -34,6 +34,10 @@ import org.springframework.stereotype.Service; import org.springframework.util.ResourceUtils; import org.springframework.web.context.request.async.DeferredResult; +import javax.sip.DialogTerminatedEvent; +import javax.sip.ResponseEvent; +import javax.sip.TimeoutEvent; +import javax.sip.TransactionTerminatedEvent; import javax.sip.message.Response; import java.io.FileNotFoundException; import java.util.UUID; @@ -170,18 +174,18 @@ public class PlayServiceImpl implements IPlayService { hookEvent.response(mediaServerItem, response); } }, (event) -> { - // 点播返回sip错误 - Response response = event.getResponse(); - mediaServerService.closeRTPServer(playResult.getDevice(), channelId); WVPResult wvpResult = new WVPResult(); wvpResult.setCode(-1); - wvpResult.setMsg(String.format("点播失败, 错误码: %s, %s", response.getStatusCode(), response.getReasonPhrase())); + // 点播返回sip错误 + mediaServerService.closeRTPServer(playResult.getDevice(), channelId); + wvpResult.setMsg(String.format("点播失败, 错误码: %s, %s", event.statusCode, event.msg)); msg.setData(wvpResult); resultHolder.invokeAllResult(msg); if (errorEvent != null) { errorEvent.response(event); } + }); } else { String streamId = streamInfo.getStreamId(); @@ -225,11 +229,9 @@ public class PlayServiceImpl implements IPlayService { onPublishHandlerForPlay(mediaServerItemInuse, response, deviceId, channelId, uuid.toString()); }, (event) -> { mediaServerService.closeRTPServer(playResult.getDevice(), channelId); - Response response = event.getResponse(); - WVPResult wvpResult = new WVPResult(); wvpResult.setCode(-1); - wvpResult.setMsg(String.format("点播失败, 错误码: %s, %s", response.getStatusCode(), response.getReasonPhrase())); + wvpResult.setMsg(String.format("点播失败, 错误码: %s, %s", event.statusCode, event.msg)); msg.setData(wvpResult); resultHolder.invokeAllResult(msg); }); @@ -287,7 +289,8 @@ public class PlayServiceImpl implements IPlayService { @Override public void onPublishHandlerForPlayBack(MediaServerItem mediaServerItem, JSONObject resonse, String deviceId, String channelId, String uuid) { RequestMessage msg = new RequestMessage(); - msg.setId(DeferredResultHolder.CALLBACK_CMD_PLAY + uuid); + msg.setKey(DeferredResultHolder.CALLBACK_CMD_PLAY + deviceId + channelId); + msg.setId(uuid); StreamInfo streamInfo = onPublishHandler(mediaServerItem, resonse, deviceId, channelId, uuid); if (streamInfo != null) { redisCatchStorage.startPlayback(streamInfo); diff --git a/src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/MobilePosition/MobilePositionController.java b/src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/MobilePosition/MobilePositionController.java index 8d5a37f9..6b4f2b78 100644 --- a/src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/MobilePosition/MobilePositionController.java +++ b/src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/MobilePosition/MobilePositionController.java @@ -115,11 +115,10 @@ public class MobilePositionController { String uuid = UUID.randomUUID().toString(); String key = DeferredResultHolder.CALLBACK_CMD_MOBILEPOSITION + deviceId; cmder.mobilePostitionQuery(device, event -> { - Response response = event.getResponse(); RequestMessage msg = new RequestMessage(); msg.setId(uuid); msg.setKey(key); - msg.setData(String.format("获取移动位置信息失败,错误码: %s, %s", response.getStatusCode(), response.getReasonPhrase())); + msg.setData(String.format("获取移动位置信息失败,错误码: %s, %s", event.statusCode, event.msg)); resultHolder.invokeResult(msg); }); DeferredResult> result = new DeferredResult>(5*1000L); diff --git a/src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/device/DeviceConfig.java b/src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/device/DeviceConfig.java index 1aa28cb5..b3de5af8 100644 --- a/src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/device/DeviceConfig.java +++ b/src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/device/DeviceConfig.java @@ -80,11 +80,10 @@ public class DeviceConfig { String uuid = UUID.randomUUID().toString(); String key = DeferredResultHolder.CALLBACK_CMD_DEVICECONFIG + deviceId + channelId; cmder.deviceBasicConfigCmd(device, channelId, name, expiration, heartBeatInterval, heartBeatCount, event -> { - Response response = event.getResponse(); RequestMessage msg = new RequestMessage(); msg.setId(uuid); msg.setKey(key); - msg.setData(String.format("设备配置操作失败,错误码: %s, %s", response.getStatusCode(), response.getReasonPhrase())); + msg.setData(String.format("设备配置操作失败,错误码: %s, %s", event.statusCode, event.msg)); resultHolder.invokeResult(msg); }); DeferredResult> result = new DeferredResult>(3 * 1000L); @@ -129,11 +128,10 @@ public class DeviceConfig { String uuid = UUID.randomUUID().toString(); Device device = storager.queryVideoDevice(deviceId); cmder.deviceConfigQuery(device, channelId, configType, event -> { - Response response = event.getResponse(); RequestMessage msg = new RequestMessage(); msg.setId(uuid); msg.setKey(key); - msg.setData(String.format("获取设备配置失败,错误码: %s, %s", response.getStatusCode(), response.getReasonPhrase())); + msg.setData(String.format("获取设备配置失败,错误码: %s, %s", event.statusCode, event.msg)); resultHolder.invokeResult(msg); }); DeferredResult> result = new DeferredResult> (3 * 1000L); diff --git a/src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/device/DeviceControl.java b/src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/device/DeviceControl.java index 3b34c7d2..54b49550 100644 --- a/src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/device/DeviceControl.java +++ b/src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/device/DeviceControl.java @@ -113,11 +113,10 @@ public class DeviceControl { return result; } cmder.recordCmd(device, channelId, recordCmdStr, event -> { - Response response = event.getResponse(); RequestMessage msg = new RequestMessage(); msg.setId(uuid); msg.setKey(key); - msg.setData(String.format("开始/停止录像操作失败,错误码: %s, %s", response.getStatusCode(), response.getReasonPhrase())); + msg.setData(String.format("开始/停止录像操作失败,错误码: %s, %s", event.statusCode, event.msg)); resultHolder.invokeAllResult(msg); }); @@ -146,11 +145,10 @@ public class DeviceControl { String key = DeferredResultHolder.CALLBACK_CMD_DEVICECONTROL + deviceId + channelId; String uuid =UUID.randomUUID().toString(); cmder.guardCmd(device, guardCmdStr, event -> { - Response response = event.getResponse(); RequestMessage msg = new RequestMessage(); msg.setId(uuid); msg.setKey(key); - msg.setData(String.format("布防/撤防操作失败,错误码: %s, %s", response.getStatusCode(), response.getReasonPhrase())); + msg.setData(String.format("布防/撤防操作失败,错误码: %s, %s", event.statusCode, event.msg)); resultHolder.invokeResult(msg); }); DeferredResult> result = new DeferredResult>(3 * 1000L); @@ -193,11 +191,10 @@ public class DeviceControl { String uuid = UUID.randomUUID().toString(); String key = DeferredResultHolder.CALLBACK_CMD_DEVICECONTROL + deviceId + channelId; cmder.alarmCmd(device, alarmMethod, alarmType, event -> { - Response response = event.getResponse(); RequestMessage msg = new RequestMessage(); msg.setId(uuid); msg.setKey(key); - msg.setData(String.format("报警复位操作失败,错误码: %s, %s", response.getStatusCode(), response.getReasonPhrase())); + msg.setData(String.format("报警复位操作失败,错误码: %s, %s", event.statusCode, event.msg)); resultHolder.invokeResult(msg); }); DeferredResult> result = new DeferredResult>(3 * 1000L); @@ -276,11 +273,10 @@ public class DeviceControl { String uuid = UUID.randomUUID().toString(); Device device = storager.queryVideoDevice(deviceId); cmder.homePositionCmd(device, channelId, enabled, resetTime, presetIndex, event -> { - Response response = event.getResponse(); RequestMessage msg = new RequestMessage(); msg.setId(uuid); msg.setKey(key); - msg.setData(String.format("看守位控制操作失败,错误码: %s, %s", response.getStatusCode(), response.getReasonPhrase())); + msg.setData(String.format("看守位控制操作失败,错误码: %s, %s", event.statusCode, event.msg)); resultHolder.invokeResult(msg); }); DeferredResult> result = new DeferredResult>(3 * 1000L); diff --git a/src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/device/DeviceQuery.java b/src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/device/DeviceQuery.java index 359fcbe5..43b03783 100644 --- a/src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/device/DeviceQuery.java +++ b/src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/device/DeviceQuery.java @@ -161,11 +161,10 @@ public class DeviceQuery { return result; } cmder.catalogQuery(device, event -> { - Response response = event.getResponse(); RequestMessage msg = new RequestMessage(); msg.setKey(key); msg.setId(uuid); - msg.setData(String.format("同步通道失败,错误码: %s, %s", response.getStatusCode(), response.getReasonPhrase())); + msg.setData(String.format("同步通道失败,错误码: %s, %s", event.statusCode, event.msg)); resultHolder.invokeAllResult(msg); }); @@ -329,11 +328,10 @@ public class DeviceQuery { String uuid = UUID.randomUUID().toString(); String key = DeferredResultHolder.CALLBACK_CMD_DEVICESTATUS + deviceId; cmder.deviceStatusQuery(device, event -> { - Response response = event.getResponse(); RequestMessage msg = new RequestMessage(); msg.setId(uuid); msg.setKey(key); - msg.setData(String.format("获取设备状态失败,错误码: %s, %s", response.getStatusCode(), response.getReasonPhrase())); + msg.setData(String.format("获取设备状态失败,错误码: %s, %s", event.statusCode, event.msg)); resultHolder.invokeResult(msg); }); DeferredResult> result = new DeferredResult>(2*1000L); @@ -386,11 +384,10 @@ public class DeviceQuery { String key = DeferredResultHolder.CALLBACK_CMD_ALARM + deviceId; String uuid = UUID.randomUUID().toString(); cmder.alarmInfoQuery(device, startPriority, endPriority, alarmMethod, alarmType, startTime, endTime, event -> { - Response response = event.getResponse(); RequestMessage msg = new RequestMessage(); msg.setId(uuid); msg.setKey(key); - msg.setData(String.format("设备报警查询失败,错误码: %s, %s", response.getStatusCode(), response.getReasonPhrase())); + msg.setData(String.format("设备报警查询失败,错误码: %s, %s",event.statusCode, event.msg)); resultHolder.invokeResult(msg); }); DeferredResult> result = new DeferredResult> (3 * 1000L); diff --git a/src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/play/PlayController.java b/src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/play/PlayController.java index 2346ab3e..c22a5584 100644 --- a/src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/play/PlayController.java +++ b/src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/play/PlayController.java @@ -287,7 +287,6 @@ public class PlayController { return result; } cmder.audioBroadcastCmd(device, (event) -> { - Response response = event.getResponse(); RequestMessage msg = new RequestMessage(); msg.setKey(key); msg.setId(uuid); @@ -295,7 +294,7 @@ public class PlayController { json.put("DeviceID", deviceId); json.put("CmdType", "Broadcast"); json.put("Result", "Failed"); - json.put("Description", String.format("语音广播操作失败,错误码: %s, %s", response.getStatusCode(), response.getReasonPhrase())); + json.put("Description", String.format("语音广播操作失败,错误码: %s, %s", event.statusCode, event.msg)); msg.setData(json); resultHolder.invokeResult(msg); }); diff --git a/src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/playback/DownloadController.java b/src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/playback/DownloadController.java index e958827b..314bbae3 100644 --- a/src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/playback/DownloadController.java +++ b/src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/playback/DownloadController.java @@ -76,7 +76,7 @@ public class DownloadController { if (logger.isDebugEnabled()) { logger.debug(String.format("历史媒体下载 API调用,deviceId:%s,channelId:%s,downloadSpeed:%s", deviceId, channelId, downloadSpeed)); } - String key = DeferredResultHolder.CALLBACK_CMD_PLAY + deviceId + channelId + startTime + endTime; + String key = DeferredResultHolder.CALLBACK_CMD_PLAY + deviceId + channelId; String uuid = UUID.randomUUID().toString(); DeferredResult> result = new DeferredResult>(30000L); // 超时处理 @@ -116,11 +116,10 @@ public class DownloadController { logger.info("收到订阅消息: " + response.toJSONString()); playService.onPublishHandlerForPlayBack(mediaServerItem, response, deviceId, channelId, uuid.toString()); }, event -> { - Response response = event.getResponse(); RequestMessage msg = new RequestMessage(); msg.setId(uuid); msg.setKey(key); - msg.setData(String.format("回放失败, 错误码: %s, %s", response.getStatusCode(), response.getReasonPhrase())); + msg.setData(String.format("回放失败, 错误码: %s, %s", event.statusCode, event.msg)); resultHolder.invokeAllResult(msg); }); diff --git a/src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/playback/PlaybackController.java b/src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/playback/PlaybackController.java index d847bbd3..98df8ddf 100644 --- a/src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/playback/PlaybackController.java +++ b/src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/playback/PlaybackController.java @@ -77,7 +77,7 @@ public class PlaybackController { logger.debug(String.format("设备回放 API调用,deviceId:%s ,channelId:%s", deviceId, channelId)); } String uuid = UUID.randomUUID().toString(); - String key = DeferredResultHolder.CALLBACK_CMD_PLAY + deviceId + channelId + startTime + endTime; + String key = DeferredResultHolder.CALLBACK_CMD_PLAY + deviceId + channelId; DeferredResult> result = new DeferredResult>(30000L); Device device = storager.queryVideoDevice(deviceId); if (device == null) { @@ -102,7 +102,7 @@ public class PlaybackController { // 停止之前的回放 cmder.streamByeCmd(deviceId, channelId); } - resultHolder.put(DeferredResultHolder.CALLBACK_CMD_PLAY + deviceId + channelId + startTime + endTime, uuid, result); + resultHolder.put(DeferredResultHolder.CALLBACK_CMD_PLAY + deviceId + channelId, uuid, result); if (newMediaServerItem == null) { logger.warn(String.format("设备回放超时,deviceId:%s ,channelId:%s", deviceId, channelId)); @@ -118,11 +118,10 @@ public class PlaybackController { logger.info("收到订阅消息: " + response.toJSONString()); playService.onPublishHandlerForPlayBack(mediaServerItem, response, deviceId, channelId, uuid.toString()); }, event -> { - Response response = event.getResponse(); RequestMessage msg = new RequestMessage(); msg.setId(uuid); msg.setKey(key); - msg.setData(String.format("回放失败, 错误码: %s, %s", response.getStatusCode(), response.getReasonPhrase())); + msg.setData(String.format("回放失败, 错误码: %s, %s", event.statusCode, event.msg)); resultHolder.invokeResult(msg); }); diff --git a/src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/ptz/PtzController.java b/src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/ptz/PtzController.java index bcf4e4cc..26a0d2ca 100644 --- a/src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/ptz/PtzController.java +++ b/src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/ptz/PtzController.java @@ -120,11 +120,10 @@ public class PtzController { return result; } cmder.presetQuery(device, channelId, event -> { - Response response = event.getResponse(); RequestMessage msg = new RequestMessage(); msg.setId(uuid); msg.setKey(key); - msg.setData(String.format("获取设备预置位失败,错误码: %s, %s", response.getStatusCode(), response.getReasonPhrase())); + msg.setData(String.format("获取设备预置位失败,错误码: %s, %s", event.statusCode, event.msg)); resultHolder.invokeResult(msg); });