From a2182b5a7ba0ffbba960e774e019a707b5bf26bb Mon Sep 17 00:00:00 2001 From: mk1990 <37614016+mk1990@users.noreply.github.com> Date: 星期五, 06 五月 2022 17:46:01 +0800 Subject: [PATCH] Merge branch '648540858:wvp-28181-2.0' into wvp-28181-2.0 --- src/main/java/com/genersoft/iot/vmp/gb28181/event/platformNotRegister/PlatformCycleRegisterEventLister.java | 19 src/main/java/com/genersoft/iot/vmp/gb28181/task/impl/CatalogSubscribeTask.java | 33 src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMRTPServerFactory.java | 4 src/main/java/com/genersoft/iot/vmp/gb28181/bean/SubscribeHolder.java | 4 src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/message/notify/cmd/AlarmNotifyMessageHandler.java | 46 +- src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/device/DeviceQuery.java | 16 src/main/java/com/genersoft/iot/vmp/vmanager/log/LogController.java | 20 src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/SubscribeRequestProcessor.java | 73 +-- src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/SIPRequestHeaderPlarformProvider.java | 11 web_src/index.html | 21 - src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/ByeRequestProcessor.java | 4 src/main/java/com/genersoft/iot/vmp/gb28181/task/impl/MobilePositionSubscribeTask.java | 31 src/main/java/com/genersoft/iot/vmp/storager/IRedisCatchStorage.java | 7 src/main/java/com/genersoft/iot/vmp/conf/UserSetting.java | 7 src/main/java/com/genersoft/iot/vmp/gb28181/auth/DigestServerAuthenticationHelper.java | 8 src/main/java/com/genersoft/iot/vmp/gb28181/task/impl/MobilePositionSubscribeHandlerTask.java | 16 src/main/java/com/genersoft/iot/vmp/gb28181/event/subscribe/catalog/CatalogEventLister.java | 16 src/main/java/com/genersoft/iot/vmp/media/zlm/dto/StreamPushItem.java | 4 src/main/java/com/genersoft/iot/vmp/gb28181/session/CatalogDataCatch.java | 20 src/main/java/com/genersoft/iot/vmp/service/impl/PlayServiceImpl.java | 147 +++--- src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/alarm/AlarmController.java | 40 + src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/message/response/cmd/DeviceStatusResponseMessageHandler.java | 11 src/main/java/com/genersoft/iot/vmp/gb28181/event/platformNotRegister/PlatformNotRegisterEventLister.java | 22 src/main/java/com/genersoft/iot/vmp/vmanager/streamProxy/StreamProxyController.java | 12 src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/RegisterRequestProcessor.java | 8 src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/InviteRequestProcessor.java | 4 src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/platform/PlatformController.java | 4 src/main/java/com/genersoft/iot/vmp/gb28181/session/VideoStreamSessionManager.java | 64 ++ src/main/java/com/genersoft/iot/vmp/gb28181/utils/SipUtils.java | 4 src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMMediaListManager.java | 8 src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/NotifyRequestProcessor.java | 14 src/main/java/com/genersoft/iot/vmp/gb28181/event/online/OnlineEventListener.java | 4 src/main/java/com/genersoft/iot/vmp/service/impl/StreamPushServiceImpl.java | 8 src/main/java/com/genersoft/iot/vmp/conf/security/AnonymousAuthenticationEntryPoint.java | 5 src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/impl/SIPCommander.java | 46 + src/main/java/com/genersoft/iot/vmp/media/zlm/dto/StreamProxyItem.java | 4 src/main/java/com/genersoft/iot/vmp/conf/ThreadPoolTaskConfig.java | 8 src/main/java/com/genersoft/iot/vmp/gb28181/bean/DeviceAlarmMethod.java | 40 ++ src/main/java/com/genersoft/iot/vmp/service/impl/UserServiceImpl.java | 4 src/main/java/com/genersoft/iot/vmp/web/gb28181/ApiStreamController.java | 2 src/main/java/com/genersoft/iot/vmp/service/impl/MediaServiceImpl.java | 4 src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/message/notify/cmd/KeepaliveNotifyMessageHandler.java | 4 web_src/src/components/devicePosition.vue | 2 src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMHttpHookSubscribe.java | 4 src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/SIPRequestProcessorParent.java | 12 src/main/java/com/genersoft/iot/vmp/storager/impl/VideoManagerStorageImpl.java | 9 web_src/static/js/mapConfig.js | 19 src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/SIPRequestHeaderProvider.java | 8 src/main/java/com/genersoft/iot/vmp/storager/impl/RedisCatchStorageImpl.java | 114 ++++- src/main/java/com/genersoft/iot/vmp/gb28181/transmit/callback/CheckForAllRecordsThread.java | 1 src/main/java/com/genersoft/iot/vmp/common/ApiSaveConstant.java | 54 ++ src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/message/response/cmd/DeviceInfoResponseMessageHandler.java | 8 src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMRunner.java | 36 src/main/java/com/genersoft/iot/vmp/service/impl/DeviceServiceImpl.java | 8 src/main/java/com/genersoft/iot/vmp/gb28181/transmit/SIPProcessorObserver.java | 2 src/main/java/com/genersoft/iot/vmp/VManageBootstrap.java | 1 src/main/java/com/genersoft/iot/vmp/gb28181/transmit/callback/DeferredResultHolder.java | 8 src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/AckRequestProcessor.java | 4 src/main/java/com/genersoft/iot/vmp/gb28181/task/ISubscribeTask.java | 3 src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/message/response/cmd/CatalogResponseMessageHandler.java | 8 /dev/null | 28 - src/main/java/com/genersoft/iot/vmp/gb28181/SipLayer.java | 11 web_src/src/components/common/jessibuca.vue | 2 src/main/java/com/genersoft/iot/vmp/gb28181/bean/GbStream.java | 1 src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/impl/SIPCommanderFroPlatform.java | 4 src/main/java/com/genersoft/iot/vmp/service/impl/GbStreamServiceImpl.java | 4 src/main/java/com/genersoft/iot/vmp/service/impl/StreamProxyServiceImpl.java | 8 src/main/java/com/genersoft/iot/vmp/utils/SpringBeanFactory.java | 4 68 files changed, 732 insertions(+), 458 deletions(-) diff --git a/src/main/java/com/genersoft/iot/vmp/VManageBootstrap.java b/src/main/java/com/genersoft/iot/vmp/VManageBootstrap.java index 9dacbad..8ff2efb 100644 --- a/src/main/java/com/genersoft/iot/vmp/VManageBootstrap.java +++ b/src/main/java/com/genersoft/iot/vmp/VManageBootstrap.java @@ -7,7 +7,6 @@ import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.web.servlet.ServletComponentScan; import org.springframework.context.ConfigurableApplicationContext; -import org.springframework.scheduling.annotation.EnableAsync; import org.springframework.scheduling.annotation.EnableScheduling; import springfox.documentation.oas.annotations.EnableOpenApi; diff --git a/src/main/java/com/genersoft/iot/vmp/common/ApiSaveConstant.java b/src/main/java/com/genersoft/iot/vmp/common/ApiSaveConstant.java index ec2a725..ed1c2b9 100644 --- a/src/main/java/com/genersoft/iot/vmp/common/ApiSaveConstant.java +++ b/src/main/java/com/genersoft/iot/vmp/common/ApiSaveConstant.java @@ -1,5 +1,9 @@ package com.genersoft.iot.vmp.common; +/** + * 涓篈PI閲嶅懡鍚�, 鏂逛究鍚戞暟鎹簱璁板綍鏁版嵁鐨勬椂鍊欏睍绀� + * @author lin + */ public class ApiSaveConstant { public static String getVal(String key) { @@ -35,35 +39,47 @@ return "[璁惧鎺у埗] 寮哄埗鍏抽敭甯�"; case "home_position": return "[璁惧鎺у埗] 鐪嬪畧浣嶆帶鍒�"; + default: + return ""; } - break; case "query": - if (keyItemArray.length <= 5) return null; + if (keyItemArray.length <= 5) { + return null; + } switch (keyItemArray[4]) { case "devices": - if (keyItemArray.length < 7) return null; + if (keyItemArray.length < 7) { + return null; + } switch (keyItemArray[6]) { case "sync": return "[璁惧鏌ヨ] 鍚屾璁惧閫氶亾"; case "delete": return "[璁惧鏌ヨ] 绉婚櫎璁惧"; + default: + return ""; } - break; case "channel": return "[璁惧鏌ヨ] 鏇存柊閫氶亾淇℃伅"; case "transport": return "[璁惧鏌ヨ] 淇敼鏁版嵁娴佷紶杈撴ā寮�"; + default: + return ""; } - break; + default: + return ""; } + + break; case "gbStream": switch (keyItemArray[3]) { case "del": return "绉婚櫎閫氶亾涓庡浗鏍囩殑鍏宠仈"; case "add": return "娣诲姞閫氶亾涓庡浗鏍囩殑鍏宠仈"; + default: + return ""; } - break; case "media": break; case "position": @@ -81,8 +97,9 @@ return "鍚戜笂绾у钩鍙版坊鍔犲浗鏍囬�氶亾"; case "del_channel_for_gb": return "浠庝笂绾у钩鍙扮Щ闄ゅ浗鏍囬�氶亾"; + default: + return ""; } - break; case "platform_gb_stream": break; case "play": @@ -97,32 +114,36 @@ return "缁撴潫杞爜"; case "broadcast": return "璇煶骞挎挱"; + default: + return ""; } - break; case "download": switch (keyItemArray[3]) { case "start": return "寮�濮嬪巻鍙插獟浣撲笅杞�"; case "stop": return "鍋滄鍘嗗彶濯掍綋涓嬭浇"; + default: + return ""; } - break; case "playback": switch (keyItemArray[3]) { case "start": return "寮�濮嬭棰戝洖鏀�"; case "stop": return "鍋滄瑙嗛鍥炴斁"; + default: + return ""; } - break; case "ptz": switch (keyItemArray[3]) { case "control": return "浜戝彴鎺у埗"; case "front_end_command": return "閫氱敤鍓嶇鎺у埗鍛戒护"; + default: + return ""; } - break; case "gb_record": break; case "onvif": @@ -142,16 +163,18 @@ return "鍚敤浠g悊"; case "stop": return "鍋滅敤浠g悊"; + default: + return ""; } - break; case "push": switch (keyItemArray[3]) { case "save_to_gb": return "灏嗘帹娴佹坊鍔犲埌鍥芥爣"; case "remove_form_gb": return "灏嗘帹娴佺Щ鍑哄埌鍥芥爣"; + default: + return ""; } - break; case "user": switch (keyItemArray[3]) { case "login": @@ -162,8 +185,11 @@ return "娣诲姞鐢ㄦ埛"; case "delete": return "鍒犻櫎鐢ㄦ埛"; + default: + return ""; } - break; + default: + return ""; } } return null; diff --git a/src/main/java/com/genersoft/iot/vmp/conf/ThreadPoolTaskConfig.java b/src/main/java/com/genersoft/iot/vmp/conf/ThreadPoolTaskConfig.java index 1bc8521..71aed27 100644 --- a/src/main/java/com/genersoft/iot/vmp/conf/ThreadPoolTaskConfig.java +++ b/src/main/java/com/genersoft/iot/vmp/conf/ThreadPoolTaskConfig.java @@ -7,6 +7,10 @@ import java.util.concurrent.ThreadPoolExecutor; +/** + * ThreadPoolTask 閰嶇疆绫� + * @author lin + */ @Configuration @EnableAsync(proxyTargetClass = true) public class ThreadPoolTaskConfig { @@ -40,6 +44,10 @@ */ private static final String threadNamePrefix = "wvp-"; + /** + * + * @return + */ @Bean("taskExecutor") // bean鐨勫悕绉帮紝榛樿涓洪瀛楁瘝灏忓啓鐨勬柟娉曞悕 public ThreadPoolTaskExecutor taskExecutor() { ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor(); diff --git a/src/main/java/com/genersoft/iot/vmp/conf/UserSetting.java b/src/main/java/com/genersoft/iot/vmp/conf/UserSetting.java index 4776551..c0fcf01 100644 --- a/src/main/java/com/genersoft/iot/vmp/conf/UserSetting.java +++ b/src/main/java/com/genersoft/iot/vmp/conf/UserSetting.java @@ -1,5 +1,6 @@ package com.genersoft.iot.vmp.conf; +import io.swagger.models.auth.In; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.stereotype.Component; @@ -19,7 +20,7 @@ private Boolean seniorSdp = Boolean.FALSE; - private Long playTimeout = 18000L; + private Integer playTimeout = 18000; private int platformPlayTimeout = 60000; @@ -55,7 +56,7 @@ return seniorSdp; } - public Long getPlayTimeout() { + public Integer getPlayTimeout() { return playTimeout; } @@ -83,7 +84,7 @@ this.seniorSdp = seniorSdp; } - public void setPlayTimeout(Long playTimeout) { + public void setPlayTimeout(Integer playTimeout) { this.playTimeout = playTimeout; } diff --git a/src/main/java/com/genersoft/iot/vmp/conf/security/AnonymousAuthenticationEntryPoint.java b/src/main/java/com/genersoft/iot/vmp/conf/security/AnonymousAuthenticationEntryPoint.java index 2356b57..95b2262 100644 --- a/src/main/java/com/genersoft/iot/vmp/conf/security/AnonymousAuthenticationEntryPoint.java +++ b/src/main/java/com/genersoft/iot/vmp/conf/security/AnonymousAuthenticationEntryPoint.java @@ -13,6 +13,7 @@ /** * 澶勭悊鍖垮悕鐢ㄦ埛璁块棶閫昏緫 + * @author lin */ @Component public class AnonymousAuthenticationEntryPoint implements AuthenticationEntryPoint { @@ -21,7 +22,6 @@ @Override public void commence(HttpServletRequest request, HttpServletResponse response, AuthenticationException e) { -// logger.debug("鐢ㄦ埛闇�瑕佺櫥褰曪紝璁块棶[{}]澶辫触锛孉uthenticationException=[{}]", request.getRequestURI(), e.getMessage()); // 鍏佽璺ㄥ煙 response.setHeader("Access-Control-Allow-Origin", "*"); // 鍏佽鑷畾涔夎姹傚ごtoken(鍏佽head璺ㄥ煙) @@ -30,7 +30,8 @@ JSONObject jsonObject = new JSONObject(); jsonObject.put("code", "-1"); jsonObject.put("msg", "璇风櫥褰曞悗閲嶆柊璇锋眰"); - if (request.getRequestURI().contains("api/user/login")){ + String logUri = "api/user/login"; + if (request.getRequestURI().contains(logUri)){ jsonObject.put("msg", e.getMessage()); } response.setStatus(HttpServletResponse.SC_UNAUTHORIZED); 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 7b7291c..58772d9 100644 --- a/src/main/java/com/genersoft/iot/vmp/gb28181/SipLayer.java +++ b/src/main/java/com/genersoft/iot/vmp/gb28181/SipLayer.java @@ -8,6 +8,7 @@ import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.DependsOn; import org.springframework.stereotype.Component; @@ -18,7 +19,7 @@ import java.util.concurrent.ThreadPoolExecutor; import java.util.concurrent.TimeUnit; -@Component +@Configuration public class SipLayer{ private final static Logger logger = LoggerFactory.getLogger(SipLayer.class); @@ -35,7 +36,7 @@ @Bean("sipFactory") - private SipFactory createSipFactory() { + SipFactory createSipFactory() { sipFactory = SipFactory.getInstance(); sipFactory.setPathName("gov.nist"); return sipFactory; @@ -43,7 +44,7 @@ @Bean("sipStack") @DependsOn({"sipFactory"}) - private SipStack createSipStack() throws PeerUnavailableException { + SipStack createSipStack() throws PeerUnavailableException { Properties properties = new Properties(); properties.setProperty("javax.sip.STACK_NAME", "GB28181_SIP"); properties.setProperty("javax.sip.IP_ADDRESS", sipConfig.getMonitorIp()); @@ -64,7 +65,7 @@ @Bean(name = "tcpSipProvider") @DependsOn("sipStack") - private SipProviderImpl startTcpListener() { + SipProviderImpl startTcpListener() { ListeningPoint tcpListeningPoint = null; SipProviderImpl tcpSipProvider = null; try { @@ -89,7 +90,7 @@ @Bean(name = "udpSipProvider") @DependsOn("sipStack") - private SipProviderImpl startUdpListener() { + SipProviderImpl startUdpListener() { ListeningPoint udpListeningPoint = null; SipProviderImpl udpSipProvider = null; try { diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/auth/DigestServerAuthenticationHelper.java b/src/main/java/com/genersoft/iot/vmp/gb28181/auth/DigestServerAuthenticationHelper.java index 5ee3de6..f6284f5 100644 --- a/src/main/java/com/genersoft/iot/vmp/gb28181/auth/DigestServerAuthenticationHelper.java +++ b/src/main/java/com/genersoft/iot/vmp/gb28181/auth/DigestServerAuthenticationHelper.java @@ -129,7 +129,9 @@ */ public boolean doAuthenticateHashedPassword(Request request, String hashedPassword) { AuthorizationHeader authHeader = (AuthorizationHeader) request.getHeader(AuthorizationHeader.NAME); - if ( authHeader == null ) return false; + if ( authHeader == null ) { + return false; + } String realm = authHeader.getRealm(); String username = authHeader.getUsername(); @@ -176,7 +178,9 @@ */ public boolean doAuthenticatePlainTextPassword(Request request, String pass) { AuthorizationHeader authHeader = (AuthorizationHeader) request.getHeader(AuthorizationHeader.NAME); - if ( authHeader == null ) return false; + if ( authHeader == null ) { + return false; + } String realm = authHeader.getRealm().trim(); String username = authHeader.getUsername().trim(); diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/bean/DeviceAlarmMethod.java b/src/main/java/com/genersoft/iot/vmp/gb28181/bean/DeviceAlarmMethod.java new file mode 100644 index 0000000..ff8761e --- /dev/null +++ b/src/main/java/com/genersoft/iot/vmp/gb28181/bean/DeviceAlarmMethod.java @@ -0,0 +1,40 @@ +package com.genersoft.iot.vmp.gb28181.bean; + +/** + * 鎶ヨ鏂瑰紡 + * @author lin + * 1涓虹數璇濇姤璀�, 2涓鸿澶囨姤璀�, 3涓虹煭淇℃姤璀�, 4涓� GPS鎶ヨ, 5涓鸿棰戞姤璀�, 6涓鸿澶囨晠闅滄姤璀�, + * 7鍏朵粬鎶ヨ;鍙互涓虹洿鎺ョ粍鍚堝12涓虹數璇濇姤璀︽垨 璁惧鎶ヨ- + */ +public enum DeviceAlarmMethod { + // 1涓虹數璇濇姤璀� + Telephone(1), + + // 2涓鸿澶囨姤璀� + Device(2), + + // 3涓虹煭淇℃姤璀� + SMS(3), + + // 4涓� GPS鎶ヨ + GPS(4), + + // 5涓鸿棰戞姤璀� + Video(5), + + // 6涓鸿澶囨晠闅滄姤璀� + DeviceFailure(6), + + // 7鍏朵粬鎶ヨ + Other(7); + + private final int val; + + DeviceAlarmMethod(int val) { + this.val=val; + } + + public int getVal() { + return val; + } +} diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/bean/GbStream.java b/src/main/java/com/genersoft/iot/vmp/gb28181/bean/GbStream.java index 1b77dde..010e000 100644 --- a/src/main/java/com/genersoft/iot/vmp/gb28181/bean/GbStream.java +++ b/src/main/java/com/genersoft/iot/vmp/gb28181/bean/GbStream.java @@ -25,6 +25,7 @@ return gbStreamId; } + @Override public void setGbStreamId(Integer gbStreamId) { this.gbStreamId = gbStreamId; } diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/bean/SubscribeHolder.java b/src/main/java/com/genersoft/iot/vmp/gb28181/bean/SubscribeHolder.java index 981fe1e..e804be2 100644 --- a/src/main/java/com/genersoft/iot/vmp/gb28181/bean/SubscribeHolder.java +++ b/src/main/java/com/genersoft/iot/vmp/gb28181/bean/SubscribeHolder.java @@ -59,7 +59,9 @@ mobilePositionMap.put(platformId, subscribeInfo); String key = VideoManagerConstants.SIP_SUBSCRIBE_PREFIX + "MobilePosition_" + platformId; // 娣诲姞浠诲姟澶勭悊GPS瀹氭椂鎺ㄩ�� - dynamicTask.startCron(key, new MobilePositionSubscribeHandlerTask(redisCatchStorage, sipCommanderForPlatform, storager, platformId, subscribeInfo.getSn(), key, this), subscribeInfo.getGpsInterval()); + dynamicTask.startCron(key, new MobilePositionSubscribeHandlerTask(redisCatchStorage, sipCommanderForPlatform, + storager, platformId, subscribeInfo.getSn(), key, this, dynamicTask), + subscribeInfo.getGpsInterval()); String taskOverdueKey = taskOverduePrefix + "MobilePosition_" + platformId; dynamicTask.stop(taskOverdueKey); // 娣诲姞浠诲姟澶勭悊璁㈤槄杩囨湡 diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/event/DeviceOffLineDetector.java b/src/main/java/com/genersoft/iot/vmp/gb28181/event/DeviceOffLineDetector.java deleted file mode 100644 index 5513ba2..0000000 --- a/src/main/java/com/genersoft/iot/vmp/gb28181/event/DeviceOffLineDetector.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.genersoft.iot.vmp.gb28181.event; - -import com.genersoft.iot.vmp.conf.UserSetting; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; - -import com.genersoft.iot.vmp.common.VideoManagerConstants; -import com.genersoft.iot.vmp.utils.redis.RedisUtil; - -/** - * @description:璁惧绂诲湪绾跨姸鎬佹娴嬪櫒锛岀敤浜庢娴嬭澶囩姸鎬� - * @author: swwheihei - * @date: 2020骞�5鏈�13鏃� 涓嬪崍2:40:29 - */ -@Component -public class DeviceOffLineDetector { - - @Autowired - private RedisUtil redis; - - @Autowired - private UserSetting userSetting; - - public boolean isOnline(String deviceId) { - String key = VideoManagerConstants.KEEPLIVEKEY_PREFIX + userSetting.getServerId() + "_" + deviceId; - return redis.hasKey(key); - } -} diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/event/online/OnlineEventListener.java b/src/main/java/com/genersoft/iot/vmp/gb28181/event/online/OnlineEventListener.java index 1fc1e46..f32637e 100644 --- a/src/main/java/com/genersoft/iot/vmp/gb28181/event/online/OnlineEventListener.java +++ b/src/main/java/com/genersoft/iot/vmp/gb28181/event/online/OnlineEventListener.java @@ -62,7 +62,9 @@ logger.info("璁惧涓婄嚎浜嬩欢瑙﹀彂锛宒eviceId锛�" + event.getDevice().getDeviceId() + ",from:" + event.getFrom()); Device device = event.getDevice(); - if (device == null) return; + if (device == null) { + return; + } String key = VideoManagerConstants.KEEPLIVEKEY_PREFIX + userSetting.getServerId() + "_" + event.getDevice().getDeviceId(); Device deviceInStore = storager.queryVideoDevice(device.getDeviceId()); device.setOnline(1); diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/event/platformNotRegister/PlatformCycleRegisterEventLister.java b/src/main/java/com/genersoft/iot/vmp/gb28181/event/platformNotRegister/PlatformCycleRegisterEventLister.java index b6f0842..d2a9246 100644 --- a/src/main/java/com/genersoft/iot/vmp/gb28181/event/platformNotRegister/PlatformCycleRegisterEventLister.java +++ b/src/main/java/com/genersoft/iot/vmp/gb28181/event/platformNotRegister/PlatformCycleRegisterEventLister.java @@ -1,5 +1,6 @@ package com.genersoft.iot.vmp.gb28181.event.platformNotRegister; +import com.genersoft.iot.vmp.conf.DynamicTask; import com.genersoft.iot.vmp.gb28181.bean.ParentPlatform; import com.genersoft.iot.vmp.gb28181.event.SipSubscribe; import com.genersoft.iot.vmp.gb28181.transmit.cmd.ISIPCommanderForPlatform; @@ -22,6 +23,8 @@ private IVideoManagerStorage storager; @Autowired private ISIPCommanderForPlatform sipCommanderFroPlatform; + @Autowired + private DynamicTask dynamicTask; @Override public void onApplicationEvent(PlatformCycleRegisterEvent event) { @@ -31,17 +34,13 @@ logger.info("[ 骞冲彴鏈敞鍐屼簨浠� ] 骞冲彴宸茬粡鍒犻櫎!!! 骞冲彴鍥芥爣ID锛�" + event.getPlatformGbID()); return; } - Timer timer = new Timer(); + String taskKey = "platform-cycle-register" + parentPlatform.getServerGBId();; SipSubscribe.Event okEvent = (responseEvent)->{ - timer.cancel(); + dynamicTask.stop(taskKey); }; - sipCommanderFroPlatform.register(parentPlatform, null, okEvent); - timer.schedule(new TimerTask() { - @Override - public void run() { - logger.info("[骞冲彴娉ㄥ唽]鍐嶆鍚戝钩鍙版敞鍐岋紝骞冲彴鍥芥爣ID锛�" + event.getPlatformGbID()); - sipCommanderFroPlatform.register(parentPlatform, null, okEvent); - } - }, 15*1000 ,Long.parseLong(parentPlatform.getExpires())* 1000); + dynamicTask.startCron(taskKey, ()->{ + logger.info("[骞冲彴娉ㄥ唽]鍐嶆鍚戝钩鍙版敞鍐岋紝骞冲彴鍥芥爣ID锛�" + event.getPlatformGbID()); + sipCommanderFroPlatform.register(parentPlatform, null, okEvent); + }, Integer.parseInt(parentPlatform.getExpires())* 1000); } } diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/event/platformNotRegister/PlatformNotRegisterEventLister.java b/src/main/java/com/genersoft/iot/vmp/gb28181/event/platformNotRegister/PlatformNotRegisterEventLister.java index 3f76e8a..14ed76a 100644 --- a/src/main/java/com/genersoft/iot/vmp/gb28181/event/platformNotRegister/PlatformNotRegisterEventLister.java +++ b/src/main/java/com/genersoft/iot/vmp/gb28181/event/platformNotRegister/PlatformNotRegisterEventLister.java @@ -1,5 +1,6 @@ package com.genersoft.iot.vmp.gb28181.event.platformNotRegister; +import com.genersoft.iot.vmp.conf.DynamicTask; import com.genersoft.iot.vmp.conf.SipConfig; import com.genersoft.iot.vmp.gb28181.bean.ParentPlatform; import com.genersoft.iot.vmp.gb28181.bean.SendRtpItem; @@ -46,6 +47,9 @@ @Autowired private SipConfig config; + @Autowired + private DynamicTask dynamicTask; + // @Autowired // private RedisUtil redis; @@ -75,19 +79,13 @@ } } - Timer timer = new Timer(); + String taskKey = "platform-not-register-" + parentPlatform.getServerGBId(); SipSubscribe.Event okEvent = (responseEvent)->{ - timer.cancel(); + dynamicTask.stop(taskKey); }; - logger.info("[骞冲彴娉ㄥ唽]骞冲彴鍥芥爣ID锛�" + event.getPlatformGbID()); - sipCommanderFroPlatform.register(parentPlatform, null, okEvent); - // 璁剧疆娉ㄥ唽澶辫触鍒欐瘡闅�15绉掑彂璧蜂竴娆℃敞鍐� - timer.schedule(new TimerTask() { - @Override - public void run() { - logger.info("[骞冲彴娉ㄥ唽]鍐嶆鍚戝钩鍙版敞鍐岋紝骞冲彴鍥芥爣ID锛�" + event.getPlatformGbID()); - sipCommanderFroPlatform.register(parentPlatform, null, okEvent); - } - }, config.getRegisterTimeInterval()* 1000, config.getRegisterTimeInterval()* 1000);//鍗佷簲绉掑悗鍐嶆鍙戣捣娉ㄥ唽 + dynamicTask.startCron(taskKey, ()->{ + logger.info("[骞冲彴娉ㄥ唽]鍐嶆鍚戝钩鍙版敞鍐岋紝骞冲彴鍥芥爣ID锛�" + event.getPlatformGbID()); + sipCommanderFroPlatform.register(parentPlatform, null, okEvent); + }, config.getRegisterTimeInterval()* 1000); } } diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/event/subscribe/catalog/CatalogEventLister.java b/src/main/java/com/genersoft/iot/vmp/gb28181/event/subscribe/catalog/CatalogEventLister.java index 0ea5a18..7e5ecb4 100644 --- a/src/main/java/com/genersoft/iot/vmp/gb28181/event/subscribe/catalog/CatalogEventLister.java +++ b/src/main/java/com/genersoft/iot/vmp/gb28181/event/subscribe/catalog/CatalogEventLister.java @@ -60,7 +60,9 @@ Map<String, List<ParentPlatform>> parentPlatformMap = new HashMap<>(); if (event.getPlatformId() != null) { parentPlatform = storager.queryParentPlatByServerGBId(event.getPlatformId()); - if (parentPlatform != null && !parentPlatform.isStatus())return; + if (parentPlatform != null && !parentPlatform.isStatus()) { + return; + } subscribe = subscribeHolder.getCatalogSubscribe(event.getPlatformId()); if (subscribe == null) { @@ -80,7 +82,9 @@ }else if (event.getGbStreams() != null) { if (platforms.size() > 0) { for (GbStream gbStream : event.getGbStreams()) { - if (gbStream == null || StringUtils.isEmpty(gbStream.getGbId())) continue; + if (gbStream == null || StringUtils.isEmpty(gbStream.getGbId())) { + continue; + } List<ParentPlatform> parentPlatformsForGB = storager.queryPlatFormListForStreamWithGBId(gbStream.getApp(),gbStream.getStream(), platforms); parentPlatformMap.put(gbStream.getGbId(), parentPlatformsForGB); } @@ -113,7 +117,9 @@ if (parentPlatforms != null && parentPlatforms.size() > 0) { for (ParentPlatform platform : parentPlatforms) { SubscribeInfo subscribeInfo = subscribeHolder.getCatalogSubscribe(platform.getServerGBId()); - if (subscribeInfo == null) continue; + if (subscribeInfo == null) { + continue; + } logger.info("[Catalog浜嬩欢: {}]骞冲彴锛歿}锛屽奖鍝嶉�氶亾{}", event.getType(), platform.getServerGBId(), gbId); List<DeviceChannel> deviceChannelList = new ArrayList<>(); DeviceChannel deviceChannel = new DeviceChannel(); @@ -155,7 +161,9 @@ if (parentPlatforms != null && parentPlatforms.size() > 0) { for (ParentPlatform platform : parentPlatforms) { SubscribeInfo subscribeInfo = subscribeHolder.getCatalogSubscribe(platform.getServerGBId()); - if (subscribeInfo == null) continue; + if (subscribeInfo == null) { + continue; + } logger.info("[Catalog浜嬩欢: {}]骞冲彴锛歿}锛屽奖鍝嶉�氶亾{}", event.getType(), platform.getServerGBId(), gbId); List<DeviceChannel> deviceChannelList = new ArrayList<>(); DeviceChannel deviceChannel = storager.queryChannelInParentPlatform(platform.getServerGBId(), gbId); diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/session/CatalogDataCatch.java b/src/main/java/com/genersoft/iot/vmp/gb28181/session/CatalogDataCatch.java index 97360d2..62393d5 100644 --- a/src/main/java/com/genersoft/iot/vmp/gb28181/session/CatalogDataCatch.java +++ b/src/main/java/com/genersoft/iot/vmp/gb28181/session/CatalogDataCatch.java @@ -65,19 +65,25 @@ public List<DeviceChannel> get(String deviceId) { CatalogData catalogData = data.get(deviceId); - if (catalogData == null) return null; + if (catalogData == null) { + return null; + } return catalogData.getChannelList(); } public int getTotal(String deviceId) { CatalogData catalogData = data.get(deviceId); - if (catalogData == null) return 0; + if (catalogData == null) { + return 0; + } return catalogData.getTotal(); } public SyncStatus getSyncStatus(String deviceId) { CatalogData catalogData = data.get(deviceId); - if (catalogData == null) return null; + if (catalogData == null) { + return null; + } SyncStatus syncStatus = new SyncStatus(); syncStatus.setCurrent(catalogData.getChannelList().size()); syncStatus.setTotal(catalogData.getTotal()); @@ -87,7 +93,9 @@ public boolean isSyncRunning(String deviceId) { CatalogData catalogData = data.get(deviceId); - if (catalogData == null) return false; + if (catalogData == null) { + return false; + } return !catalogData.getStatus().equals(CatalogData.CatalogDataStatus.end); } @@ -125,7 +133,9 @@ public void setChannelSyncEnd(String deviceId, String errorMsg) { CatalogData catalogData = data.get(deviceId); - if (catalogData == null)return; + if (catalogData == null) { + return; + } catalogData.setStatus(CatalogData.CatalogDataStatus.end); catalogData.setErrorMsg(errorMsg); } diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/session/VideoStreamSessionManager.java b/src/main/java/com/genersoft/iot/vmp/gb28181/session/VideoStreamSessionManager.java index 0051b03..8d72a28 100644 --- a/src/main/java/com/genersoft/iot/vmp/gb28181/session/VideoStreamSessionManager.java +++ b/src/main/java/com/genersoft/iot/vmp/gb28181/session/VideoStreamSessionManager.java @@ -78,7 +78,9 @@ public ClientTransaction getTransactionByStream(String deviceId, String channelId, String stream){ SsrcTransaction ssrcTransaction = getSsrcTransaction(deviceId, channelId, null, stream); - if (ssrcTransaction == null) return null; + if (ssrcTransaction == null) { + return null; + } byte[] transactionByteArray = ssrcTransaction.getTransaction(); ClientTransaction clientTransaction = (ClientTransaction)SerializeUtils.deSerialize(transactionByteArray); return clientTransaction; @@ -86,39 +88,63 @@ public SIPDialog getDialogByStream(String deviceId, String channelId, String stream){ SsrcTransaction ssrcTransaction = getSsrcTransaction(deviceId, channelId, null, stream); - if (ssrcTransaction == null) return null; + if (ssrcTransaction == null) { + return null; + } byte[] dialogByteArray = ssrcTransaction.getDialog(); - if (dialogByteArray == null) return null; + if (dialogByteArray == null) { + return null; + } SIPDialog dialog = (SIPDialog)SerializeUtils.deSerialize(dialogByteArray); return dialog; } public SIPDialog getDialogByCallId(String deviceId, String channelId, String callID){ SsrcTransaction ssrcTransaction = getSsrcTransaction(deviceId, channelId, callID, null); - if (ssrcTransaction == null) return null; + if (ssrcTransaction == null) { + return null; + } byte[] dialogByteArray = ssrcTransaction.getDialog(); - if (dialogByteArray == null) return null; + if (dialogByteArray == null) { + return null; + } SIPDialog dialog = (SIPDialog)SerializeUtils.deSerialize(dialogByteArray); return dialog; } public SsrcTransaction getSsrcTransaction(String deviceId, String channelId, String callId, String stream){ - if (StringUtils.isEmpty(callId)) callId ="*"; - if (StringUtils.isEmpty(stream)) stream ="*"; + if (StringUtils.isEmpty(callId)) { + callId ="*"; + } + if (StringUtils.isEmpty(stream)) { + stream ="*"; + } String key = VideoManagerConstants.MEDIA_TRANSACTION_USED_PREFIX + userSetting.getServerId() + "_" + deviceId + "_" + channelId + "_" + callId+ "_" + stream; List<Object> scanResult = redisUtil.scan(key); - if (scanResult.size() == 0) return null; + if (scanResult.size() == 0) { + return null; + } return (SsrcTransaction)redisUtil.get((String) scanResult.get(0)); } public List<SsrcTransaction> getSsrcTransactionForAll(String deviceId, String channelId, String callId, String stream){ - if (StringUtils.isEmpty(deviceId)) deviceId ="*"; - if (StringUtils.isEmpty(channelId)) channelId ="*"; - if (StringUtils.isEmpty(callId)) callId ="*"; - if (StringUtils.isEmpty(stream)) stream ="*"; + if (StringUtils.isEmpty(deviceId)) { + deviceId ="*"; + } + if (StringUtils.isEmpty(channelId)) { + channelId ="*"; + } + if (StringUtils.isEmpty(callId)) { + callId ="*"; + } + if (StringUtils.isEmpty(stream)) { + stream ="*"; + } String key = VideoManagerConstants.MEDIA_TRANSACTION_USED_PREFIX + userSetting.getServerId() + "_" + deviceId + "_" + channelId + "_" + callId+ "_" + stream; List<Object> scanResult = redisUtil.scan(key); - if (scanResult.size() == 0) return null; + if (scanResult.size() == 0) { + return null; + } List<SsrcTransaction> result = new ArrayList<>(); for (Object keyObj : scanResult) { result.add((SsrcTransaction)redisUtil.get((String) keyObj)); @@ -128,19 +154,25 @@ public String getMediaServerId(String deviceId, String channelId, String stream){ SsrcTransaction ssrcTransaction = getSsrcTransaction(deviceId, channelId, null, stream); - if (ssrcTransaction == null) return null; + if (ssrcTransaction == null) { + return null; + } return ssrcTransaction.getMediaServerId(); } public String getSSRC(String deviceId, String channelId, String stream){ SsrcTransaction ssrcTransaction = getSsrcTransaction(deviceId, channelId, null, stream); - if (ssrcTransaction == null) return null; + if (ssrcTransaction == null) { + return null; + } return ssrcTransaction.getSsrc(); } public void remove(String deviceId, String channelId, String stream) { SsrcTransaction ssrcTransaction = getSsrcTransaction(deviceId, channelId, null, stream); - if (ssrcTransaction == null) return; + if (ssrcTransaction == null) { + return; + } redisUtil.del(VideoManagerConstants.MEDIA_TRANSACTION_USED_PREFIX + userSetting.getServerId() + "_" + deviceId + "_" + channelId + "_" + ssrcTransaction.getCallId() + "_" + ssrcTransaction.getStream()); } diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/task/ISubscribeTask.java b/src/main/java/com/genersoft/iot/vmp/gb28181/task/ISubscribeTask.java index b6ec451..c7a16ee 100644 --- a/src/main/java/com/genersoft/iot/vmp/gb28181/task/ISubscribeTask.java +++ b/src/main/java/com/genersoft/iot/vmp/gb28181/task/ISubscribeTask.java @@ -2,6 +2,9 @@ import javax.sip.DialogState; +/** + * @author lin + */ public interface ISubscribeTask extends Runnable{ void stop(); diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/task/impl/CatalogSubscribeTask.java b/src/main/java/com/genersoft/iot/vmp/gb28181/task/impl/CatalogSubscribeTask.java index 59b927f..577e724 100644 --- a/src/main/java/com/genersoft/iot/vmp/gb28181/task/impl/CatalogSubscribeTask.java +++ b/src/main/java/com/genersoft/iot/vmp/gb28181/task/impl/CatalogSubscribeTask.java @@ -1,11 +1,13 @@ package com.genersoft.iot.vmp.gb28181.task.impl; +import com.genersoft.iot.vmp.conf.DynamicTask; import com.genersoft.iot.vmp.gb28181.bean.Device; import com.genersoft.iot.vmp.gb28181.task.ISubscribeTask; import com.genersoft.iot.vmp.gb28181.transmit.cmd.ISIPCommander; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.scheduling.annotation.Async; +import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor; import javax.sip.Dialog; import javax.sip.DialogState; @@ -15,6 +17,7 @@ /** * 鐩綍璁㈤槄浠诲姟 + * @author lin */ public class CatalogSubscribeTask implements ISubscribeTask { private final Logger logger = LoggerFactory.getLogger(CatalogSubscribeTask.class); @@ -22,18 +25,21 @@ private final ISIPCommander sipCommander; private Dialog dialog; - private Timer timer ; + private DynamicTask dynamicTask; - public CatalogSubscribeTask(Device device, ISIPCommander sipCommander) { + private String taskKey = "catalog-subscribe-timeout"; + + + public CatalogSubscribeTask(Device device, ISIPCommander sipCommander, DynamicTask dynamicTask) { this.device = device; this.sipCommander = sipCommander; + this.dynamicTask = dynamicTask; } @Override public void run() { - if (timer != null ) { - timer.cancel(); - timer = null; + if (dynamicTask.get(taskKey) != null) { + dynamicTask.stop(taskKey); } sipCommander.catalogSubscribe(device, dialog, eventResult -> { if (eventResult.dialog != null || eventResult.dialog.getState().equals(DialogState.CONFIRMED)) { @@ -51,13 +57,7 @@ dialog = null; // 澶辫触 logger.warn("[鐩綍璁㈤槄]澶辫触锛屼俊浠ゅ彂閫佸け璐ワ細 {}-{} ", device.getDeviceId(), eventResult.msg); - timer = new Timer(); - timer.schedule(new TimerTask() { - @Override - public void run() { - CatalogSubscribeTask.this.run(); - } - }, 2000); + dynamicTask.startDelay(taskKey, CatalogSubscribeTask.this, 2000); }); } @@ -71,9 +71,8 @@ * TERMINATED-> Terminated Dialog鐘舵��-缁堟 */ logger.info("鍙栨秷鐩綍璁㈤槄鏃禿ialog鐘舵�佷负{}", DialogState.CONFIRMED); - if (timer != null ) { - timer.cancel(); - timer = null; + if (dynamicTask.get(taskKey) != null) { + dynamicTask.stop(taskKey); } if (dialog != null && dialog.getState().equals(DialogState.CONFIRMED)) { device.setSubscribeCycleForCatalog(0); @@ -95,7 +94,9 @@ @Override public DialogState getDialogState() { - if (dialog == null) return null; + if (dialog == null) { + return null; + } return dialog.getState(); } } diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/task/impl/MobilePositionSubscribeHandlerTask.java b/src/main/java/com/genersoft/iot/vmp/gb28181/task/impl/MobilePositionSubscribeHandlerTask.java index c495403..c416766 100644 --- a/src/main/java/com/genersoft/iot/vmp/gb28181/task/impl/MobilePositionSubscribeHandlerTask.java +++ b/src/main/java/com/genersoft/iot/vmp/gb28181/task/impl/MobilePositionSubscribeHandlerTask.java @@ -1,5 +1,6 @@ package com.genersoft.iot.vmp.gb28181.task.impl; +import com.genersoft.iot.vmp.conf.DynamicTask; import com.genersoft.iot.vmp.gb28181.bean.*; import com.genersoft.iot.vmp.gb28181.task.ISubscribeTask; import com.genersoft.iot.vmp.gb28181.transmit.cmd.ISIPCommanderForPlatform; @@ -15,6 +16,7 @@ /** * 鍚戝凡缁忚闃�(绉诲姩浣嶇疆)鐨勪笂绾у彂閫丮obilePosition娑堟伅 + * @author lin */ public class MobilePositionSubscribeHandlerTask implements ISubscribeTask { @@ -25,10 +27,18 @@ private ISIPCommanderForPlatform sipCommanderForPlatform; private SubscribeHolder subscribeHolder; private ParentPlatform platform; + private String sn; private String key; - public MobilePositionSubscribeHandlerTask(IRedisCatchStorage redisCatchStorage, ISIPCommanderForPlatform sipCommanderForPlatform, IVideoManagerStorage storager, String platformId, String sn, String key, SubscribeHolder subscribeInfo) { + public MobilePositionSubscribeHandlerTask(IRedisCatchStorage redisCatchStorage, + ISIPCommanderForPlatform sipCommanderForPlatform, + IVideoManagerStorage storager, + String platformId, + String sn, + String key, + SubscribeHolder subscribeInfo, + DynamicTask dynamicTask) { this.redisCatchStorage = redisCatchStorage; this.storager = storager; this.platform = storager.queryParentPlatByServerGBId(platformId); @@ -41,7 +51,9 @@ @Override public void run() { - if (platform == null) return; + if (platform == null) { + return; + } SubscribeInfo subscribe = subscribeHolder.getMobilePositionSubscribe(platform.getServerGBId()); if (subscribe != null) { diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/task/impl/MobilePositionSubscribeTask.java b/src/main/java/com/genersoft/iot/vmp/gb28181/task/impl/MobilePositionSubscribeTask.java index 884f040..cf1f7cf 100644 --- a/src/main/java/com/genersoft/iot/vmp/gb28181/task/impl/MobilePositionSubscribeTask.java +++ b/src/main/java/com/genersoft/iot/vmp/gb28181/task/impl/MobilePositionSubscribeTask.java @@ -1,5 +1,6 @@ package com.genersoft.iot.vmp.gb28181.task.impl; +import com.genersoft.iot.vmp.conf.DynamicTask; import com.genersoft.iot.vmp.gb28181.bean.Device; import com.genersoft.iot.vmp.gb28181.task.ISubscribeTask; import com.genersoft.iot.vmp.gb28181.transmit.cmd.ISIPCommander; @@ -16,25 +17,26 @@ /** * 绉诲姩浣嶇疆璁㈤槄鐨勫畾鏃舵洿鏂� + * @author lin */ public class MobilePositionSubscribeTask implements ISubscribeTask { private final Logger logger = LoggerFactory.getLogger(MobilePositionSubscribeTask.class); private Device device; private ISIPCommander sipCommander; private Dialog dialog; + private DynamicTask dynamicTask; + private String taskKey = "mobile-position-subscribe-timeout"; - private Timer timer ; - - public MobilePositionSubscribeTask(Device device, ISIPCommander sipCommander) { + public MobilePositionSubscribeTask(Device device, ISIPCommander sipCommander, DynamicTask dynamicTask) { this.device = device; this.sipCommander = sipCommander; + this.dynamicTask = dynamicTask; } @Override public void run() { - if (timer != null ) { - timer.cancel(); - timer = null; + if (dynamicTask.get(taskKey) != null) { + dynamicTask.stop(taskKey); } sipCommander.mobilePositionSubscribe(device, dialog, eventResult -> { // if (eventResult.dialog != null || eventResult.dialog.getState().equals(DialogState.CONFIRMED)) { @@ -52,13 +54,7 @@ dialog = null; // 澶辫触 logger.warn("[绉诲姩浣嶇疆璁㈤槄]澶辫触锛屼俊浠ゅ彂閫佸け璐ワ細 {}-{} ", device.getDeviceId(), eventResult.msg); - timer = new Timer(); - timer.schedule(new TimerTask() { - @Override - public void run() { - MobilePositionSubscribeTask.this.run(); - } - }, 2000); + dynamicTask.startDelay(taskKey, MobilePositionSubscribeTask.this, 2000); }); } @@ -72,9 +68,8 @@ * COMPLETED-> Completed Dialog鐘舵��-宸插畬鎴� * TERMINATED-> Terminated Dialog鐘舵��-缁堟 */ - if (timer != null ) { - timer.cancel(); - timer = null; + if (dynamicTask.get(taskKey) != null) { + dynamicTask.stop(taskKey); } if (dialog != null && dialog.getState().equals(DialogState.CONFIRMED)) { logger.info("鍙栨秷绉诲姩璁㈤槄鏃禿ialog鐘舵�佷负{}", dialog.getState()); @@ -96,7 +91,9 @@ } @Override public DialogState getDialogState() { - if (dialog == null) return null; + if (dialog == null) { + return null; + } return dialog.getState(); } } diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/SIPProcessorObserver.java b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/SIPProcessorObserver.java index 69a75f4..a9c9089 100644 --- a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/SIPProcessorObserver.java +++ b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/SIPProcessorObserver.java @@ -62,7 +62,7 @@ * @param processor 澶勭悊绋嬪簭 */ public void addTimeoutProcessor(ITimeoutProcessor processor) { - this.timeoutProcessor = processor; + timeoutProcessor = processor; } /** diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/callback/CheckForAllRecordsThread.java b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/callback/CheckForAllRecordsThread.java index dff74cf..8a2e900 100644 --- a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/callback/CheckForAllRecordsThread.java +++ b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/callback/CheckForAllRecordsThread.java @@ -29,6 +29,7 @@ this.recordInfo = recordInfo; } + @Override public void run() { String cacheKey = this.key; diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/callback/DeferredResultHolder.java b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/callback/DeferredResultHolder.java index dbedcb6..cfb13c3 100644 --- a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/callback/DeferredResultHolder.java +++ b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/callback/DeferredResultHolder.java @@ -65,12 +65,16 @@ public DeferredResult get(String key, String id) { Map<String, DeferredResult> deferredResultMap = map.get(key); - if (deferredResultMap == null) return null; + if (deferredResultMap == null) { + return null; + } return deferredResultMap.get(id); } public boolean exist(String key, String id){ - if (key == null) return false; + if (key == null) { + return false; + } Map<String, DeferredResult> deferredResultMap = map.get(key); if (id == null) { return deferredResultMap != null; diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/SIPRequestHeaderPlarformProvider.java b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/SIPRequestHeaderPlarformProvider.java index 7d67e82..1c2e611 100644 --- a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/SIPRequestHeaderPlarformProvider.java +++ b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/SIPRequestHeaderPlarformProvider.java @@ -68,9 +68,6 @@ toHeader, viaHeaders, maxForwards); List<String> agentParam = new ArrayList<>(); - agentParam.add("wvp-pro"); - UserAgentHeader userAgentHeader = sipFactory.createHeaderFactory().createUserAgentHeader(agentParam); - request.addHeader(userAgentHeader); ContentTypeHeader contentTypeHeader = sipFactory.createHeaderFactory().createContentTypeHeader("Application", "MANSCDP+xml"); request.setContent(content, contentTypeHeader); @@ -115,10 +112,6 @@ ExpiresHeader expires = sipFactory.createHeaderFactory().createExpiresHeader(Integer.parseInt(platform.getExpires())); request.addHeader(expires); - List<String> agentParam = new ArrayList<>(); - agentParam.add("wvp-pro"); - UserAgentHeader userAgentHeader = sipFactory.createHeaderFactory().createUserAgentHeader(agentParam); - request.addHeader(userAgentHeader); return request; } @@ -226,10 +219,6 @@ messageFactory.setDefaultContentEncodingCharset(parentPlatform.getCharacterSet()); request = messageFactory.createRequest(requestURI, Request.MESSAGE, callIdHeader, cSeqHeader, fromHeader, toHeader, viaHeaders, maxForwards); - List<String> agentParam = new ArrayList<>(); - agentParam.add("wvp-pro"); - UserAgentHeader userAgentHeader = sipFactory.createHeaderFactory().createUserAgentHeader(agentParam); - request.addHeader(userAgentHeader); ContentTypeHeader contentTypeHeader = sipFactory.createHeaderFactory().createContentTypeHeader("Application", "MANSCDP+xml"); request.setContent(content, contentTypeHeader); diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/SIPRequestHeaderProvider.java b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/SIPRequestHeaderProvider.java index 5d5deae..349732b 100644 --- a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/SIPRequestHeaderProvider.java +++ b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/SIPRequestHeaderProvider.java @@ -228,9 +228,13 @@ public Request createInfoRequest(Device device, StreamInfo streamInfo, String content) throws PeerUnavailableException, ParseException, InvalidArgumentException { Request request = null; - if (streamInfo == null) return null; + if (streamInfo == null) { + return null; + } Dialog dialog = streamSession.getDialogByStream(streamInfo.getDeviceID(), streamInfo.getChannelId(), streamInfo.getStream()); - if (dialog == null) return null; + if (dialog == null) { + return null; + } SipURI requestLine = sipFactory.createAddressFactory().createSipURI(device.getDeviceId(), device.getHostAddress()); 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 a99ef4d..ea8f202 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 @@ -27,6 +27,7 @@ import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.boot.SpringBootVersion; import org.springframework.context.annotation.DependsOn; import org.springframework.stereotype.Component; import org.springframework.util.StringUtils; @@ -37,7 +38,9 @@ import javax.sip.message.Request; import java.lang.reflect.Field; import java.text.ParseException; +import java.util.ArrayList; import java.util.HashSet; +import java.util.List; /** * @description:璁惧鑳藉姏鎺ュ彛锛岀敤浜庡畾涔夎澶囩殑鎺у埗銆佹煡璇㈣兘鍔� @@ -49,7 +52,7 @@ public class SIPCommander implements ISIPCommander { private final Logger logger = LoggerFactory.getLogger(SIPCommander.class); - + @Autowired private SipConfig sipConfig; @@ -340,13 +343,15 @@ * @param channelId 棰勮閫氶亾 * @param event hook璁㈤槄 * @param errorEvent sip閿欒璁㈤槄 - */ + */ @Override public void playStreamCmd(MediaServerItem mediaServerItem, SSRCInfo ssrcInfo, Device device, String channelId, ZLMHttpHookSubscribe.Event event, SipSubscribe.Event okEvent, SipSubscribe.Event errorEvent) { String streamId = ssrcInfo.getStream(); try { - if (device == null) return; + if (device == null) { + return; + } String streamMode = device.getStreamMode().toUpperCase(); logger.info("{} 鍒嗛厤鐨刏LM涓�: {} [{}:{}]", streamId, mediaServerItem.getId(), mediaServerItem.getIp(), ssrcInfo.getPort()); @@ -694,7 +699,9 @@ if (callId != null) { dialog = streamSession.getDialogByCallId(deviceId, channelId, callId); }else { - if (stream == null) return; + if (stream == null) { + return; + } dialog = streamSession.getDialogByStream(deviceId, channelId, stream); } if (ssrcTransaction != null) { @@ -1454,6 +1461,7 @@ * @param device 瑙嗛璁惧 * @return true = 鍛戒护鍙戦�佹垚鍔� */ + @Override public boolean mobilePositionSubscribe(Device device, Dialog dialog, SipSubscribe.Event okEvent ,SipSubscribe.Event errorEvent) { try { StringBuffer subscribePostitionXml = new StringBuffer(200); @@ -1505,6 +1513,7 @@ * @param endTime 鎶ヨ鍙戠敓缁堟鏃堕棿锛堝彲閫夛級 * @return true = 鍛戒护鍙戦�佹垚鍔� */ + @Override public boolean alarmSubscribe(Device device, int expires, String startPriority, String endPriority, String alarmMethod, String alarmType, String startTime, String endTime) { try { StringBuffer cmdXml = new StringBuffer(200); @@ -1637,7 +1646,18 @@ } else if("UDP".equals(device.getTransport())) { clientTransaction = udpSipProvider.getNewClientTransaction(request); } - + if (request.getHeader(UserAgentHeader.NAME) == null) { + List<String> agentParam = new ArrayList<>(); + agentParam.add("wvp-pro"); + // TODO 娣诲姞鐗堟湰淇℃伅浠ュ強鏃ユ湡 + UserAgentHeader userAgentHeader = null; + try { + userAgentHeader = sipFactory.createHeaderFactory().createUserAgentHeader(agentParam); + } catch (ParseException e) { + throw new RuntimeException(e); + } + request.addHeader(userAgentHeader); + } CallIdHeader callIdHeader = (CallIdHeader)request.getHeader(CallIdHeader.NAME); // 娣诲姞閿欒璁㈤槄 if (errorEvent != null) { @@ -1701,7 +1721,9 @@ content.append("CSeq: " + cseq + "\r\n"); content.append("Range: npt=now-\r\n"); Request request = headerProvider.createInfoRequest(device, streamInfo, content.toString()); - if (request == null) return; + if (request == null) { + return; + } logger.info(request.toString()); ClientTransaction clientTransaction = null; if ("TCP".equals(device.getTransport())) { @@ -1730,7 +1752,9 @@ content.append("Range: npt=" + Math.abs(seekTime) + "-\r\n"); Request request = headerProvider.createInfoRequest(device, streamInfo, content.toString()); - if (request == null) return; + if (request == null) { + return; + } logger.info(request.toString()); ClientTransaction clientTransaction = null; if ("TCP".equals(device.getTransport())) { @@ -1758,7 +1782,9 @@ content.append("CSeq: " + cseq + "\r\n"); content.append("Scale: " + String.format("%.1f",speed) + "\r\n"); Request request = headerProvider.createInfoRequest(device, streamInfo, content.toString()); - if (request == null) return; + if (request == null) { + return; + } logger.info(request.toString()); ClientTransaction clientTransaction = null; if ("TCP".equals(device.getTransport())) { @@ -1824,7 +1850,9 @@ // 璁剧疆缂栫爜锛� 闃叉涓枃涔辩爜 messageFactory.setDefaultContentEncodingCharset(characterSet); Dialog dialog = subscribeInfo.getDialog(); - if (dialog == null || !dialog.getState().equals(DialogState.CONFIRMED)) return; + if (dialog == null || !dialog.getState().equals(DialogState.CONFIRMED)) { + return; + } SIPRequest notifyRequest = (SIPRequest)dialog.createRequest(Request.NOTIFY); ContentTypeHeader contentTypeHeader = sipFactory.createHeaderFactory().createContentTypeHeader("Application", "MANSCDP+xml"); notifyRequest.setContent(catalogXmlContent, contentTypeHeader); 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 8066992..2aafd98 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 @@ -529,7 +529,9 @@ // 璁剧疆缂栫爜锛� 闃叉涓枃涔辩爜 messageFactory.setDefaultContentEncodingCharset(characterSet); Dialog dialog = subscribeInfo.getDialog(); - if (dialog == null || !dialog.getState().equals(DialogState.CONFIRMED)) return; + if (dialog == null || !dialog.getState().equals(DialogState.CONFIRMED)) { + return; + } SIPRequest notifyRequest = (SIPRequest)dialog.createRequest(Request.NOTIFY); ContentTypeHeader contentTypeHeader = sipFactory.createHeaderFactory().createContentTypeHeader("Application", "MANSCDP+xml"); notifyRequest.setContent(catalogXmlContent, contentTypeHeader); diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/SIPRequestProcessorParent.java b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/SIPRequestProcessorParent.java index 34d4536..56078f1 100644 --- a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/SIPRequestProcessorParent.java +++ b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/SIPRequestProcessorParent.java @@ -139,7 +139,9 @@ serverTransaction.sendResponse(response); if (statusCode >= 200 && !"NOTIFY".equals(evt.getRequest().getMethod())) { - if (serverTransaction.getDialog() != null) serverTransaction.getDialog().delete(); + if (serverTransaction.getDialog() != null) { + serverTransaction.getDialog().delete(); + } } } @@ -149,7 +151,9 @@ ServerTransaction serverTransaction = getServerTransaction(evt); serverTransaction.sendResponse(response); if (statusCode >= 200 && !"NOTIFY".equals(evt.getRequest().getMethod())) { - if (serverTransaction.getDialog() != null) serverTransaction.getDialog().delete(); + if (serverTransaction.getDialog() != null) { + serverTransaction.getDialog().delete(); + } } } @@ -215,7 +219,9 @@ return getRootElement(evt, "gb2312"); } public Element getRootElement(RequestEvent evt, String charset) throws DocumentException { - if (charset == null) charset = "gb2312"; + if (charset == null) { + charset = "gb2312"; + } Request request = evt.getRequest(); SAXReader reader = new SAXReader(); reader.setEncoding(charset); diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/AckRequestProcessor.java b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/AckRequestProcessor.java index ec83fa8..0f65bf5 100644 --- a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/AckRequestProcessor.java +++ b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/AckRequestProcessor.java @@ -72,7 +72,9 @@ public void process(RequestEvent evt) { Dialog dialog = evt.getDialog(); CallIdHeader callIdHeader = (CallIdHeader)evt.getRequest().getHeader(CallIdHeader.NAME); - if (dialog == null) return; + if (dialog == null) { + return; + } if (dialog.getState()== DialogState.CONFIRMED) { String platformGbId = ((SipURI) ((HeaderAddress) evt.getRequest().getHeader(FromHeader.NAME)).getAddress().getURI()).getUser(); logger.info("ACK璇锋眰锛� platformGbId->{}", platformGbId); diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/ByeRequestProcessor.java b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/ByeRequestProcessor.java index bdea90f..7531809 100644 --- a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/ByeRequestProcessor.java +++ b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/ByeRequestProcessor.java @@ -81,7 +81,9 @@ responseAck(evt, Response.OK); Dialog dialog = evt.getDialog(); CallIdHeader callIdHeader = (CallIdHeader)evt.getRequest().getHeader(CallIdHeader.NAME); - if (dialog == null) return; + if (dialog == null) { + return; + } if (dialog.getState().equals(DialogState.TERMINATED)) { String platformGbId = ((SipURI) ((HeaderAddress) evt.getRequest().getHeader(FromHeader.NAME)).getAddress().getURI()).getUser(); String channelId = ((SipURI) ((HeaderAddress) evt.getRequest().getHeader(ToHeader.NAME)).getAddress().getURI()).getUser(); diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/InviteRequestProcessor.java b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/InviteRequestProcessor.java index 5d02bda..bb46a71 100644 --- a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/InviteRequestProcessor.java +++ b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/InviteRequestProcessor.java @@ -321,7 +321,9 @@ response = getMessageFactory().createResponse(event.statusCode, evt.getRequest()); ServerTransaction serverTransaction = getServerTransaction(evt); serverTransaction.sendResponse(response); - if (serverTransaction.getDialog() != null) serverTransaction.getDialog().delete(); + if (serverTransaction.getDialog() != null) { + serverTransaction.getDialog().delete(); + } } catch (ParseException | SipException | InvalidArgumentException e) { e.printStackTrace(); } diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/NotifyRequestProcessor.java b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/NotifyRequestProcessor.java index 420f899..98cb3aa 100644 --- a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/NotifyRequestProcessor.java +++ b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/NotifyRequestProcessor.java @@ -5,7 +5,6 @@ import com.genersoft.iot.vmp.conf.SipConfig; import com.genersoft.iot.vmp.conf.UserSetting; import com.genersoft.iot.vmp.gb28181.bean.*; -import com.genersoft.iot.vmp.gb28181.event.DeviceOffLineDetector; import com.genersoft.iot.vmp.gb28181.event.EventPublisher; import com.genersoft.iot.vmp.gb28181.event.subscribe.catalog.CatalogEvent; import com.genersoft.iot.vmp.gb28181.transmit.SIPProcessorObserver; @@ -19,7 +18,6 @@ import com.genersoft.iot.vmp.gb28181.utils.XmlUtil; import com.genersoft.iot.vmp.storager.IRedisCatchStorage; import com.genersoft.iot.vmp.storager.IVideoManagerStorage; -import com.genersoft.iot.vmp.utils.GpsUtil; import com.genersoft.iot.vmp.utils.redis.RedisUtil; import org.dom4j.DocumentException; import org.dom4j.Element; @@ -64,10 +62,6 @@ @Autowired private EventPublisher publisher; - - @Autowired - private DeviceOffLineDetector offLineDetector; - private String method = "NOTIFY"; @@ -240,7 +234,7 @@ // 鍥炲200 OK responseAck(evt, Response.OK); - if (offLineDetector.isOnline(deviceId)) { + if (redisCatchStorage.deviceIsOnline(deviceId)) { publisher.deviceAlarmEventPublish(deviceAlarm); } } catch (DocumentException | SipException | InvalidArgumentException | ParseException e) { @@ -331,7 +325,7 @@ } - if (!offLineDetector.isOnline(deviceId)) { + if (!redisCatchStorage.deviceIsOnline(deviceId)) { publisher.onlineEventPublish(device, VideoManagerConstants.EVENT_ONLINE_MESSAGE); } } @@ -355,10 +349,6 @@ } public void setDeferredResultHolder(DeferredResultHolder deferredResultHolder) { - } - - public void setOffLineDetector(DeviceOffLineDetector offLineDetector) { - this.offLineDetector = offLineDetector; } public IRedisCatchStorage getRedisCatchStorage() { diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/RegisterRequestProcessor.java b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/RegisterRequestProcessor.java index bc7365b..ce5ca43 100644 --- a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/RegisterRequestProcessor.java +++ b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/RegisterRequestProcessor.java @@ -130,7 +130,9 @@ response = getMessageFactory().createResponse(Response.BAD_REQUEST, request); ServerTransaction serverTransaction = getServerTransaction(evt); serverTransaction.sendResponse(response); - if (serverTransaction.getDialog() != null) serverTransaction.getDialog().delete(); + if (serverTransaction.getDialog() != null) { + serverTransaction.getDialog().delete(); + } return; } // 娣诲姞Contact澶� @@ -195,7 +197,9 @@ return; } serverTransaction.sendResponse(response); - if (serverTransaction.getDialog() != null) serverTransaction.getDialog().delete(); + if (serverTransaction.getDialog() != null) { + serverTransaction.getDialog().delete(); + } } } diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/SubscribeRequestProcessor.java b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/SubscribeRequestProcessor.java index 42fcdeb..548dbde 100644 --- a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/SubscribeRequestProcessor.java +++ b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/SubscribeRequestProcessor.java @@ -35,21 +35,16 @@ /** * SIP鍛戒护绫诲瀷锛� SUBSCRIBE璇锋眰 + * @author lin */ @Component public class SubscribeRequestProcessor extends SIPRequestProcessorParent implements InitializingBean, ISIPRequestProcessor { - private Logger logger = LoggerFactory.getLogger(SubscribeRequestProcessor.class); - private String method = "SUBSCRIBE"; + private final Logger logger = LoggerFactory.getLogger(SubscribeRequestProcessor.class); + private final String method = "SUBSCRIBE"; @Autowired private SIPProcessorObserver sipProcessorObserver; - - @Autowired - private IRedisCatchStorage redisCatchStorage; - - @Autowired - private ISIPCommanderForPlatform sipCommanderForPlatform; @Autowired private IVideoManagerStorage storager; @@ -82,7 +77,7 @@ /** * 澶勭悊SUBSCRIBE璇锋眰 * - * @param evt + * @param evt 浜嬩欢 */ @Override public void process(RequestEvent evt) { @@ -101,13 +96,12 @@ } else { logger.info("鎺ユ敹鍒版秷鎭細" + cmd); - Response response = null; - response = getMessageFactory().createResponse(200, request); + Response response = getMessageFactory().createResponse(200, request); if (response != null) { ExpiresHeader expireHeader = getHeaderFactory().createExpiresHeader(30); response.setExpires(expireHeader); } - logger.info("response : " + response.toString()); + logger.info("response : " + response); ServerTransaction transaction = getServerTransaction(evt); if (transaction != null) { transaction.sendResponse(response); @@ -117,13 +111,7 @@ logger.info("processRequest serverTransactionId is null."); } } - } catch (ParseException e) { - e.printStackTrace(); - } catch (SipException e) { - e.printStackTrace(); - } catch (InvalidArgumentException e) { - e.printStackTrace(); - } catch (DocumentException e) { + } catch (ParseException | SipException | InvalidArgumentException | DocumentException e) { e.printStackTrace(); } @@ -134,14 +122,14 @@ */ private void processNotifyMobilePosition(RequestEvent evt, Element rootElement) throws SipException { String platformId = SipUtils.getUserIdFromFromHeader(evt.getRequest()); - String deviceID = XmlUtil.getText(rootElement, "DeviceID"); + String deviceId = XmlUtil.getText(rootElement, "DeviceID"); ParentPlatform platform = storager.queryParentPlatByServerGBId(platformId); SubscribeInfo subscribeInfo = new SubscribeInfo(evt, platformId); if (platform == null) { return; } if (evt.getServerTransaction() == null) { - ServerTransaction serverTransaction = platform.getTransport().equals("TCP") ? tcpSipProvider.getNewServerTransaction(evt.getRequest()) + ServerTransaction serverTransaction = "TCP".equals(platform.getTransport()) ? tcpSipProvider.getNewServerTransaction(evt.getRequest()) : udpSipProvider.getNewServerTransaction(evt.getRequest()); subscribeInfo.setTransaction(serverTransaction); Dialog dialog = serverTransaction.getDialog(); @@ -154,13 +142,14 @@ resultXml.append("<?xml version=\"1.0\" ?>\r\n") .append("<Response>\r\n") .append("<CmdType>MobilePosition</CmdType>\r\n") - .append("<SN>" + sn + "</SN>\r\n") - .append("<DeviceID>" + deviceID + "</DeviceID>\r\n") + .append("<SN>").append(sn).append("</SN>\r\n") + .append("<DeviceID>").append(deviceId).append("</DeviceID>\r\n") .append("<Result>OK</Result>\r\n") .append("</Response>\r\n"); if (subscribeInfo.getExpires() > 0) { - String interval = XmlUtil.getText(rootElement, "Interval"); // GPS涓婃姤鏃堕棿闂撮殧 + // GPS涓婃姤鏃堕棿闂撮殧 + String interval = XmlUtil.getText(rootElement, "Interval"); if (interval == null) { subscribeInfo.setGpsInterval(5); }else { @@ -169,15 +158,7 @@ subscribeInfo.setSn(sn); subscribeHolder.putMobilePositionSubscribe(platformId, subscribeInfo); -// if (subscribeHolder.getMobilePositionSubscribe(platformId) == null ) { -// subscribeHolder.putMobilePositionSubscribe(platformId, subscribeInfo); -// }else { -// if (subscribeHolder.getMobilePositionSubscribe(platformId).getDialog() != null -// && subscribeHolder.getMobilePositionSubscribe(platformId).getDialog().getState() != null -// && !subscribeHolder.getMobilePositionSubscribe(platformId).getDialog().getState().equals(DialogState.CONFIRMED)) { -// subscribeHolder.putMobilePositionSubscribe(platformId, subscribeInfo); -// } -// } + }else if (subscribeInfo.getExpires() == 0) { subscribeHolder.removeMobilePositionSubscribe(platformId); } @@ -185,11 +166,7 @@ try { ParentPlatform parentPlatform = storager.queryParentPlatByServerGBId(platformId); responseXmlAck(evt, resultXml.toString(), parentPlatform); - } catch (SipException e) { - e.printStackTrace(); - } catch (InvalidArgumentException e) { - e.printStackTrace(); - } catch (ParseException e) { + } catch (SipException | InvalidArgumentException | ParseException e) { e.printStackTrace(); } } @@ -200,12 +177,14 @@ private void processNotifyCatalogList(RequestEvent evt, Element rootElement) throws SipException { String platformId = SipUtils.getUserIdFromFromHeader(evt.getRequest()); - String deviceID = XmlUtil.getText(rootElement, "DeviceID"); + String deviceId = XmlUtil.getText(rootElement, "DeviceID"); ParentPlatform platform = storager.queryParentPlatByServerGBId(platformId); - if (platform == null)return; + if (platform == null){ + return; + } SubscribeInfo subscribeInfo = new SubscribeInfo(evt, platformId); if (evt.getServerTransaction() == null) { - ServerTransaction serverTransaction = platform.getTransport().equals("TCP") ? tcpSipProvider.getNewServerTransaction(evt.getRequest()) + ServerTransaction serverTransaction = "TCP".equals(platform.getTransport()) ? tcpSipProvider.getNewServerTransaction(evt.getRequest()) : udpSipProvider.getNewServerTransaction(evt.getRequest()); subscribeInfo.setTransaction(serverTransaction); Dialog dialog = serverTransaction.getDialog(); @@ -213,13 +192,13 @@ subscribeInfo.setDialog(dialog); } String sn = XmlUtil.getText(rootElement, "SN"); - logger.info("[鍥炲 鐩綍璁㈤槄]: {}/{}", platformId, deviceID); + logger.info("[鍥炲 鐩綍璁㈤槄]: {}/{}", platformId, deviceId); StringBuilder resultXml = new StringBuilder(200); resultXml.append("<?xml version=\"1.0\" ?>\r\n") .append("<Response>\r\n") .append("<CmdType>Catalog</CmdType>\r\n") - .append("<SN>" + sn + "</SN>\r\n") - .append("<DeviceID>" + deviceID + "</DeviceID>\r\n") + .append("<SN>").append(sn).append("</SN>\r\n") + .append("<DeviceID>").append(deviceId).append("</DeviceID>\r\n") .append("<Result>OK</Result>\r\n") .append("</Response>\r\n"); @@ -232,11 +211,7 @@ try { ParentPlatform parentPlatform = storager.queryParentPlatByServerGBId(platformId); responseXmlAck(evt, resultXml.toString(), parentPlatform); - } catch (SipException e) { - e.printStackTrace(); - } catch (InvalidArgumentException e) { - e.printStackTrace(); - } catch (ParseException e) { + } catch (SipException | InvalidArgumentException | ParseException e) { e.printStackTrace(); } } diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/message/notify/cmd/AlarmNotifyMessageHandler.java b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/message/notify/cmd/AlarmNotifyMessageHandler.java index e5d7aa0..b7e222d 100644 --- a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/message/notify/cmd/AlarmNotifyMessageHandler.java +++ b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/message/notify/cmd/AlarmNotifyMessageHandler.java @@ -1,10 +1,8 @@ package com.genersoft.iot.vmp.gb28181.transmit.event.request.impl.message.notify.cmd; -import com.alibaba.fastjson.JSON; import com.genersoft.iot.vmp.conf.SipConfig; import com.genersoft.iot.vmp.conf.UserSetting; import com.genersoft.iot.vmp.gb28181.bean.*; -import com.genersoft.iot.vmp.gb28181.event.DeviceOffLineDetector; import com.genersoft.iot.vmp.gb28181.event.EventPublisher; import com.genersoft.iot.vmp.gb28181.transmit.event.request.SIPRequestProcessorParent; import com.genersoft.iot.vmp.gb28181.transmit.event.request.impl.message.IMessageHandler; @@ -14,7 +12,6 @@ import com.genersoft.iot.vmp.service.IDeviceAlarmService; import com.genersoft.iot.vmp.storager.IRedisCatchStorage; import com.genersoft.iot.vmp.storager.IVideoManagerStorage; -import com.genersoft.iot.vmp.utils.GpsUtil; import org.dom4j.Element; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -35,7 +32,7 @@ @Component public class AlarmNotifyMessageHandler extends SIPRequestProcessorParent implements InitializingBean, IMessageHandler { - private Logger logger = LoggerFactory.getLogger(AlarmNotifyMessageHandler.class); + private final Logger logger = LoggerFactory.getLogger(AlarmNotifyMessageHandler.class); private final String cmdType = "Alarm"; @Autowired @@ -58,9 +55,6 @@ @Autowired private IDeviceAlarmService deviceAlarmService; - - @Autowired - private DeviceOffLineDetector offLineDetector; @Override public void afterPropertiesSet() throws Exception { @@ -91,24 +85,27 @@ deviceAlarm.setAlarmPriority(getText(rootElement, "AlarmPriority")); deviceAlarm.setAlarmMethod(getText(rootElement, "AlarmMethod")); deviceAlarm.setAlarmTime(getText(rootElement, "AlarmTime")); - if (getText(rootElement, "AlarmDescription") == null) { + String alarmDescription = getText(rootElement, "AlarmDescription"); + if (alarmDescription == null) { deviceAlarm.setAlarmDescription(""); } else { - deviceAlarm.setAlarmDescription(getText(rootElement, "AlarmDescription")); + deviceAlarm.setAlarmDescription(alarmDescription); } - if (NumericUtil.isDouble(getText(rootElement, "Longitude"))) { - deviceAlarm.setLongitude(Double.parseDouble(getText(rootElement, "Longitude"))); + String longitude = getText(rootElement, "Longitude"); + if (longitude != null && NumericUtil.isDouble(longitude)) { + deviceAlarm.setLongitude(Double.parseDouble(longitude)); } else { deviceAlarm.setLongitude(0.00); } - if (NumericUtil.isDouble(getText(rootElement, "Latitude"))) { - deviceAlarm.setLatitude(Double.parseDouble(getText(rootElement, "Latitude"))); + String latitude = getText(rootElement, "Latitude"); + if (latitude != null && NumericUtil.isDouble(latitude)) { + deviceAlarm.setLatitude(Double.parseDouble(latitude)); } else { deviceAlarm.setLatitude(0.00); } if (!StringUtils.isEmpty(deviceAlarm.getAlarmMethod())) { - if ( deviceAlarm.getAlarmMethod().equals("4")) { + if ( deviceAlarm.getAlarmMethod().contains(DeviceAlarmMethod.GPS.getVal() + "")) { MobilePosition mobilePosition = new MobilePosition(); mobilePosition.setDeviceId(deviceAlarm.getDeviceId()); mobilePosition.setTime(deviceAlarm.getAlarmTime()); @@ -128,7 +125,7 @@ } } if (!StringUtils.isEmpty(deviceAlarm.getDeviceId())) { - if (deviceAlarm.getAlarmMethod().equals("5")) { + if (deviceAlarm.getAlarmMethod().contains(DeviceAlarmMethod.Video.getVal() + "")) { deviceAlarm.setAlarmType(getText(rootElement.element("Info"), "AlarmType")); } } @@ -151,7 +148,7 @@ } - if (offLineDetector.isOnline(device.getDeviceId())) { + if (redisCatchStorage.deviceIsOnline(device.getDeviceId())) { publisher.deviceAlarmEventPublish(deviceAlarm); } } @@ -179,25 +176,28 @@ deviceAlarm.setAlarmPriority(getText(rootElement, "AlarmPriority")); deviceAlarm.setAlarmMethod(getText(rootElement, "AlarmMethod")); deviceAlarm.setAlarmTime(getText(rootElement, "AlarmTime")); - if (getText(rootElement, "AlarmDescription") == null) { + String alarmDescription = getText(rootElement, "AlarmDescription"); + if (alarmDescription == null) { deviceAlarm.setAlarmDescription(""); } else { - deviceAlarm.setAlarmDescription(getText(rootElement, "AlarmDescription")); + deviceAlarm.setAlarmDescription(alarmDescription); } - if (NumericUtil.isDouble(getText(rootElement, "Longitude"))) { - deviceAlarm.setLongitude(Double.parseDouble(getText(rootElement, "Longitude"))); + String longitude = getText(rootElement, "Longitude"); + if (longitude != null && NumericUtil.isDouble(longitude)) { + deviceAlarm.setLongitude(Double.parseDouble(longitude)); } else { deviceAlarm.setLongitude(0.00); } - if (NumericUtil.isDouble(getText(rootElement, "Latitude"))) { - deviceAlarm.setLatitude(Double.parseDouble(getText(rootElement, "Latitude"))); + String latitude = getText(rootElement, "Latitude"); + if (latitude != null && NumericUtil.isDouble(latitude)) { + deviceAlarm.setLatitude(Double.parseDouble(latitude)); } else { deviceAlarm.setLatitude(0.00); } if (!StringUtils.isEmpty(deviceAlarm.getAlarmMethod())) { - if (deviceAlarm.getAlarmMethod().equals("5")) { + if (deviceAlarm.getAlarmMethod().contains(DeviceAlarmMethod.Video.getVal() + "")) { deviceAlarm.setAlarmType(getText(rootElement.element("Info"), "AlarmType")); } } diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/message/notify/cmd/KeepaliveNotifyMessageHandler.java b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/message/notify/cmd/KeepaliveNotifyMessageHandler.java index ccb8039..08a7751 100644 --- a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/message/notify/cmd/KeepaliveNotifyMessageHandler.java +++ b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/message/notify/cmd/KeepaliveNotifyMessageHandler.java @@ -70,7 +70,9 @@ videoManagerStorager.updateDevice(device); redisCatchStorage.updateDevice(device); } - publisher.onlineEventPublish(device, VideoManagerConstants.EVENT_ONLINE_KEEPLIVE); + if (!redisCatchStorage.deviceIsOnline(device.getDeviceId())) { + publisher.onlineEventPublish(device, VideoManagerConstants.EVENT_ONLINE_KEEPLIVE); + } } } catch (SipException e) { e.printStackTrace(); diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/message/response/cmd/CatalogResponseMessageHandler.java b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/message/response/cmd/CatalogResponseMessageHandler.java index 910524d..56b42ca 100644 --- a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/message/response/cmd/CatalogResponseMessageHandler.java +++ b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/message/response/cmd/CatalogResponseMessageHandler.java @@ -1,14 +1,11 @@ package com.genersoft.iot.vmp.gb28181.transmit.event.request.impl.message.response.cmd; -import com.genersoft.iot.vmp.common.VideoManagerConstants; import com.genersoft.iot.vmp.conf.SipConfig; import com.genersoft.iot.vmp.conf.UserSetting; import com.genersoft.iot.vmp.gb28181.bean.*; -import com.genersoft.iot.vmp.gb28181.event.DeviceOffLineDetector; import com.genersoft.iot.vmp.gb28181.event.EventPublisher; import com.genersoft.iot.vmp.gb28181.session.CatalogDataCatch; import com.genersoft.iot.vmp.gb28181.transmit.callback.DeferredResultHolder; -import com.genersoft.iot.vmp.gb28181.transmit.callback.RequestMessage; import com.genersoft.iot.vmp.gb28181.transmit.event.request.SIPRequestProcessorParent; import com.genersoft.iot.vmp.gb28181.transmit.event.request.impl.message.IMessageHandler; import com.genersoft.iot.vmp.gb28181.transmit.event.request.impl.message.response.ResponseMessageHandler; @@ -17,8 +14,6 @@ import com.genersoft.iot.vmp.gb28181.utils.XmlUtil; import com.genersoft.iot.vmp.storager.IRedisCatchStorage; import com.genersoft.iot.vmp.storager.IVideoManagerStorage; -import com.genersoft.iot.vmp.utils.GpsUtil; -import com.genersoft.iot.vmp.vmanager.bean.WVPResult; import org.dom4j.DocumentException; import org.dom4j.Element; import org.slf4j.Logger; @@ -57,9 +52,6 @@ @Autowired private CatalogDataCatch catalogDataCatch; - - @Autowired - private DeviceOffLineDetector offLineDetector; @Autowired private SipConfig config; diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/message/response/cmd/DeviceInfoResponseMessageHandler.java b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/message/response/cmd/DeviceInfoResponseMessageHandler.java index 855797e..276be49 100644 --- a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/message/response/cmd/DeviceInfoResponseMessageHandler.java +++ b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/message/response/cmd/DeviceInfoResponseMessageHandler.java @@ -4,13 +4,13 @@ import com.genersoft.iot.vmp.conf.SipConfig; import com.genersoft.iot.vmp.gb28181.bean.Device; import com.genersoft.iot.vmp.gb28181.bean.ParentPlatform; -import com.genersoft.iot.vmp.gb28181.event.DeviceOffLineDetector; import com.genersoft.iot.vmp.gb28181.event.EventPublisher; import com.genersoft.iot.vmp.gb28181.transmit.callback.DeferredResultHolder; import com.genersoft.iot.vmp.gb28181.transmit.callback.RequestMessage; import com.genersoft.iot.vmp.gb28181.transmit.event.request.SIPRequestProcessorParent; import com.genersoft.iot.vmp.gb28181.transmit.event.request.impl.message.IMessageHandler; import com.genersoft.iot.vmp.gb28181.transmit.event.request.impl.message.response.ResponseMessageHandler; +import com.genersoft.iot.vmp.storager.IRedisCatchStorage; import com.genersoft.iot.vmp.storager.IVideoManagerStorage; import org.dom4j.DocumentException; import org.dom4j.Element; @@ -42,10 +42,10 @@ private IVideoManagerStorage storager; @Autowired - private DeferredResultHolder deferredResultHolder; + private IRedisCatchStorage redisCatchStorage; @Autowired - private DeviceOffLineDetector offLineDetector; + private DeferredResultHolder deferredResultHolder; @Autowired private SipConfig config; @@ -82,7 +82,7 @@ deferredResultHolder.invokeAllResult(msg); // 鍥炲200 OK responseAck(evt, Response.OK); - if (offLineDetector.isOnline(device.getDeviceId())) { + if (redisCatchStorage.deviceIsOnline(device.getDeviceId())) { publisher.onlineEventPublish(device, VideoManagerConstants.EVENT_ONLINE_MESSAGE); } } catch (DocumentException e) { diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/message/response/cmd/DeviceStatusResponseMessageHandler.java b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/message/response/cmd/DeviceStatusResponseMessageHandler.java index 1a7ab64..4e2f7f7 100644 --- a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/message/response/cmd/DeviceStatusResponseMessageHandler.java +++ b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/message/response/cmd/DeviceStatusResponseMessageHandler.java @@ -4,7 +4,6 @@ import com.genersoft.iot.vmp.common.VideoManagerConstants; import com.genersoft.iot.vmp.gb28181.bean.Device; import com.genersoft.iot.vmp.gb28181.bean.ParentPlatform; -import com.genersoft.iot.vmp.gb28181.event.DeviceOffLineDetector; import com.genersoft.iot.vmp.gb28181.event.EventPublisher; import com.genersoft.iot.vmp.gb28181.transmit.callback.DeferredResultHolder; import com.genersoft.iot.vmp.gb28181.transmit.callback.RequestMessage; @@ -12,6 +11,7 @@ import com.genersoft.iot.vmp.gb28181.transmit.event.request.impl.message.IMessageHandler; import com.genersoft.iot.vmp.gb28181.transmit.event.request.impl.message.response.ResponseMessageHandler; import com.genersoft.iot.vmp.gb28181.utils.XmlUtil; +import com.genersoft.iot.vmp.storager.IRedisCatchStorage; import org.dom4j.Element; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -34,14 +34,15 @@ @Autowired private ResponseMessageHandler responseMessageHandler; - @Autowired - private DeviceOffLineDetector offLineDetector; @Autowired private DeferredResultHolder deferredResultHolder; @Autowired private EventPublisher publisher; + + @Autowired + private IRedisCatchStorage redisCatchStorage; @Override public void afterPropertiesSet() throws Exception { @@ -74,10 +75,8 @@ msg.setData(json); deferredResultHolder.invokeAllResult(msg); - if (offLineDetector.isOnline(device.getDeviceId())) { + if (redisCatchStorage.deviceIsOnline(device.getDeviceId())) { publisher.onlineEventPublish(device, VideoManagerConstants.EVENT_ONLINE_MESSAGE); - } else { - } } diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/utils/SipUtils.java b/src/main/java/com/genersoft/iot/vmp/gb28181/utils/SipUtils.java index eed3763..35ec640 100644 --- a/src/main/java/com/genersoft/iot/vmp/gb28181/utils/SipUtils.java +++ b/src/main/java/com/genersoft/iot/vmp/gb28181/utils/SipUtils.java @@ -25,7 +25,9 @@ * */ public static String getChannelIdFromHeader(Request request) { Header subject = request.getHeader("subject"); - if (subject == null) return null; + if (subject == null) { + return null; + } return ((Subject) subject).getSubject().split(":")[0]; } diff --git a/src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMHttpHookSubscribe.java b/src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMHttpHookSubscribe.java index 8a62bea..ffd8ec9 100644 --- a/src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMHttpHookSubscribe.java +++ b/src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMHttpHookSubscribe.java @@ -85,7 +85,9 @@ if (result == null) { result = key.getString(s).equals(hookResponse.getString(s)); }else { - if (key.getString(s) == null) continue; + if (key.getString(s) == null) { + continue; + } result = result && key.getString(s).equals(hookResponse.getString(s)); } } diff --git a/src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMMediaListManager.java b/src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMMediaListManager.java index 9fd4f39..9beac16 100644 --- a/src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMMediaListManager.java +++ b/src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMMediaListManager.java @@ -67,7 +67,9 @@ // 浣跨敤寮傛鐨勫綋鏃舵洿鏂板獟浣撴祦鍒楄〃 zlmresTfulUtils.getMediaList(mediaServerItem, (mediaList ->{ - if (mediaList == null) return; + if (mediaList == null) { + return; + } String dataStr = mediaList.getString("data"); Integer code = mediaList.getInteger("code"); @@ -176,7 +178,9 @@ //浣跨敤寮傛鏇存柊鎺ㄦ祦 zlmresTfulUtils.getMediaList(mediaServerItem, app, streamId, "rtmp", json->{ - if (json == null) return; + if (json == null) { + return; + } String dataStr = json.getString("data"); Integer code = json.getInteger("code"); diff --git a/src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMRTPServerFactory.java b/src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMRTPServerFactory.java index cf8e006..a7e6016 100644 --- a/src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMRTPServerFactory.java +++ b/src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMRTPServerFactory.java @@ -23,7 +23,9 @@ private int[] portRangeArray = new int[2]; public int getFreePort(MediaServerItem mediaServerItem, int startPort, int endPort, List<Integer> usedFreelist) { - if (endPort <= startPort) return -1; + if (endPort <= startPort) { + return -1; + } if (usedFreelist == null) { usedFreelist = new ArrayList<>(); } diff --git a/src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMRunner.java b/src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMRunner.java index 7624323..12829e9 100644 --- a/src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMRunner.java +++ b/src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMRunner.java @@ -3,6 +3,7 @@ import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; +import com.genersoft.iot.vmp.conf.DynamicTask; import com.genersoft.iot.vmp.conf.MediaConfig; import com.genersoft.iot.vmp.gb28181.event.EventPublisher; import com.genersoft.iot.vmp.media.zlm.dto.MediaServerItem; @@ -51,6 +52,9 @@ @Autowired private MediaConfig mediaConfig; + @Autowired + private DynamicTask dynamicTask; + @Qualifier("taskExecutor") @Autowired private ThreadPoolTaskExecutor taskExecutor; @@ -97,27 +101,25 @@ all.add(mediaConfig.getMediaSerItem()); } for (MediaServerItem mediaServerItem : all) { - if (startGetMedia == null) startGetMedia = new HashMap<>(); + if (startGetMedia == null) { + startGetMedia = new HashMap<>(); + } startGetMedia.put(mediaServerItem.getId(), true); taskExecutor.execute(()->{ connectZlmServer(mediaServerItem); }); } - Timer timer = new Timer(); - // 10鍒嗛挓鍚庢湭杩炴帴鍒板垯涓嶅啀鍘讳富鍔ㄨ繛鎺�, TODO 骞跺閲嶅惎鍓嶄娇鐢ㄦ鍦▃lm鐨勯�氶亾鍙戦�乥ye - timer.schedule(new TimerTask() { - @Override - public void run() { + String taskKey = "zlm-connect-timeout"; + dynamicTask.startDelay(taskKey, ()->{ if (startGetMedia != null) { Set<String> allZlmId = startGetMedia.keySet(); for (String id : allZlmId) { - logger.error("[ {} ]]涓诲姩杩炴帴澶辫触锛屼笉鍐嶄富鍔ㄨ繛鎺�", id); + logger.error("[ {} ]]涓诲姩杩炴帴澶辫触锛屼笉鍐嶅皾璇曡繛鎺�", id); } startGetMedia = null; } - // TODO 娓呯悊鏁版嵁搴撲腑涓巖edis涓嶅尮閰嶇殑zlm - } - }, 60 * 1000 * 10); + // TODO 娓呯悊鏁版嵁搴撲腑涓巖edis涓嶅尮閰嶇殑zlm + }, 6 * 1000 ); } @Async @@ -139,12 +141,12 @@ if ( startGetMedia.get(mediaServerItem.getId()) == null || !startGetMedia.get(mediaServerItem.getId())) { return null; } - JSONObject responseJSON = zlmresTfulUtils.getMediaServerConfig(mediaServerItem); - ZLMServerConfig ZLMServerConfig = null; - if (responseJSON != null) { - JSONArray data = responseJSON.getJSONArray("data"); + JSONObject responseJson = zlmresTfulUtils.getMediaServerConfig(mediaServerItem); + ZLMServerConfig zlmServerConfig = null; + if (responseJson != null) { + JSONArray data = responseJson.getJSONArray("data"); if (data != null && data.size() > 0) { - ZLMServerConfig = JSON.parseObject(JSON.toJSONString(data.get(0)), ZLMServerConfig.class); + zlmServerConfig = JSON.parseObject(JSON.toJSONString(data.get(0)), ZLMServerConfig.class); } } else { logger.error("[ {} ]-[ {}:{} ]绗瑊}娆′富鍔ㄨ繛鎺ュけ璐�, 2s鍚庨噸璇�", @@ -159,9 +161,9 @@ } catch (InterruptedException e) { e.printStackTrace(); } - ZLMServerConfig = getMediaServerConfig(mediaServerItem, index += 1); + zlmServerConfig = getMediaServerConfig(mediaServerItem, index += 1); } - return ZLMServerConfig; + return zlmServerConfig; } diff --git a/src/main/java/com/genersoft/iot/vmp/media/zlm/dto/StreamProxyItem.java b/src/main/java/com/genersoft/iot/vmp/media/zlm/dto/StreamProxyItem.java index 39685b0..b7a1399 100644 --- a/src/main/java/com/genersoft/iot/vmp/media/zlm/dto/StreamProxyItem.java +++ b/src/main/java/com/genersoft/iot/vmp/media/zlm/dto/StreamProxyItem.java @@ -29,18 +29,22 @@ this.type = type; } + @Override public String getApp() { return app; } + @Override public void setApp(String app) { this.app = app; } + @Override public String getStream() { return stream; } + @Override public void setStream(String stream) { this.stream = stream; } diff --git a/src/main/java/com/genersoft/iot/vmp/media/zlm/dto/StreamPushItem.java b/src/main/java/com/genersoft/iot/vmp/media/zlm/dto/StreamPushItem.java index 1336807..81c9c76 100644 --- a/src/main/java/com/genersoft/iot/vmp/media/zlm/dto/StreamPushItem.java +++ b/src/main/java/com/genersoft/iot/vmp/media/zlm/dto/StreamPushItem.java @@ -124,18 +124,22 @@ this.id = id; } + @Override public String getApp() { return app; } + @Override public void setApp(String app) { this.app = app; } + @Override public String getStream() { return stream; } + @Override public void setStream(String stream) { this.stream = stream; } diff --git a/src/main/java/com/genersoft/iot/vmp/service/impl/DeviceServiceImpl.java b/src/main/java/com/genersoft/iot/vmp/service/impl/DeviceServiceImpl.java index f287c5e..39a59f8 100644 --- a/src/main/java/com/genersoft/iot/vmp/service/impl/DeviceServiceImpl.java +++ b/src/main/java/com/genersoft/iot/vmp/service/impl/DeviceServiceImpl.java @@ -12,6 +12,8 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor; import org.springframework.stereotype.Service; import javax.sip.DialogState; @@ -43,7 +45,7 @@ } logger.info("[娣诲姞鐩綍璁㈤槄] 璁惧{}", device.getDeviceId()); // 娣诲姞鐩綍璁㈤槄 - CatalogSubscribeTask catalogSubscribeTask = new CatalogSubscribeTask(device, sipCommander); + CatalogSubscribeTask catalogSubscribeTask = new CatalogSubscribeTask(device, sipCommander, dynamicTask); // 鎻愬墠寮�濮嬪埛鏂拌闃� int subscribeCycleForCatalog = Math.max(device.getSubscribeCycleForCatalog(),30); // 璁剧疆鏈�灏忓�间负30 @@ -68,10 +70,10 @@ } logger.info("[娣诲姞绉诲姩浣嶇疆璁㈤槄] 璁惧{}", device.getDeviceId()); // 娣诲姞鐩綍璁㈤槄 - MobilePositionSubscribeTask mobilePositionSubscribeTask = new MobilePositionSubscribeTask(device, sipCommander); - // 鎻愬墠寮�濮嬪埛鏂拌闃� + MobilePositionSubscribeTask mobilePositionSubscribeTask = new MobilePositionSubscribeTask(device, sipCommander, dynamicTask); // 璁剧疆鏈�灏忓�间负30 int subscribeCycleForCatalog = Math.max(device.getSubscribeCycleForMobilePosition(),30); + // 鎻愬墠寮�濮嬪埛鏂拌闃� dynamicTask.startCron(device.getDeviceId() + "mobile_position" , mobilePositionSubscribeTask, subscribeCycleForCatalog -1 ); return true; } diff --git a/src/main/java/com/genersoft/iot/vmp/service/impl/GbStreamServiceImpl.java b/src/main/java/com/genersoft/iot/vmp/service/impl/GbStreamServiceImpl.java index b65f826..a7a5528 100644 --- a/src/main/java/com/genersoft/iot/vmp/service/impl/GbStreamServiceImpl.java +++ b/src/main/java/com/genersoft/iot/vmp/service/impl/GbStreamServiceImpl.java @@ -70,7 +70,9 @@ boolean result = false; TransactionStatus transactionStatus = dataSourceTransactionManager.getTransaction(transactionDefinition); ParentPlatform parentPlatform = platformMapper.getParentPlatByServerGBId(platformId); - if (catalogId == null) catalogId = parentPlatform.getCatalogId(); + if (catalogId == null) { + catalogId = parentPlatform.getCatalogId(); + } try { List<DeviceChannel> deviceChannelList = new ArrayList<>(); for (GbStream gbStream : gbStreams) { diff --git a/src/main/java/com/genersoft/iot/vmp/service/impl/MediaServiceImpl.java b/src/main/java/com/genersoft/iot/vmp/service/impl/MediaServiceImpl.java index 9253b51..2c084a5 100644 --- a/src/main/java/com/genersoft/iot/vmp/service/impl/MediaServiceImpl.java +++ b/src/main/java/com/genersoft/iot/vmp/service/impl/MediaServiceImpl.java @@ -54,7 +54,9 @@ if (mediaList != null) { if (mediaList.getInteger("code") == 0) { JSONArray data = mediaList.getJSONArray("data"); - if (data == null) return null; + if (data == null) { + return null; + } JSONObject mediaJSON = JSON.parseObject(JSON.toJSONString(data.get(0)), JSONObject.class); JSONArray tracks = mediaJSON.getJSONArray("tracks"); streamInfo = getStreamInfoByAppAndStream(mediaInfo, app, stream, tracks); 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 00daf10..f2b6c28 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 @@ -4,6 +4,7 @@ import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.genersoft.iot.vmp.common.StreamInfo; +import com.genersoft.iot.vmp.conf.DynamicTask; import com.genersoft.iot.vmp.conf.UserSetting; import com.genersoft.iot.vmp.gb28181.bean.*; import com.genersoft.iot.vmp.gb28181.event.SipSubscribe; @@ -86,6 +87,9 @@ @Autowired private UserSetting userSetting; + @Autowired + private DynamicTask dynamicTask; + @@ -100,7 +104,7 @@ String uuid = UUID.randomUUID().toString(); msg.setId(uuid); playResult.setUuid(uuid); - DeferredResult<ResponseEntity<String>> result = new DeferredResult<>(userSetting.getPlayTimeout()); + DeferredResult<ResponseEntity<String>> result = new DeferredResult<>(userSetting.getPlayTimeout().longValue()); playResult.setResult(result); // 褰曞儚鏌ヨ浠hannelId浣滀负deviceId鏌ヨ resultHolder.put(key, uuid, result); @@ -237,30 +241,27 @@ } // 瓒呮椂澶勭悊 - Timer timer = new Timer(); + String timeOutTaskKey = UUID.randomUUID().toString(); SSRCInfo finalSsrcInfo = ssrcInfo; - timer.schedule(new TimerTask() { - @Override - public void run() { - logger.warn(String.format("璁惧鐐规挱瓒呮椂锛宒eviceId锛�%s 锛宑hannelId锛�%s", device.getDeviceId(), channelId)); + dynamicTask.startDelay( timeOutTaskKey,()->{ + logger.warn(String.format("璁惧鐐规挱瓒呮椂锛宒eviceId锛�%s 锛宑hannelId锛�%s", device.getDeviceId(), channelId)); - SIPDialog dialog = streamSession.getDialogByStream(device.getDeviceId(), channelId, finalSsrcInfo.getStream()); - if (dialog != null) { - timeoutCallback.run(1, "鏀舵祦瓒呮椂"); - // 鐐规挱瓒呮椂鍥炲BYE 鍚屾椂閲婃斁ssrc浠ュ強姝ゆ鐐规挱鐨勮祫婧� - cmder.streamByeCmd(device.getDeviceId(), channelId, finalSsrcInfo.getStream(), null); - }else { - timeoutCallback.run(0, "鐐规挱瓒呮椂"); - mediaServerService.releaseSsrc(mediaServerItem.getId(), finalSsrcInfo.getSsrc()); - mediaServerService.closeRTPServer(device.getDeviceId(), channelId, finalSsrcInfo.getStream()); - streamSession.remove(device.getDeviceId(), channelId, finalSsrcInfo.getStream()); - } + SIPDialog dialog = streamSession.getDialogByStream(device.getDeviceId(), channelId, finalSsrcInfo.getStream()); + if (dialog != null) { + timeoutCallback.run(1, "鏀舵祦瓒呮椂"); + // 鐐规挱瓒呮椂鍥炲BYE 鍚屾椂閲婃斁ssrc浠ュ強姝ゆ鐐规挱鐨勮祫婧� + cmder.streamByeCmd(device.getDeviceId(), channelId, finalSsrcInfo.getStream(), null); + }else { + timeoutCallback.run(0, "鐐规挱瓒呮椂"); + mediaServerService.releaseSsrc(mediaServerItem.getId(), finalSsrcInfo.getSsrc()); + mediaServerService.closeRTPServer(device.getDeviceId(), channelId, finalSsrcInfo.getStream()); + streamSession.remove(device.getDeviceId(), channelId, finalSsrcInfo.getStream()); } - }, userSetting.getPlayTimeout()); + }, userSetting.getPlayTimeout()*1000); final String ssrc = ssrcInfo.getSsrc(); cmder.playStreamCmd(mediaServerItem, ssrcInfo, device, channelId, (MediaServerItem mediaServerItemInuse, JSONObject response) -> { logger.info("鏀跺埌璁㈤槄娑堟伅锛� " + response.toJSONString()); - timer.cancel(); + dynamicTask.stop(timeOutTaskKey); // hook鍝嶅簲 onPublishHandlerForPlay(mediaServerItemInuse, response, device.getDeviceId(), channelId, uuid); hookEvent.response(mediaServerItemInuse, response); @@ -292,7 +293,7 @@ } } }, (event) -> { - timer.cancel(); + dynamicTask.stop(timeOutTaskKey); mediaServerService.closeRTPServer(device.getDeviceId(), channelId, finalSsrcInfo.getStream()); // 閲婃斁ssrc mediaServerService.releaseSsrc(mediaServerItem.getId(), finalSsrcInfo.getSsrc()); @@ -334,7 +335,9 @@ @Override public MediaServerItem getNewMediaServerItem(Device device) { - if (device == null) return null; + if (device == null) { + return null; + } String mediaServerId = device.getMediaServerId(); MediaServerItem mediaServerItem; if (mediaServerId == null) { @@ -353,7 +356,9 @@ String endTime,InviteStreamCallback inviteStreamCallback, PlayBackCallback callback) { Device device = storager.queryVideoDevice(deviceId); - if (device == null) return null; + if (device == null) { + return null; + } MediaServerItem newMediaServerItem = getNewMediaServerItem(device); SSRCInfo ssrcInfo = mediaServerService.openRTPServer(newMediaServerItem, null, true); @@ -365,7 +370,9 @@ String deviceId, String channelId, String startTime, String endTime, InviteStreamCallback infoCallBack, PlayBackCallback playBackCallback) { - if (mediaServerItem == null || ssrcInfo == null) return null; + if (mediaServerItem == null || ssrcInfo == null) { + return null; + } String uuid = UUID.randomUUID().toString(); String key = DeferredResultHolder.CALLBACK_CMD_PLAYBACK + deviceId + channelId; DeferredResult<ResponseEntity<String>> result = new DeferredResult<>(30000L); @@ -380,34 +387,31 @@ msg.setId(uuid); msg.setKey(key); PlayBackResult<RequestMessage> playBackResult = new PlayBackResult<>(); - - Timer timer = new Timer(); - timer.schedule(new TimerTask() { - @Override - public void run() { - logger.warn(String.format("璁惧鍥炴斁瓒呮椂锛宒eviceId锛�%s 锛宑hannelId锛�%s", deviceId, channelId)); - playBackResult.setCode(-1); - playBackResult.setData(msg); - playBackCallback.call(playBackResult); - SIPDialog dialog = streamSession.getDialogByStream(deviceId, channelId, ssrcInfo.getStream()); + String playBackTimeOutTaskKey = UUID.randomUUID().toString(); + dynamicTask.startDelay(playBackTimeOutTaskKey, ()->{ + logger.warn(String.format("璁惧鍥炴斁瓒呮椂锛宒eviceId锛�%s 锛宑hannelId锛�%s", deviceId, channelId)); + playBackResult.setCode(-1); + playBackResult.setData(msg); + playBackCallback.call(playBackResult); + SIPDialog dialog = streamSession.getDialogByStream(deviceId, channelId, ssrcInfo.getStream()); + // 鐐规挱瓒呮椂鍥炲BYE 鍚屾椂閲婃斁ssrc浠ュ強姝ゆ鐐规挱鐨勮祫婧� + if (dialog != null) { // 鐐规挱瓒呮椂鍥炲BYE 鍚屾椂閲婃斁ssrc浠ュ強姝ゆ鐐规挱鐨勮祫婧� - if (dialog != null) { - // 鐐规挱瓒呮椂鍥炲BYE 鍚屾椂閲婃斁ssrc浠ュ強姝ゆ鐐规挱鐨勮祫婧� - cmder.streamByeCmd(device.getDeviceId(), channelId, ssrcInfo.getStream(), null); - }else { - mediaServerService.releaseSsrc(mediaServerItem.getId(), ssrcInfo.getSsrc()); - mediaServerService.closeRTPServer(deviceId, channelId, ssrcInfo.getStream()); - streamSession.remove(deviceId, channelId, ssrcInfo.getStream()); - } cmder.streamByeCmd(device.getDeviceId(), channelId, ssrcInfo.getStream(), null); - // 鍥炲涔嬪墠鎵�鏈夌殑鐐规挱璇锋眰 - playBackCallback.call(playBackResult); + }else { + mediaServerService.releaseSsrc(mediaServerItem.getId(), ssrcInfo.getSsrc()); + mediaServerService.closeRTPServer(deviceId, channelId, ssrcInfo.getStream()); + streamSession.remove(deviceId, channelId, ssrcInfo.getStream()); } - }, userSetting.getPlayTimeout()); + cmder.streamByeCmd(device.getDeviceId(), channelId, ssrcInfo.getStream(), null); + // 鍥炲涔嬪墠鎵�鏈夌殑鐐规挱璇锋眰 + playBackCallback.call(playBackResult); + }, userSetting.getPlayTimeout()*1000); + cmder.playbackStreamCmd(mediaServerItem, ssrcInfo, device, channelId, startTime, endTime, infoCallBack, (InviteStreamInfo inviteStreamInfo) -> { logger.info("鏀跺埌璁㈤槄娑堟伅锛� " + inviteStreamInfo.getResponse().toJSONString()); - timer.cancel(); + dynamicTask.stop(playBackTimeOutTaskKey); StreamInfo streamInfo = onPublishHandler(inviteStreamInfo.getMediaServerItem(), inviteStreamInfo.getResponse(), deviceId, channelId); if (streamInfo == null) { logger.warn("璁惧鍥炴斁API璋冪敤澶辫触锛�"); @@ -425,7 +429,7 @@ playBackResult.setResponse(inviteStreamInfo.getResponse()); playBackCallback.call(playBackResult); }, event -> { - timer.cancel(); + dynamicTask.stop(playBackTimeOutTaskKey); msg.setData(String.format("鍥炴斁澶辫触锛� 閿欒鐮侊細 %s, %s", event.statusCode, event.msg)); playBackResult.setCode(-1); playBackResult.setData(msg); @@ -439,7 +443,9 @@ @Override public DeferredResult<ResponseEntity<String>> download(String deviceId, String channelId, String startTime, String endTime, int downloadSpeed, InviteStreamCallback infoCallBack, PlayBackCallback hookCallBack) { Device device = storager.queryVideoDevice(deviceId); - if (device == null) return null; + if (device == null) { + return null; + } MediaServerItem newMediaServerItem = getNewMediaServerItem(device); SSRCInfo ssrcInfo = mediaServerService.openRTPServer(newMediaServerItem, null, true); @@ -448,7 +454,9 @@ @Override public DeferredResult<ResponseEntity<String>> download(MediaServerItem mediaServerItem, SSRCInfo ssrcInfo, String deviceId, String channelId, String startTime, String endTime, int downloadSpeed, InviteStreamCallback infoCallBack, PlayBackCallback hookCallBack) { - if (mediaServerItem == null || ssrcInfo == null) return null; + if (mediaServerItem == null || ssrcInfo == null) { + return null; + } String uuid = UUID.randomUUID().toString(); String key = DeferredResultHolder.CALLBACK_CMD_DOWNLOAD + deviceId + channelId; DeferredResult<ResponseEntity<String>> result = new DeferredResult<>(30000L); @@ -467,34 +475,31 @@ PlayBackResult<RequestMessage> downloadResult = new PlayBackResult<>(); downloadResult.setData(msg); - Timer timer = new Timer(); - timer.schedule(new TimerTask() { - @Override - public void run() { - logger.warn(String.format("褰曞儚涓嬭浇璇锋眰瓒呮椂锛宒eviceId锛�%s 锛宑hannelId锛�%s", deviceId, channelId)); - wvpResult.setCode(-1); - wvpResult.setMsg("褰曞儚涓嬭浇璇锋眰瓒呮椂"); - downloadResult.setCode(-1); - hookCallBack.call(downloadResult); - SIPDialog dialog = streamSession.getDialogByStream(deviceId, channelId, ssrcInfo.getStream()); + String downLoadTimeOutTaskKey = UUID.randomUUID().toString(); + dynamicTask.startDelay(downLoadTimeOutTaskKey, ()->{ + logger.warn(String.format("褰曞儚涓嬭浇璇锋眰瓒呮椂锛宒eviceId锛�%s 锛宑hannelId锛�%s", deviceId, channelId)); + wvpResult.setCode(-1); + wvpResult.setMsg("褰曞儚涓嬭浇璇锋眰瓒呮椂"); + downloadResult.setCode(-1); + hookCallBack.call(downloadResult); + SIPDialog dialog = streamSession.getDialogByStream(deviceId, channelId, ssrcInfo.getStream()); + // 鐐规挱瓒呮椂鍥炲BYE 鍚屾椂閲婃斁ssrc浠ュ強姝ゆ鐐规挱鐨勮祫婧� + if (dialog != null) { // 鐐规挱瓒呮椂鍥炲BYE 鍚屾椂閲婃斁ssrc浠ュ強姝ゆ鐐规挱鐨勮祫婧� - if (dialog != null) { - // 鐐规挱瓒呮椂鍥炲BYE 鍚屾椂閲婃斁ssrc浠ュ強姝ゆ鐐规挱鐨勮祫婧� - cmder.streamByeCmd(device.getDeviceId(), channelId, ssrcInfo.getStream(), null); - }else { - mediaServerService.releaseSsrc(mediaServerItem.getId(), ssrcInfo.getSsrc()); - mediaServerService.closeRTPServer(deviceId, channelId, ssrcInfo.getStream()); - streamSession.remove(deviceId, channelId, ssrcInfo.getStream()); - } cmder.streamByeCmd(device.getDeviceId(), channelId, ssrcInfo.getStream(), null); - // 鍥炲涔嬪墠鎵�鏈夌殑鐐规挱璇锋眰 - hookCallBack.call(downloadResult); + }else { + mediaServerService.releaseSsrc(mediaServerItem.getId(), ssrcInfo.getSsrc()); + mediaServerService.closeRTPServer(deviceId, channelId, ssrcInfo.getStream()); + streamSession.remove(deviceId, channelId, ssrcInfo.getStream()); } - }, userSetting.getPlayTimeout()); + cmder.streamByeCmd(device.getDeviceId(), channelId, ssrcInfo.getStream(), null); + // 鍥炲涔嬪墠鎵�鏈夌殑鐐规挱璇锋眰 + hookCallBack.call(downloadResult); + }, userSetting.getPlayTimeout()*1000); cmder.downloadStreamCmd(mediaServerItem, ssrcInfo, device, channelId, startTime, endTime, downloadSpeed, infoCallBack, inviteStreamInfo -> { logger.info("鏀跺埌璁㈤槄娑堟伅锛� " + inviteStreamInfo.getResponse().toJSONString()); - timer.cancel(); + dynamicTask.stop(downLoadTimeOutTaskKey); StreamInfo streamInfo = onPublishHandler(inviteStreamInfo.getMediaServerItem(), inviteStreamInfo.getResponse(), deviceId, channelId); streamInfo.setStartTime(startTime); streamInfo.setEndTime(endTime); @@ -515,7 +520,7 @@ downloadResult.setResponse(inviteStreamInfo.getResponse()); hookCallBack.call(downloadResult); }, event -> { - timer.cancel(); + dynamicTask.stop(downLoadTimeOutTaskKey); downloadResult.setCode(-1); wvpResult.setCode(-1); wvpResult.setMsg(String.format("褰曞儚涓嬭浇澶辫触锛� 閿欒鐮侊細 %s, %s", event.statusCode, event.msg)); diff --git a/src/main/java/com/genersoft/iot/vmp/service/impl/StreamProxyServiceImpl.java b/src/main/java/com/genersoft/iot/vmp/service/impl/StreamProxyServiceImpl.java index b30a5b2..2fa043a 100644 --- a/src/main/java/com/genersoft/iot/vmp/service/impl/StreamProxyServiceImpl.java +++ b/src/main/java/com/genersoft/iot/vmp/service/impl/StreamProxyServiceImpl.java @@ -194,7 +194,9 @@ @Override public JSONObject removeStreamProxyFromZlm(StreamProxyItem param) { - if (param ==null) return null; + if (param ==null) { + return null; + } MediaServerItem mediaServerItem = mediaServerService.getOne(param.getMediaServerId()); JSONObject result = zlmresTfulUtils.closeStreams(mediaServerItem, param.getApp(), param.getStream()); return result; @@ -230,7 +232,9 @@ StreamProxyItem streamProxy = videoManagerStorager.queryStreamProxy(app, stream); if (!streamProxy.isEnable() && streamProxy != null) { JSONObject jsonObject = addStreamProxyToZlm(streamProxy); - if (jsonObject == null) return false; + if (jsonObject == null) { + return false; + } if (jsonObject.getInteger("code") == 0) { result = true; streamProxy.setEnable(true); diff --git a/src/main/java/com/genersoft/iot/vmp/service/impl/StreamPushServiceImpl.java b/src/main/java/com/genersoft/iot/vmp/service/impl/StreamPushServiceImpl.java index 79b9b29..d710dad 100644 --- a/src/main/java/com/genersoft/iot/vmp/service/impl/StreamPushServiceImpl.java +++ b/src/main/java/com/genersoft/iot/vmp/service/impl/StreamPushServiceImpl.java @@ -66,7 +66,9 @@ @Override public List<StreamPushItem> handleJSON(String jsonData, MediaServerItem mediaServerItem) { - if (jsonData == null) return null; + if (jsonData == null) { + return null; + } Map<String, StreamPushItem> result = new HashMap<>(); @@ -219,7 +221,9 @@ } } zlmresTfulUtils.getMediaList(mediaServerItem, (mediaList ->{ - if (mediaList == null) return; + if (mediaList == null) { + return; + } String dataStr = mediaList.getString("data"); Integer code = mediaList.getInteger("code"); diff --git a/src/main/java/com/genersoft/iot/vmp/service/impl/UserServiceImpl.java b/src/main/java/com/genersoft/iot/vmp/service/impl/UserServiceImpl.java index 32b6ad6..9f156d2 100644 --- a/src/main/java/com/genersoft/iot/vmp/service/impl/UserServiceImpl.java +++ b/src/main/java/com/genersoft/iot/vmp/service/impl/UserServiceImpl.java @@ -34,7 +34,9 @@ @Override public int addUser(User user) { User userByUsername = userMapper.getUserByUsername(user.getUsername()); - if (userByUsername != null) return 0; + if (userByUsername != null) { + return 0; + } return userMapper.add(user); } @Override diff --git a/src/main/java/com/genersoft/iot/vmp/storager/IRedisCatchStorage.java b/src/main/java/com/genersoft/iot/vmp/storager/IRedisCatchStorage.java index 8d18f52..67697c8 100644 --- a/src/main/java/com/genersoft/iot/vmp/storager/IRedisCatchStorage.java +++ b/src/main/java/com/genersoft/iot/vmp/storager/IRedisCatchStorage.java @@ -223,4 +223,11 @@ void sendStreamPushRequestedMsg(MessageForPushChannel messageForPushChannel); + /** + * 鍒ゆ柇璁惧鐘舵�� + * @param deviceId 璁惧ID + * @return + */ + public boolean deviceIsOnline(String deviceId); + } diff --git a/src/main/java/com/genersoft/iot/vmp/storager/impl/RedisCatchStorageImpl.java b/src/main/java/com/genersoft/iot/vmp/storager/impl/RedisCatchStorageImpl.java index e541c31..ae7647f 100644 --- a/src/main/java/com/genersoft/iot/vmp/storager/impl/RedisCatchStorageImpl.java +++ b/src/main/java/com/genersoft/iot/vmp/storager/impl/RedisCatchStorageImpl.java @@ -103,7 +103,9 @@ */ @Override public boolean stopPlay(StreamInfo streamInfo) { - if (streamInfo == null) return false; + if (streamInfo == null) { + return false; + } return redis.del(String.format("%S_%s_%s_%s_%s", VideoManagerConstants.PLAYER_PREFIX, userSetting.getServerId(), streamInfo.getStream(), @@ -127,7 +129,9 @@ @Override public StreamInfo queryPlayByStreamId(String streamId) { List<Object> playLeys = redis.scan(String.format("%S_%s_%s_*", VideoManagerConstants.PLAYER_PREFIX, userSetting.getServerId(), streamId)); - if (playLeys == null || playLeys.size() == 0) return null; + if (playLeys == null || playLeys.size() == 0) { + return null; + } return (StreamInfo)redis.get(playLeys.get(0).toString()); } @@ -137,7 +141,9 @@ userSetting.getServerId(), deviceId, channelId)); - if (playLeys == null || playLeys.size() == 0) return null; + if (playLeys == null || playLeys.size() == 0) { + return null; + } return (StreamInfo)redis.get(playLeys.get(0).toString()); } @@ -146,7 +152,9 @@ Map<String, StreamInfo> streamInfos = new HashMap<>(); // List<Object> playLeys = redis.keys(String.format("%S_*_%S_*", VideoManagerConstants.PLAYER_PREFIX, deviceId)); List<Object> players = redis.scan(String.format("%S_%s_*_%S_*", VideoManagerConstants.PLAYER_PREFIX, userSetting.getServerId(),deviceId)); - if (players.size() == 0) return streamInfos; + if (players.size() == 0) { + return streamInfos; + } for (Object player : players) { String key = (String) player; StreamInfo streamInfo = (StreamInfo) redis.get(key); @@ -182,10 +190,18 @@ deviceChannel.setDeviceId(deviceId); deviceChannelMapper.update(deviceChannel); } - if (deviceId == null) deviceId = "*"; - if (channelId == null) channelId = "*"; - if (stream == null) stream = "*"; - if (callId == null) callId = "*"; + if (deviceId == null) { + deviceId = "*"; + } + if (channelId == null) { + channelId = "*"; + } + if (stream == null) { + stream = "*"; + } + if (callId == null) { + callId = "*"; + } String key = String.format("%S_%s_%s_%s_%s_%s", VideoManagerConstants.DOWNLOAD_PREFIX, userSetting.getServerId(), deviceId, @@ -210,10 +226,18 @@ deviceChannel.setDeviceId(deviceId); deviceChannelMapper.update(deviceChannel); } - if (deviceId == null) deviceId = "*"; - if (channelId == null) channelId = "*"; - if (stream == null) stream = "*"; - if (callId == null) callId = "*"; + if (deviceId == null) { + deviceId = "*"; + } + if (channelId == null) { + channelId = "*"; + } + if (stream == null) { + stream = "*"; + } + if (callId == null) { + callId = "*"; + } String key = String.format("%S_%s_%s_%s_%s_%s", VideoManagerConstants.PLAY_BLACK_PREFIX, userSetting.getServerId(), deviceId, @@ -235,10 +259,18 @@ if (stream == null && callId == null) { return null; } - if (deviceId == null) deviceId = "*"; - if (channelId == null) channelId = "*"; - if (stream == null) stream = "*"; - if (callId == null) callId = "*"; + if (deviceId == null) { + deviceId = "*"; + } + if (channelId == null) { + channelId = "*"; + } + if (stream == null) { + stream = "*"; + } + if (callId == null) { + callId = "*"; + } String key = String.format("%S_%s_%s_%s_%s_%s", VideoManagerConstants.PLAY_BLACK_PREFIX, userSetting.getServerId(), deviceId, @@ -328,10 +360,18 @@ @Override public SendRtpItem querySendRTPServer(String platformGbId, String channelId, String streamId, String callId) { - if (platformGbId == null) platformGbId = "*"; - if (channelId == null) channelId = "*"; - if (streamId == null) streamId = "*"; - if (callId == null) callId = "*"; + if (platformGbId == null) { + platformGbId = "*"; + } + if (channelId == null) { + channelId = "*"; + } + if (streamId == null) { + streamId = "*"; + } + if (callId == null) { + callId = "*"; + } String key = VideoManagerConstants.PLATFORM_SEND_RTP_INFO_PREFIX + userSetting.getServerId() + "_" + platformGbId + "_" + channelId + "_" + streamId + "_" + callId; List<Object> scan = redis.scan(key); @@ -344,7 +384,9 @@ @Override public List<SendRtpItem> querySendRTPServer(String platformGbId) { - if (platformGbId == null) platformGbId = "*"; + if (platformGbId == null) { + platformGbId = "*"; + } String key = VideoManagerConstants.PLATFORM_SEND_RTP_INFO_PREFIX + userSetting.getServerId() + "_" + platformGbId + "_*" + "_*" + "_*"; List<Object> queryResult = redis.scan(key); List<SendRtpItem> result= new ArrayList<>(); @@ -364,8 +406,12 @@ */ @Override public void deleteSendRTPServer(String platformGbId, String channelId, String callId, String streamId) { - if (streamId == null) streamId = "*"; - if (callId == null) callId = "*"; + if (streamId == null) { + streamId = "*"; + } + if (callId == null) { + callId = "*"; + } String key = VideoManagerConstants.PLATFORM_SEND_RTP_INFO_PREFIX + userSetting.getServerId() + "_" + platformGbId + "_" + channelId + "_" + streamId + "_" + callId; List<Object> scan = redis.scan(key); @@ -473,10 +519,18 @@ if (stream == null && callId == null) { return null; } - if (deviceId == null) deviceId = "*"; - if (channelId == null) channelId = "*"; - if (stream == null) stream = "*"; - if (callId == null) callId = "*"; + if (deviceId == null) { + deviceId = "*"; + } + if (channelId == null) { + channelId = "*"; + } + if (stream == null) { + stream = "*"; + } + if (callId == null) { + callId = "*"; + } String key = String.format("%S_%s_%s_%s_%s_%s", VideoManagerConstants.DOWNLOAD_PREFIX, userSetting.getServerId(), deviceId, @@ -645,4 +699,10 @@ logger.info("[redis 鎶ヨ閫氱煡] {}: {}", key, JSON.toJSON(msg)); redis.convertAndSend(key, (JSONObject)JSON.toJSON(msg)); } + + @Override + public boolean deviceIsOnline(String deviceId) { + String key = VideoManagerConstants.KEEPLIVEKEY_PREFIX + userSetting.getServerId() + "_" + deviceId; + return redis.hasKey(key); + } } diff --git a/src/main/java/com/genersoft/iot/vmp/storager/impl/VideoManagerStorageImpl.java b/src/main/java/com/genersoft/iot/vmp/storager/impl/VideoManagerStorageImpl.java index 070e312..2dc88f8 100644 --- a/src/main/java/com/genersoft/iot/vmp/storager/impl/VideoManagerStorageImpl.java +++ b/src/main/java/com/genersoft/iot/vmp/storager/impl/VideoManagerStorageImpl.java @@ -460,7 +460,9 @@ public synchronized boolean outline(String deviceId) { logger.info("鏇存柊璁惧绂荤嚎: " + deviceId); Device device = deviceMapper.getDeviceByDeviceId(deviceId); - if (device == null) return false; + if (device == null) { + return false; + } device.setOnline(0); redisCatchStorage.updateDevice(device); return deviceMapper.update(device) > 0; @@ -714,6 +716,7 @@ * 鍒犻櫎鎸囧畾璁惧鐨勬墍鏈夌Щ鍔ㄤ綅缃� * @param deviceId */ + @Override public int clearMobilePositionsByDeviceId(String deviceId) { return deviceMobilePositionMapper.clearMobilePositionsByDeviceId(deviceId); } @@ -859,7 +862,9 @@ @Override public void updateMediaList(List<StreamPushItem> streamPushItems) { - if (streamPushItems == null || streamPushItems.size() == 0) return; + if (streamPushItems == null || streamPushItems.size() == 0) { + return; + } logger.info("updateMediaList: " + streamPushItems.size()); streamPushMapper.addAll(streamPushItems); // TODO 寰呬紭鍖� diff --git a/src/main/java/com/genersoft/iot/vmp/utils/SpringBeanFactory.java b/src/main/java/com/genersoft/iot/vmp/utils/SpringBeanFactory.java index 3d2b2ba..b155bcd 100644 --- a/src/main/java/com/genersoft/iot/vmp/utils/SpringBeanFactory.java +++ b/src/main/java/com/genersoft/iot/vmp/utils/SpringBeanFactory.java @@ -34,7 +34,9 @@ * 鑾峰彇瀵硅薄 杩欓噷閲嶅啓浜哹ean鏂规硶锛岃捣涓昏浣滅敤 */ public static Object getBean(String beanId) throws BeansException { - if (applicationContext == null) return null; + if (applicationContext == null) { + return null; + } return applicationContext.getBean(beanId); } diff --git a/src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/alarm/AlarmController.java b/src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/alarm/AlarmController.java index e785856..addc431 100644 --- a/src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/alarm/AlarmController.java +++ b/src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/alarm/AlarmController.java @@ -85,16 +85,30 @@ @RequestParam(required = false) String startTime, @RequestParam(required = false) String endTime ) { - if (StringUtils.isEmpty(alarmPriority)) alarmPriority = null; - if (StringUtils.isEmpty(alarmMethod)) alarmMethod = null; - if (StringUtils.isEmpty(alarmType)) alarmType = null; - if (StringUtils.isEmpty(startTime)) startTime = null; - if (StringUtils.isEmpty(endTime)) endTime = null; + if (StringUtils.isEmpty(alarmPriority)) { + alarmPriority = null; + } + if (StringUtils.isEmpty(alarmMethod)) { + alarmMethod = null; + } + if (StringUtils.isEmpty(alarmType)) { + alarmType = null; + } + if (StringUtils.isEmpty(startTime)) { + startTime = null; + } + if (StringUtils.isEmpty(endTime)) { + endTime = null; + } try { - if (startTime != null) format.parse(startTime); - if (endTime != null) format.parse(endTime); + if (startTime != null) { + format.parse(startTime); + } + if (endTime != null) { + format.parse(endTime); + } } catch (ParseException e) { return new ResponseEntity<>(null, HttpStatus.BAD_REQUEST); } @@ -125,9 +139,15 @@ @RequestParam(required = false) String deviceIds, @RequestParam(required = false) String time ) { - if (StringUtils.isEmpty(id)) id = null; - if (StringUtils.isEmpty(deviceIds)) deviceIds = null; - if (StringUtils.isEmpty(time)) time = null; + if (StringUtils.isEmpty(id)) { + id = null; + } + if (StringUtils.isEmpty(deviceIds)) { + deviceIds = null; + } + if (StringUtils.isEmpty(time)) { + time = null; + } try { if (time != null) { format.parse(time); 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 708008e..d6e614d 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 @@ -6,7 +6,6 @@ import com.genersoft.iot.vmp.gb28181.bean.DeviceChannel; import com.genersoft.iot.vmp.gb28181.bean.SubscribeHolder; import com.genersoft.iot.vmp.gb28181.bean.SyncStatus; -import com.genersoft.iot.vmp.gb28181.event.DeviceOffLineDetector; import com.genersoft.iot.vmp.gb28181.task.ISubscribeTask; import com.genersoft.iot.vmp.gb28181.task.impl.CatalogSubscribeTask; import com.genersoft.iot.vmp.gb28181.task.impl.MobilePositionSubscribeTask; @@ -54,9 +53,6 @@ @Autowired private DeferredResultHolder resultHolder; - - @Autowired - private DeviceOffLineDetector offLineDetector; @Autowired private IDeviceService deviceService; @@ -310,9 +306,15 @@ if (device != null && device.getDeviceId() != null) { Device deviceInStore = storager.queryVideoDevice(device.getDeviceId()); - if (!StringUtils.isEmpty(device.getName())) deviceInStore.setName(device.getName()); - if (!StringUtils.isEmpty(device.getCharset())) deviceInStore.setCharset(device.getCharset()); - if (!StringUtils.isEmpty(device.getMediaServerId())) deviceInStore.setMediaServerId(device.getMediaServerId()); + if (!StringUtils.isEmpty(device.getName())) { + deviceInStore.setName(device.getName()); + } + if (!StringUtils.isEmpty(device.getCharset())) { + deviceInStore.setCharset(device.getCharset()); + } + if (!StringUtils.isEmpty(device.getMediaServerId())) { + deviceInStore.setMediaServerId(device.getMediaServerId()); + } // 鐩綍璁㈤槄鐩稿叧鐨勪俊鎭� if (device.getSubscribeCycleForCatalog() > 0) { diff --git a/src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/platform/PlatformController.java b/src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/platform/PlatformController.java index ff424a0..a3f1d6a 100644 --- a/src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/platform/PlatformController.java +++ b/src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/platform/PlatformController.java @@ -286,7 +286,9 @@ return new ResponseEntity<>("missing parameters", HttpStatus.BAD_REQUEST); } ParentPlatform parentPlatform = storager.queryParentPlatByServerGBId(serverGBId); - if (parentPlatform == null) return new ResponseEntity<>("fail", HttpStatus.OK); + if (parentPlatform == null) { + return new ResponseEntity<>("fail", HttpStatus.OK); + } // 鍙戦�佺绾挎秷鎭�,鏃犺鏄惁鎴愬姛閮藉垹闄ょ紦瀛� commanderForPlatform.unregister(parentPlatform, (event -> { // 娓呯┖redis缂撳瓨 diff --git a/src/main/java/com/genersoft/iot/vmp/vmanager/log/LogController.java b/src/main/java/com/genersoft/iot/vmp/vmanager/log/LogController.java index c147a9d..44b1688 100644 --- a/src/main/java/com/genersoft/iot/vmp/vmanager/log/LogController.java +++ b/src/main/java/com/genersoft/iot/vmp/vmanager/log/LogController.java @@ -65,16 +65,26 @@ @RequestParam(required = false) String startTime, @RequestParam(required = false) String endTime ) { - if (StringUtils.isEmpty(query)) query = null; - if (StringUtils.isEmpty(startTime)) startTime = null; - if (StringUtils.isEmpty(endTime)) endTime = null; + if (StringUtils.isEmpty(query)) { + query = null; + } + if (StringUtils.isEmpty(startTime)) { + startTime = null; + } + if (StringUtils.isEmpty(endTime)) { + endTime = null; + } if (!userSetting.getLogInDatebase()) { logger.warn("鑷姩璁板綍鏃ュ織鍔熻兘宸插叧闂紝鏌ヨ缁撴灉鍙兘涓嶅畬鏁淬��"); } try { - if (startTime != null) format.parse(startTime); - if (endTime != null) format.parse(endTime); + if (startTime != null) { + format.parse(startTime); + } + if (endTime != null) { + format.parse(endTime); + } } catch (ParseException e) { return new ResponseEntity<>(null, HttpStatus.BAD_REQUEST); } diff --git a/src/main/java/com/genersoft/iot/vmp/vmanager/streamProxy/StreamProxyController.java b/src/main/java/com/genersoft/iot/vmp/vmanager/streamProxy/StreamProxyController.java index 1226eb7..f2e48d8 100644 --- a/src/main/java/com/genersoft/iot/vmp/vmanager/streamProxy/StreamProxyController.java +++ b/src/main/java/com/genersoft/iot/vmp/vmanager/streamProxy/StreamProxyController.java @@ -69,9 +69,15 @@ @ResponseBody public WVPResult save(@RequestBody StreamProxyItem param){ logger.info("娣诲姞浠g悊锛� " + JSONObject.toJSONString(param)); - if (StringUtils.isEmpty(param.getMediaServerId())) param.setMediaServerId("auto"); - if (StringUtils.isEmpty(param.getType())) param.setType("default"); - if (StringUtils.isEmpty(param.getGbId())) param.setGbId(null); + if (StringUtils.isEmpty(param.getMediaServerId())) { + param.setMediaServerId("auto"); + } + if (StringUtils.isEmpty(param.getType())) { + param.setType("default"); + } + if (StringUtils.isEmpty(param.getGbId())) { + param.setGbId(null); + } WVPResult<StreamInfo> result = streamProxyService.save(param); return result; } diff --git a/src/main/java/com/genersoft/iot/vmp/web/gb28181/ApiStreamController.java b/src/main/java/com/genersoft/iot/vmp/web/gb28181/ApiStreamController.java index 9362db1..ddbf20b 100644 --- a/src/main/java/com/genersoft/iot/vmp/web/gb28181/ApiStreamController.java +++ b/src/main/java/com/genersoft/iot/vmp/web/gb28181/ApiStreamController.java @@ -68,7 +68,7 @@ @RequestParam(required = false)String timeout ){ - DeferredResult<JSONObject> resultDeferredResult = new DeferredResult<>(userSetting.getPlayTimeout() + 10); + DeferredResult<JSONObject> resultDeferredResult = new DeferredResult<>(userSetting.getPlayTimeout().longValue() + 10); Device device = storager.queryVideoDevice(serial); if (device == null ) { JSONObject result = new JSONObject(); diff --git a/web_src/index.html b/web_src/index.html index f69f16b..21ad271 100644 --- a/web_src/index.html +++ b/web_src/index.html @@ -12,26 +12,7 @@ <script type="text/javascript" src="./static/js/jessibuca/jessibuca.js"></script> <script type="text/javascript" src="./static/js/EasyWasmPlayer.js"></script> <script type="text/javascript" src="./static/js/ZLMRTCClient.js"></script> + <script type="text/javascript" src="./static/js/mapConfig.js"></script> <div id="app"></div> - <!-- built files will be auto injected --> - <script> - // map缁勪欢鍏ㄥ眬鍙傛暟, 娉ㄩ噴姝ゅ唴瀹瑰彲浠ュ叧闂湴鍥惧姛鑳� - window.mapParam = { - // 鍧愭爣绯� GCJ-02 WGS-84, - coordinateSystem: "GCJ-02", - // 鍦板浘鐡︾墖鍦板潃 - tilesUrl: "http://webrd0{1-4}.is.autonavi.com/appmaptile?x={x}&y={y}&z={z}&lang=zh_cn&size=1&scale=1&style=8", - // 鐡︾墖澶у皬 - tileSize: 256, - // 榛樿灞傜骇 - zoom:10, - // 榛樿鍦板浘涓績鐐� - center:[116.41020, 39.915119], - // 鍦板浘鏈�澶у眰绾� - maxZoom:18, - // 鍦板浘鏈�灏忓眰绾� - minZoom: 3 - } - </script> </body> </html> diff --git a/web_src/src/components/common/jessibuca.vue b/web_src/src/components/common/jessibuca.vue index ebf5bef..2eda2dc 100644 --- a/web_src/src/components/common/jessibuca.vue +++ b/web_src/src/components/common/jessibuca.vue @@ -1,5 +1,5 @@ <template> - <div ref="container" @dblclick="fullscreenSwich" style="width:100%;height:100%;background-color: #eee;margin:0 auto;"> + <div ref="container" @dblclick="fullscreenSwich" style="width:100%;height:100%;background-color: #000000;margin:0 auto;"> <div class="buttons-box" id="buttonsBox"> <div class="buttons-box-left"> <i v-if="!playing" class="iconfont icon-play jessibuca-btn" @click="playBtnClick"></i> diff --git a/web_src/src/components/devicePosition.vue b/web_src/src/components/devicePosition.vue index 16675c9..db19677 100644 --- a/web_src/src/components/devicePosition.vue +++ b/web_src/src/components/devicePosition.vue @@ -59,7 +59,7 @@ }, data() { return { - onOff: typeof window.mapParam !== "undefined", + onOff: typeof window.mapParam !== "undefined" && window.mapParam.enable, deviceService: new DeviceService(), layer: null, lineLayer: null, diff --git a/web_src/static/js/mapConfig.js b/web_src/static/js/mapConfig.js new file mode 100644 index 0000000..60427e8 --- /dev/null +++ b/web_src/static/js/mapConfig.js @@ -0,0 +1,19 @@ +// map缁勪欢鍏ㄥ眬鍙傛暟, 娉ㄩ噴姝ゅ唴瀹瑰彲浠ュ叧闂湴鍥惧姛鑳� +window.mapParam = { + // 寮�鍚�/鍏抽棴鍦板浘鍔熻兘 + enable: true, + // 鍧愭爣绯� GCJ-02 WGS-84, + coordinateSystem: "GCJ-02", + // 鍦板浘鐡︾墖鍦板潃 + tilesUrl: "http://webrd0{1-4}.is.autonavi.com/appmaptile?x={x}&y={y}&z={z}&lang=zh_cn&size=1&scale=1&style=8", + // 鐡︾墖澶у皬 + tileSize: 256, + // 榛樿灞傜骇 + zoom:10, + // 榛樿鍦板浘涓績鐐� + center:[116.41020, 39.915119], + // 鍦板浘鏈�澶у眰绾� + maxZoom:18, + // 鍦板浘鏈�灏忓眰绾� + minZoom: 3 +} -- Gitblit v1.8.0