From 2de4c322f6dc79ecfb120106af07e3335994657a Mon Sep 17 00:00:00 2001 From: 648540858 <648540858@qq.com> Date: 星期三, 31 八月 2022 11:29:13 +0800 Subject: [PATCH] 去除对redis key过期事件的使用;重构国标级联的注册保活 --- src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/impl/SIPCommander.java | 18 src/main/java/com/genersoft/iot/vmp/gb28181/utils/HeaderUtils.java | 22 + src/main/java/com/genersoft/iot/vmp/gb28181/bean/SubscribeHolder.java | 3 web_src/src/components/dialog/pushStreamEdit.vue | 2 src/main/java/com/genersoft/iot/vmp/conf/SipPlatformRunner.java | 35 +- src/main/java/com/genersoft/iot/vmp/media/zlm/AssistRESTfulUtils.java | 2 src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/SIPRequestHeaderPlarformProvider.java | 11 web_src/src/components/dialog/MediaServerEdit.vue | 2 src/main/java/com/genersoft/iot/vmp/gb28181/event/EventPublisher.java | 33 -- src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/response/impl/InviteResponseProcessor.java | 11 src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/SIPRequestProcessorParent.java | 9 src/main/java/com/genersoft/iot/vmp/storager/impl/VideoManagerStorageImpl.java | 7 src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/SIPRequestHeaderProvider.java | 11 src/main/java/com/genersoft/iot/vmp/service/IPlatformService.java | 45 +++ src/main/java/com/genersoft/iot/vmp/storager/impl/RedisCatchStorageImpl.java | 21 - src/main/java/com/genersoft/iot/vmp/storager/IRedisCatchStorage.java | 9 src/main/java/com/genersoft/iot/vmp/conf/UserSetting.java | 10 src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/response/impl/RegisterResponseProcessor.java | 54 +- src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/ISIPCommanderForPlatform.java | 4 src/main/java/com/genersoft/iot/vmp/gb28181/task/impl/MobilePositionSubscribeHandlerTask.java | 1 src/main/java/com/genersoft/iot/vmp/service/impl/MediaServerServiceImpl.java | 13 web_src/src/components/dialog/StreamProxyEdit.vue | 2 src/main/java/com/genersoft/iot/vmp/gb28181/event/subscribe/catalog/CatalogEventLister.java | 13 web_src/src/components/dialog/platformEdit.vue | 2 src/main/java/com/genersoft/iot/vmp/service/impl/PlatformServiceImpl.java | 232 +++++++++++++++ src/main/java/com/genersoft/iot/vmp/gb28181/bean/ParentPlatform.java | 6 src/main/java/com/genersoft/iot/vmp/gb28181/event/SipSubscribe.java | 28 + src/main/java/com/genersoft/iot/vmp/service/impl/PlayServiceImpl.java | 4 src/main/java/com/genersoft/iot/vmp/gb28181/bean/ParentPlatformCatch.java | 4 src/main/resources/all-application.yml | 2 src/main/java/com/genersoft/iot/vmp/utils/redis/RedisUtil.java | 1 /dev/null | 90 ------ src/main/java/com/genersoft/iot/vmp/gb28181/SipLayer.java | 15 src/main/java/com/genersoft/iot/vmp/storager/IVideoManagerStorage.java | 9 src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/platform/PlatformController.java | 39 - src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMHttpHookListener.java | 39 + src/main/java/com/genersoft/iot/vmp/storager/dao/dto/PlatformRegisterInfo.java | 41 ++ src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/impl/SIPCommanderFroPlatform.java | 24 - 38 files changed, 513 insertions(+), 361 deletions(-) diff --git a/src/main/java/com/genersoft/iot/vmp/conf/SipPlatformRunner.java b/src/main/java/com/genersoft/iot/vmp/conf/SipPlatformRunner.java index cf16f86..93674f6 100644 --- a/src/main/java/com/genersoft/iot/vmp/conf/SipPlatformRunner.java +++ b/src/main/java/com/genersoft/iot/vmp/conf/SipPlatformRunner.java @@ -4,6 +4,7 @@ import com.genersoft.iot.vmp.gb28181.bean.ParentPlatformCatch; import com.genersoft.iot.vmp.gb28181.event.EventPublisher; import com.genersoft.iot.vmp.gb28181.transmit.cmd.ISIPCommanderForPlatform; +import com.genersoft.iot.vmp.service.IPlatformService; import com.genersoft.iot.vmp.storager.IRedisCatchStorage; import com.genersoft.iot.vmp.storager.IVideoManagerStorage; import org.springframework.beans.factory.annotation.Autowired; @@ -15,6 +16,7 @@ /** * 绯荤粺鍚姩鏃舵帶鍒朵笂绾у钩鍙伴噸鏂版敞鍐� + * @author lin */ @Component @Order(value=3) @@ -27,7 +29,7 @@ private IRedisCatchStorage redisCatchStorage; @Autowired - private EventPublisher publisher; + private IPlatformService platformService; @Autowired private ISIPCommanderForPlatform sipCommanderForPlatform; @@ -35,33 +37,26 @@ @Override public void run(String... args) throws Exception { - // 璁剧疆鎵�鏈夊钩鍙扮绾� - storager.outlineForAllParentPlatform(); - - // 娓呯悊鎵�鏈夊钩鍙版敞鍐岀紦瀛� - redisCatchStorage.cleanPlatformRegisterInfos(); - - // 鍋滄鎵�鏈夋帹娴� -// zlmrtpServerFactory.closeAllSendRtpStream(); - + // 鑾峰彇鎵�鏈夊惎鐢ㄧ殑骞冲彴 List<ParentPlatform> parentPlatforms = storager.queryEnableParentPlatformList(true); for (ParentPlatform parentPlatform : parentPlatforms) { - redisCatchStorage.updatePlatformRegister(parentPlatform); - - redisCatchStorage.updatePlatformKeepalive(parentPlatform); - + // 鏇存柊缂撳瓨 ParentPlatformCatch parentPlatformCatch = new ParentPlatformCatch(); - parentPlatformCatch.setParentPlatform(parentPlatform); parentPlatformCatch.setId(parentPlatform.getServerGBId()); redisCatchStorage.updatePlatformCatchInfo(parentPlatformCatch); + if (parentPlatform.isStatus()) { + // 璁剧疆鎵�鏈夊钩鍙扮绾� + platformService.offline(parentPlatform); + // 鍙栨秷璁㈤槄 + sipCommanderForPlatform.unregister(parentPlatform, null, (eventResult)->{ + platformService.login(parentPlatform); + }); + }else { + platformService.login(parentPlatform); + } - // 鍙栨秷璁㈤槄 - sipCommanderForPlatform.unregister(parentPlatform, null, (eventResult)->{ - // 鍙戦�佸钩鍙版湭娉ㄥ唽娑堟伅 - publisher.platformNotRegisterEventPublish(parentPlatform.getServerGBId()); - }); } } } 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 d28ddeb..017b39d 100644 --- a/src/main/java/com/genersoft/iot/vmp/conf/UserSetting.java +++ b/src/main/java/com/genersoft/iot/vmp/conf/UserSetting.java @@ -31,8 +31,6 @@ private Boolean logInDatebase = Boolean.TRUE; - private Boolean redisConfig = Boolean.TRUE; - private String serverId = "000000"; private String thirdPartyGBIdReg = "[\\s\\S]*"; @@ -121,14 +119,6 @@ public void setThirdPartyGBIdReg(String thirdPartyGBIdReg) { this.thirdPartyGBIdReg = thirdPartyGBIdReg; - } - - public Boolean getRedisConfig() { - return redisConfig; - } - - public void setRedisConfig(Boolean redisConfig) { - this.redisConfig = redisConfig; } public Boolean getRecordSip() { diff --git a/src/main/java/com/genersoft/iot/vmp/conf/redis/RedisKeyExpirationEventMessageListener.java b/src/main/java/com/genersoft/iot/vmp/conf/redis/RedisKeyExpirationEventMessageListener.java deleted file mode 100644 index b3adab5..0000000 --- a/src/main/java/com/genersoft/iot/vmp/conf/redis/RedisKeyExpirationEventMessageListener.java +++ /dev/null @@ -1,41 +0,0 @@ -package com.genersoft.iot.vmp.conf.redis; - -import com.genersoft.iot.vmp.conf.UserSetting; -import org.springframework.data.redis.connection.RedisConnection; -import org.springframework.data.redis.listener.KeyExpirationEventMessageListener; -import org.springframework.data.redis.listener.RedisMessageListenerContainer; - -import java.util.Properties; - -public class RedisKeyExpirationEventMessageListener extends KeyExpirationEventMessageListener { - - private UserSetting userSetting; - private RedisMessageListenerContainer listenerContainer; - private String keyspaceNotificationsConfigParameter = "EA"; - - public RedisKeyExpirationEventMessageListener(RedisMessageListenerContainer listenerContainer, UserSetting userSetting) { - super(listenerContainer); - this.listenerContainer = listenerContainer; - this.userSetting = userSetting; - } - - @Override - public void init() { - if (!userSetting.getRedisConfig()) { - // 閰嶇疆springboot榛樿Config涓虹┖锛屽嵆涓嶈搴旂敤鍘讳慨鏀箁edis鐨勯粯璁ら厤缃紝鍥犱负Redis鏈嶅姟鍑轰簬瀹夊叏浼氱鐢–ONFIG鍛戒护缁欒繙绋嬬敤鎴蜂娇鐢� - setKeyspaceNotificationsConfigParameter(""); - }else { - - RedisConnection connection = this.listenerContainer.getConnectionFactory().getConnection(); - Properties config = connection.getConfig("notify-keyspace-events"); - try { - if (!keyspaceNotificationsConfigParameter.equals(config.getProperty("notify-keyspace-events"))) { - connection.setConfig("notify-keyspace-events", keyspaceNotificationsConfigParameter); - } - } finally { - connection.close(); - } - } - super.init(); - } -} 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 29253e7..afc5671 100644 --- a/src/main/java/com/genersoft/iot/vmp/gb28181/SipLayer.java +++ b/src/main/java/com/genersoft/iot/vmp/gb28181/SipLayer.java @@ -56,7 +56,7 @@ * gov/nist/javax/sip/SipStackImpl.class */ if (logger.isDebugEnabled()) { - properties.setProperty("gov.nist.javax.sip.LOG_MESSAGE_CONTENT", "true"); + properties.setProperty("gov.nist.javax.sip.LOG_MESSAGE_CONTENT", "false"); } // 鎺ユ敹鎵�鏈塶otify璇锋眰锛屽嵆浣挎病鏈夎闃� properties.setProperty("gov.nist.javax.sip.DELIVER_UNSOLICITED_NOTIFY", "true"); @@ -68,14 +68,13 @@ properties.setProperty("gov.nist.javax.sip.RELIABLE_CONNECTION_KEEP_ALIVE_TIMEOUT", "60"); /** - * sip_server_log.log 鍜� sip_debug_log.log public static final int TRACE_NONE = - * 0; public static final int TRACE_MESSAGES = 16; public static final int - * TRACE_EXCEPTION = 17; public static final int TRACE_DEBUG = 32; + * sip_server_log.log 鍜� sip_debug_log.log ERROR, INFO, WARNING, OFF, DEBUG, TRACE */ - if (logger.isDebugEnabled()) { - properties.setProperty("gov.nist.javax.sip.TRACE_LEVEL", "DEBUG"); - } - properties.setProperty("gov.nist.javax.sip.TRACE_LEVEL", "INFO"); + properties.setProperty("gov.nist.javax.sip.TRACE_LEVEL", "ERROR"); +// if (logger.isDebugEnabled()) { +// properties.setProperty("gov.nist.javax.sip.TRACE_LEVEL", "DEBUG"); +// } + sipStack = (SipStackImpl) sipFactory.createSipStack(properties); return sipStack; diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/bean/ParentPlatform.java b/src/main/java/com/genersoft/iot/vmp/gb28181/bean/ParentPlatform.java index ef2eecd..ade5d0e 100644 --- a/src/main/java/com/genersoft/iot/vmp/gb28181/bean/ParentPlatform.java +++ b/src/main/java/com/genersoft/iot/vmp/gb28181/bean/ParentPlatform.java @@ -84,7 +84,7 @@ * 娉ㄥ唽鍛ㄦ湡 (绉�) */ @Schema(description = "娉ㄥ唽鍛ㄦ湡 (绉�)") - private String expires; + private int expires; /** * 蹇冭烦鍛ㄦ湡(绉�) @@ -286,11 +286,11 @@ this.password = password; } - public String getExpires() { + public int getExpires() { return expires; } - public void setExpires(String expires) { + public void setExpires(int expires) { this.expires = expires; } diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/bean/ParentPlatformCatch.java b/src/main/java/com/genersoft/iot/vmp/gb28181/bean/ParentPlatformCatch.java index 6c429f2..a53d26e 100644 --- a/src/main/java/com/genersoft/iot/vmp/gb28181/bean/ParentPlatformCatch.java +++ b/src/main/java/com/genersoft/iot/vmp/gb28181/bean/ParentPlatformCatch.java @@ -4,7 +4,9 @@ private String id; - // 蹇冭烦鏈洖澶嶆鏁� + /** + * 蹇冭烦鏈洖澶嶆鏁� + */ private int keepAliveReply; // 娉ㄥ唽鏈洖澶嶆鏁� 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 4a900c1..441dff3 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 @@ -14,6 +14,9 @@ import java.util.List; import java.util.concurrent.ConcurrentHashMap; +/** + * @author lin + */ @Component public class SubscribeHolder { diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/event/EventPublisher.java b/src/main/java/com/genersoft/iot/vmp/gb28181/event/EventPublisher.java index 8a4dd3d..26ababd 100644 --- a/src/main/java/com/genersoft/iot/vmp/gb28181/event/EventPublisher.java +++ b/src/main/java/com/genersoft/iot/vmp/gb28181/event/EventPublisher.java @@ -2,9 +2,6 @@ import com.genersoft.iot.vmp.gb28181.bean.*; import com.genersoft.iot.vmp.gb28181.event.device.RequestTimeoutEvent; -import com.genersoft.iot.vmp.gb28181.event.platformKeepaliveExpire.PlatformKeepaliveExpireEvent; -import com.genersoft.iot.vmp.gb28181.event.platformNotRegister.PlatformCycleRegisterEvent; -import com.genersoft.iot.vmp.gb28181.event.platformNotRegister.PlatformNotRegisterEvent; import com.genersoft.iot.vmp.gb28181.event.record.RecordEndEvent; import com.genersoft.iot.vmp.gb28181.event.subscribe.catalog.CatalogEvent; import com.genersoft.iot.vmp.media.zlm.event.ZLMOfflineEvent; @@ -31,36 +28,6 @@ @Autowired private ApplicationEventPublisher applicationEventPublisher; - - /** - * 骞冲彴蹇冭烦鍒版湡浜嬩欢 - * @param platformGbId - */ - public void platformKeepaliveExpireEventPublish(String platformGbId){ - PlatformKeepaliveExpireEvent platformKeepaliveExpireEvent = new PlatformKeepaliveExpireEvent(this); - platformKeepaliveExpireEvent.setPlatformGbID(platformGbId); - applicationEventPublisher.publishEvent(platformKeepaliveExpireEvent); - } - - /** - * 骞冲彴鏈敞鍐屼簨浠� - * @param platformGbId - */ - public void platformNotRegisterEventPublish(String platformGbId){ - PlatformNotRegisterEvent platformNotRegisterEvent = new PlatformNotRegisterEvent(this); - platformNotRegisterEvent.setPlatformGbID(platformGbId); - applicationEventPublisher.publishEvent(platformNotRegisterEvent); - } - - /** - * 骞冲彴鍛ㄦ湡娉ㄥ唽浜嬩欢 - * @param paltformGbId - */ - public void platformRegisterCycleEventPublish(String paltformGbId) { - PlatformCycleRegisterEvent platformCycleRegisterEvent = new PlatformCycleRegisterEvent(this); - platformCycleRegisterEvent.setPlatformGbID(paltformGbId); - applicationEventPublisher.publishEvent(platformCycleRegisterEvent); - } /** * 璁惧鎶ヨ浜嬩欢 diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/event/SipSubscribe.java b/src/main/java/com/genersoft/iot/vmp/gb28181/event/SipSubscribe.java index c6cfc7a..b3fd82e 100644 --- a/src/main/java/com/genersoft/iot/vmp/gb28181/event/SipSubscribe.java +++ b/src/main/java/com/genersoft/iot/vmp/gb28181/event/SipSubscribe.java @@ -59,9 +59,25 @@ void response(EventResult eventResult); } + /** + * + */ + public enum EventResultType{ + // 瓒呮椂 + timeout, + // 鍥炲 + response, + // 浜嬪姟宸茬粨鏉� + transactionTerminated, + // 浼氳瘽宸茬粨鏉� + dialogTerminated, + // 璁惧鏈壘鍒� + deviceNotFoundEvent + } + public static class EventResult<EventObject>{ public int statusCode; - public String type; + public EventResultType type; public String msg; public String callId; public Dialog dialog; @@ -76,7 +92,7 @@ ResponseEvent responseEvent = (ResponseEvent)event; Response response = responseEvent.getResponse(); this.dialog = responseEvent.getDialog(); - this.type = "response"; + this.type = EventResultType.response; if (response != null) { this.msg = response.getReasonPhrase(); this.statusCode = response.getStatusCode(); @@ -85,28 +101,28 @@ }else if (event instanceof TimeoutEvent) { TimeoutEvent timeoutEvent = (TimeoutEvent)event; - this.type = "timeout"; + this.type = EventResultType.timeout; this.msg = "娑堟伅瓒呮椂鏈洖澶�"; this.statusCode = -1024; this.dialog = timeoutEvent.getClientTransaction().getDialog(); this.callId = this.dialog != null?timeoutEvent.getClientTransaction().getDialog().getCallId().getCallId(): null; }else if (event instanceof TransactionTerminatedEvent) { TransactionTerminatedEvent transactionTerminatedEvent = (TransactionTerminatedEvent)event; - this.type = "transactionTerminated"; + this.type = EventResultType.transactionTerminated; this.msg = "浜嬪姟宸茬粨鏉�"; this.statusCode = -1024; this.callId = transactionTerminatedEvent.getClientTransaction().getDialog().getCallId().getCallId(); this.dialog = transactionTerminatedEvent.getClientTransaction().getDialog(); }else if (event instanceof DialogTerminatedEvent) { DialogTerminatedEvent dialogTerminatedEvent = (DialogTerminatedEvent)event; - this.type = "dialogTerminated"; + this.type = EventResultType.dialogTerminated; this.msg = "浼氳瘽宸茬粨鏉�"; this.statusCode = -1024; this.callId = dialogTerminatedEvent.getDialog().getCallId().getCallId(); this.dialog = dialogTerminatedEvent.getDialog(); }else if (event instanceof DeviceNotFoundEvent) { DeviceNotFoundEvent deviceNotFoundEvent = (DeviceNotFoundEvent)event; - this.type = "deviceNotFoundEvent"; + this.type = EventResultType.deviceNotFoundEvent; this.msg = "璁惧鏈壘鍒�"; this.statusCode = -1024; this.dialog = deviceNotFoundEvent.getDialog(); diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/event/offline/KeepaliveTimeoutListenerForPlatform.java b/src/main/java/com/genersoft/iot/vmp/gb28181/event/offline/KeepaliveTimeoutListenerForPlatform.java deleted file mode 100644 index ead8246..0000000 --- a/src/main/java/com/genersoft/iot/vmp/gb28181/event/offline/KeepaliveTimeoutListenerForPlatform.java +++ /dev/null @@ -1,81 +0,0 @@ -package com.genersoft.iot.vmp.gb28181.event.offline; - -import com.genersoft.iot.vmp.conf.UserSetting; -import com.genersoft.iot.vmp.conf.redis.RedisKeyExpirationEventMessageListener; -import com.genersoft.iot.vmp.gb28181.bean.Device; -import com.genersoft.iot.vmp.gb28181.bean.ParentPlatform; -import com.genersoft.iot.vmp.gb28181.event.SipSubscribe; -import com.genersoft.iot.vmp.storager.IVideoManagerStorage; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.data.redis.connection.Message; -import org.springframework.data.redis.listener.RedisMessageListenerContainer; -import org.springframework.stereotype.Component; - -import com.genersoft.iot.vmp.common.VideoManagerConstants; -import com.genersoft.iot.vmp.gb28181.event.EventPublisher; - -/** - * 璁惧蹇冭烦瓒呮椂鐩戝惉,鍊熷姪redis杩囨湡鐗规�э紝杩涜鐩戝惉锛岀洃鍚埌璇存槑璁惧蹇冭烦瓒呮椂锛屽彂閫佺绾夸簨浠� - * @author swwheihei - */ -@Component -public class KeepaliveTimeoutListenerForPlatform extends RedisKeyExpirationEventMessageListener { - - private Logger logger = LoggerFactory.getLogger(KeepaliveTimeoutListenerForPlatform.class); - - @Autowired - private EventPublisher publisher; - - @Autowired - private UserSetting userSetting; - - @Autowired - private SipSubscribe sipSubscribe; - - @Autowired - private IVideoManagerStorage storager; - - public KeepaliveTimeoutListenerForPlatform(RedisMessageListenerContainer listenerContainer, UserSetting userSetting) { - super(listenerContainer, userSetting); - } - - - /** - * 鐩戝惉澶辨晥鐨刱ey - * @param message - * @param pattern - */ - @Override - public void onMessage(Message message, byte[] pattern) { - // 鑾峰彇澶辨晥鐨刱ey - String expiredKey = message.toString(); - // 骞冲彴蹇冭烦鍒版湡,闇�瑕侀噸鍙�, 鍒ゆ柇鏄惁宸茬粡澶氭鏈敹鍒板績璺冲洖澶�, 澶氭鏈敹鍒�,鍒欓噸鏂板彂璧锋敞鍐�, 娉ㄥ唽灏濊瘯澶氭鏈緱鍒板洖澶�,鍒欒涓哄钩鍙扮绾� - String PLATFORM_KEEPLIVEKEY_PREFIX = VideoManagerConstants.PLATFORM_KEEPALIVE_PREFIX + userSetting.getServerId() + "_"; - String PLATFORM_REGISTER_PREFIX = VideoManagerConstants.PLATFORM_REGISTER_PREFIX + userSetting.getServerId() + "_"; - String REGISTER_INFO_PREFIX = VideoManagerConstants.PLATFORM_REGISTER_INFO_PREFIX + userSetting.getServerId() + "_"; - if (expiredKey.startsWith(PLATFORM_KEEPLIVEKEY_PREFIX)) { - String platformGbId = expiredKey.substring(PLATFORM_KEEPLIVEKEY_PREFIX.length()); - ParentPlatform platform = storager.queryParentPlatByServerGBId(platformGbId); - if (platform != null) { - publisher.platformKeepaliveExpireEventPublish(platformGbId); - } - }else if (expiredKey.startsWith(PLATFORM_REGISTER_PREFIX)) { - String platformGbId = expiredKey.substring(PLATFORM_REGISTER_PREFIX.length(),expiredKey.length()); - ParentPlatform platform = storager.queryParentPlatByServerGBId(platformGbId); - if (platform != null) { - publisher.platformRegisterCycleEventPublish(platformGbId); - } - }else if (expiredKey.startsWith(REGISTER_INFO_PREFIX)) { - String callId = expiredKey.substring(REGISTER_INFO_PREFIX.length()); - if (sipSubscribe.getErrorSubscribe(callId) != null) { - SipSubscribe.EventResult eventResult = new SipSubscribe.EventResult(); - eventResult.callId = callId; - eventResult.msg = "娉ㄥ唽瓒呮椂"; - eventResult.type = "register timeout"; - sipSubscribe.getErrorSubscribe(callId).response(eventResult); - } - } - } -} diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/event/platformKeepaliveExpire/PlatformKeepaliveExpireEvent.java b/src/main/java/com/genersoft/iot/vmp/gb28181/event/platformKeepaliveExpire/PlatformKeepaliveExpireEvent.java deleted file mode 100644 index 1e9a2c4..0000000 --- a/src/main/java/com/genersoft/iot/vmp/gb28181/event/platformKeepaliveExpire/PlatformKeepaliveExpireEvent.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.genersoft.iot.vmp.gb28181.event.platformKeepaliveExpire; - -import org.springframework.context.ApplicationEvent; - -/** - * 骞冲彴蹇冭烦瓒呮椂浜嬩欢 - */ -public class PlatformKeepaliveExpireEvent extends ApplicationEvent { - - /** - * Add default serial version ID - */ - private static final long serialVersionUID = 1L; - - private String platformGbID; - - public PlatformKeepaliveExpireEvent(Object source) { - super(source); - } - - public String getPlatformGbID() { - return platformGbID; - } - - public void setPlatformGbID(String platformGbID) { - this.platformGbID = platformGbID; - } -} diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/event/platformKeepaliveExpire/PlatformKeepaliveExpireEventLister.java b/src/main/java/com/genersoft/iot/vmp/gb28181/event/platformKeepaliveExpire/PlatformKeepaliveExpireEventLister.java deleted file mode 100644 index 67b297c..0000000 --- a/src/main/java/com/genersoft/iot/vmp/gb28181/event/platformKeepaliveExpire/PlatformKeepaliveExpireEventLister.java +++ /dev/null @@ -1,87 +0,0 @@ -package com.genersoft.iot.vmp.gb28181.event.platformKeepaliveExpire; - -import com.genersoft.iot.vmp.gb28181.bean.ParentPlatform; -import com.genersoft.iot.vmp.gb28181.bean.ParentPlatformCatch; -import com.genersoft.iot.vmp.gb28181.event.EventPublisher; -import com.genersoft.iot.vmp.gb28181.event.SipSubscribe; -import com.genersoft.iot.vmp.gb28181.transmit.cmd.ISIPCommanderForPlatform; -import com.genersoft.iot.vmp.storager.IRedisCatchStorage; -import com.genersoft.iot.vmp.storager.IVideoManagerStorage; -import org.jetbrains.annotations.NotNull; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.context.ApplicationListener; -import org.springframework.stereotype.Component; - -import javax.sip.message.Response; - -/** - * @description: 骞冲彴蹇冭烦瓒呮椂浜嬩欢 - * @author: panll - * @date: 2020骞�11鏈�5鏃� 10:00 - */ -@Component -public class PlatformKeepaliveExpireEventLister implements ApplicationListener<PlatformKeepaliveExpireEvent> { - - - private final static Logger logger = LoggerFactory.getLogger(PlatformKeepaliveExpireEventLister.class); - - @Autowired - private IVideoManagerStorage storager; - - @Autowired - private IRedisCatchStorage redisCatchStorage; - - @Autowired - private ISIPCommanderForPlatform sipCommanderForPlatform; - - @Autowired - private SipSubscribe sipSubscribe; - - @Autowired - private EventPublisher publisher; - - @Override - public void onApplicationEvent(@NotNull PlatformKeepaliveExpireEvent event) { - - if (logger.isDebugEnabled()) { - logger.debug("骞冲彴蹇冭烦鍒版湡浜嬩欢浜嬩欢瑙﹀彂锛屽钩鍙板浗鏍嘔D锛�" + event.getPlatformGbID()); - } - ParentPlatform parentPlatform = storager.queryParentPlatByServerGBId(event.getPlatformGbID()); - ParentPlatformCatch parentPlatformCatch = redisCatchStorage.queryPlatformCatchInfo(event.getPlatformGbID()); - if (parentPlatformCatch == null) { - return; - } - if (parentPlatform == null) { - logger.debug("骞冲彴蹇冭烦鍒版湡浜嬩欢浜嬩欢瑙﹀彂锛屼絾骞冲彴宸茬粡鍒犻櫎!!! 骞冲彴鍥芥爣ID锛�" + event.getPlatformGbID()); - return; - } - parentPlatformCatch.setParentPlatform(parentPlatform); - // 鍙戦�佸績璺� - if (parentPlatformCatch.getKeepAliveReply() >= 3) { - // 鏈�3娆℃湭鏀跺埌蹇冭烦鍥炲, 璁剧疆骞冲彴鐘舵�佷负绂荤嚎, 寮�濮嬮噸鏂版敞鍐� - logger.warn("鏈�3娆℃湭鏀跺埌蹇冭烦鍥炲,鏍囪璁剧疆骞冲彴鐘舵�佷负绂荤嚎, 骞堕噸鏂版敞鍐� 骞冲彴鍥芥爣ID锛�" + event.getPlatformGbID()); - storager.updateParentPlatformStatus(event.getPlatformGbID(), false); - publisher.platformNotRegisterEventPublish(event.getPlatformGbID()); - parentPlatformCatch.setKeepAliveReply(0); - redisCatchStorage.updatePlatformCatchInfo(parentPlatformCatch); - }else { - // 鍐嶆鍙戦�佸績璺� - String callId = sipCommanderForPlatform.keepalive(parentPlatform); - - parentPlatformCatch.setKeepAliveReply( parentPlatformCatch.getKeepAliveReply() + 1); - // 瀛樺偍蹇冭烦淇℃伅, 骞惰缃姸鎬佷负鏈洖澶�, 濡傛灉澶氭杩囨湡浠嶆湭鏀跺埌鍥炲,鍒欒涓轰笂绾у钩鍙板凡缁忕绾� - redisCatchStorage.updatePlatformKeepalive(parentPlatform); - redisCatchStorage.updatePlatformCatchInfo(parentPlatformCatch); - - sipSubscribe.addOkSubscribe(callId, (SipSubscribe.EventResult eventResult) ->{ - if (eventResult.statusCode == Response.OK) { - // 鏀跺埌蹇冭烦鍝嶅簲淇℃伅, - parentPlatformCatch.setKeepAliveReply(0); - redisCatchStorage.updatePlatformCatchInfo(parentPlatformCatch); - } - } ); - } - } -} diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/event/platformNotRegister/PlatformCycleRegisterEvent.java b/src/main/java/com/genersoft/iot/vmp/gb28181/event/platformNotRegister/PlatformCycleRegisterEvent.java deleted file mode 100644 index c2ff61f..0000000 --- a/src/main/java/com/genersoft/iot/vmp/gb28181/event/platformNotRegister/PlatformCycleRegisterEvent.java +++ /dev/null @@ -1,24 +0,0 @@ -package com.genersoft.iot.vmp.gb28181.event.platformNotRegister; - -import org.springframework.context.ApplicationEvent; - -public class PlatformCycleRegisterEvent extends ApplicationEvent { - /** - * Add default serial version ID - */ - private static final long serialVersionUID = 1L; - - private String platformGbID; - - public String getPlatformGbID() { - return platformGbID; - } - - public void setPlatformGbID(String platformGbID) { - this.platformGbID = platformGbID; - } - - public PlatformCycleRegisterEvent(Object source) { - super(source); - } -} 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 deleted file mode 100644 index d2a9246..0000000 --- a/src/main/java/com/genersoft/iot/vmp/gb28181/event/platformNotRegister/PlatformCycleRegisterEventLister.java +++ /dev/null @@ -1,46 +0,0 @@ -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; -import com.genersoft.iot.vmp.storager.IVideoManagerStorage; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.context.ApplicationListener; -import org.springframework.stereotype.Component; - -import java.util.Timer; -import java.util.TimerTask; - -@Component -public class PlatformCycleRegisterEventLister implements ApplicationListener<PlatformCycleRegisterEvent> { - - private final static Logger logger = LoggerFactory.getLogger(PlatformCycleRegisterEventLister.class); - - @Autowired - private IVideoManagerStorage storager; - @Autowired - private ISIPCommanderForPlatform sipCommanderFroPlatform; - @Autowired - private DynamicTask dynamicTask; - - @Override - public void onApplicationEvent(PlatformCycleRegisterEvent event) { - logger.info("涓婄骇骞冲彴鍛ㄦ湡娉ㄥ唽浜嬩欢"); - ParentPlatform parentPlatform = storager.queryParentPlatByServerGBId(event.getPlatformGbID()); - if (parentPlatform == null) { - logger.info("[ 骞冲彴鏈敞鍐屼簨浠� ] 骞冲彴宸茬粡鍒犻櫎!!! 骞冲彴鍥芥爣ID锛�" + event.getPlatformGbID()); - return; - } - String taskKey = "platform-cycle-register" + parentPlatform.getServerGBId();; - SipSubscribe.Event okEvent = (responseEvent)->{ - dynamicTask.stop(taskKey); - }; - 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/PlatformNotRegisterEvent.java b/src/main/java/com/genersoft/iot/vmp/gb28181/event/platformNotRegister/PlatformNotRegisterEvent.java deleted file mode 100644 index c936975..0000000 --- a/src/main/java/com/genersoft/iot/vmp/gb28181/event/platformNotRegister/PlatformNotRegisterEvent.java +++ /dev/null @@ -1,25 +0,0 @@ -package com.genersoft.iot.vmp.gb28181.event.platformNotRegister; - -import org.springframework.context.ApplicationEvent; - -public class PlatformNotRegisterEvent extends ApplicationEvent { - - /** - * Add default serial version ID - */ - private static final long serialVersionUID = 1L; - - private String platformGbID; - - public PlatformNotRegisterEvent(Object source) { - super(source); - } - - public String getPlatformGbID() { - return platformGbID; - } - - public void setPlatformGbID(String platformGbID) { - this.platformGbID = platformGbID; - } -} 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 deleted file mode 100644 index 56bdeb5..0000000 --- a/src/main/java/com/genersoft/iot/vmp/gb28181/event/platformNotRegister/PlatformNotRegisterEventLister.java +++ /dev/null @@ -1,90 +0,0 @@ -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; -import com.genersoft.iot.vmp.gb28181.event.SipSubscribe; -import com.genersoft.iot.vmp.gb28181.transmit.cmd.impl.SIPCommanderFroPlatform; -import com.genersoft.iot.vmp.media.zlm.ZLMRTPServerFactory; -import com.genersoft.iot.vmp.media.zlm.dto.MediaServerItem; -import com.genersoft.iot.vmp.service.IMediaServerService; -import com.genersoft.iot.vmp.storager.IRedisCatchStorage; -import com.genersoft.iot.vmp.storager.IVideoManagerStorage; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.context.ApplicationListener; -import org.springframework.stereotype.Component; - -import java.util.*; - -/** - * @description: 骞冲彴鏈敞鍐屼簨浠�,鏉ユ簮鏈変簩: - * 1銆佸钩鍙版柊娣诲姞 - * 2銆佸钩鍙板績璺宠秴鏃� - * @author: panll - * @date: 2020骞�11鏈�24鏃� 10:00 - */ -@Component -public class PlatformNotRegisterEventLister implements ApplicationListener<PlatformNotRegisterEvent> { - - private final static Logger logger = LoggerFactory.getLogger(PlatformNotRegisterEventLister.class); - - @Autowired - private IVideoManagerStorage storager; - @Autowired - private IRedisCatchStorage redisCatchStorage; - @Autowired - private IMediaServerService mediaServerService; - - @Autowired - private SIPCommanderFroPlatform sipCommanderFroPlatform; - - @Autowired - private ZLMRTPServerFactory zlmrtpServerFactory; - - @Autowired - private SipConfig config; - - @Autowired - private DynamicTask dynamicTask; - - // @Autowired - // private RedisUtil redis; - - @Override - public void onApplicationEvent(PlatformNotRegisterEvent event) { - - logger.info("[ 骞冲彴鏈敞鍐屼簨浠� ]骞冲彴鍥芥爣ID锛�" + event.getPlatformGbID()); - - ParentPlatform parentPlatform = storager.queryParentPlatByServerGBId(event.getPlatformGbID()); - if (parentPlatform == null) { - logger.info("[ 骞冲彴鏈敞鍐屼簨浠� ] 骞冲彴宸茬粡鍒犻櫎!!! 骞冲彴鍥芥爣ID锛�" + event.getPlatformGbID()); - return; - } - // 鏌ヨ鏄惁鏈夋帹娴侊紝 濡傛灉鏈夊垯閮藉仠姝� - List<SendRtpItem> sendRtpItems = redisCatchStorage.querySendRTPServer(event.getPlatformGbID()); - if (sendRtpItems != null && sendRtpItems.size() > 0) { - logger.info("[ 骞冲彴鏈敞鍐屼簨浠� ] 鍋滄[ {} ]鐨勬墍鏈夋帹娴�", event.getPlatformGbID()); - for (SendRtpItem sendRtpItem : sendRtpItems) { - redisCatchStorage.deleteSendRTPServer(event.getPlatformGbID(), sendRtpItem.getChannelId(), null, null); - MediaServerItem mediaInfo = mediaServerService.getOne(sendRtpItem.getMediaServerId()); - Map<String, Object> param = new HashMap<>(); - param.put("vhost", "__defaultVhost__"); - param.put("app", sendRtpItem.getApp()); - param.put("stream", sendRtpItem.getStreamId()); - zlmrtpServerFactory.stopSendRtpStream(mediaInfo, param); - } - - } - String taskKey = "platform-not-register-" + parentPlatform.getServerGBId(); - SipSubscribe.Event okEvent = (responseEvent)->{ - dynamicTask.stop(taskKey); - }; - 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 79bb4ca..734d600 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 @@ -30,22 +30,9 @@ @Autowired private IVideoManagerStorage storager; - @Autowired - private IRedisCatchStorage redisCatchStorage; - @Autowired - private IMediaServerService mediaServerService; @Autowired private SIPCommanderFroPlatform sipCommanderFroPlatform; - - @Autowired - private ZLMRTPServerFactory zlmrtpServerFactory; - - @Autowired - private SipConfig config; - - @Autowired - private UserSetting userSetting; @Autowired private IGbStreamService gbStreamService; 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 7edee4d..2ee1037 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 @@ -60,7 +60,6 @@ // TODO 鏆傛椂鍙鐞嗚棰戞祦鐨勫洖澶�,鍚庣画澧炲姞瀵瑰浗鏍囪澶囩殑鏀寔 List<DeviceChannel> gbStreams = storager.queryGbStreamListInPlatform(platform.getServerGBId()); if (gbStreams.size() == 0) { - logger.info("鍙戦�佽闃呮椂鍙戠幇骞冲彴宸茬粡娌℃湁鍏宠仈鐨勭洿鎾祦锛歿}", platform.getServerGBId()); return; } for (DeviceChannel deviceChannel : gbStreams) { diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/ISIPCommanderForPlatform.java b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/ISIPCommanderForPlatform.java index d000f5a..351505f 100644 --- a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/ISIPCommanderForPlatform.java +++ b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/ISIPCommanderForPlatform.java @@ -15,7 +15,7 @@ * @return */ boolean register(ParentPlatform parentPlatform, SipSubscribe.Event errorEvent , SipSubscribe.Event okEvent); - boolean register(ParentPlatform parentPlatform, String callId, WWWAuthenticateHeader www, SipSubscribe.Event errorEvent , SipSubscribe.Event okEvent, boolean registerAgain); + boolean register(ParentPlatform parentPlatform, String callId, WWWAuthenticateHeader www, SipSubscribe.Event errorEvent , SipSubscribe.Event okEvent, boolean registerAgain, boolean isRegister); /** * 鍚戜笂绾у钩鍙版敞閿� @@ -30,7 +30,7 @@ * @param parentPlatform * @return callId(浣滀负鎺ュ彈鍥炲鐨勫垽瀹�) */ - String keepalive(ParentPlatform parentPlatform); + String keepalive(ParentPlatform parentPlatform,SipSubscribe.Event errorEvent , SipSubscribe.Event okEvent); /** 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 ad8043f..a75e806 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 @@ -3,6 +3,7 @@ import com.genersoft.iot.vmp.conf.SipConfig; import com.genersoft.iot.vmp.gb28181.bean.ParentPlatform; import com.genersoft.iot.vmp.gb28181.bean.SubscribeInfo; +import com.genersoft.iot.vmp.gb28181.utils.HeaderUtils; import com.genersoft.iot.vmp.storager.IRedisCatchStorage; import gov.nist.javax.sip.message.MessageFactoryImpl; import org.springframework.beans.factory.annotation.Autowired; @@ -75,7 +76,7 @@ } - public Request createRegisterRequest(@NotNull ParentPlatform platform, long CSeq, String fromTag, String viaTag, CallIdHeader callIdHeader) throws ParseException, InvalidArgumentException, PeerUnavailableException { + public Request createRegisterRequest(@NotNull ParentPlatform platform, long CSeq, String fromTag, String viaTag, CallIdHeader callIdHeader, boolean isRegister) throws ParseException, InvalidArgumentException, PeerUnavailableException { Request request = null; String sipAddress = sipConfig.getIp() + ":" + sipConfig.getPort(); //璇锋眰琛� @@ -109,18 +110,20 @@ .createSipURI(platform.getDeviceGBId(), sipAddress)); request.addHeader(sipFactory.createHeaderFactory().createContactHeader(concatAddress)); - ExpiresHeader expires = sipFactory.createHeaderFactory().createExpiresHeader(Integer.parseInt(platform.getExpires())); + ExpiresHeader expires = sipFactory.createHeaderFactory().createExpiresHeader(isRegister ? platform.getExpires() : 0); request.addHeader(expires); + UserAgentHeader userAgentHeader = HeaderUtils.createUserAgentHeader(sipFactory); + request.addHeader(userAgentHeader); return request; } public Request createRegisterRequest(@NotNull ParentPlatform parentPlatform, String fromTag, String viaTag, - String callId, WWWAuthenticateHeader www , CallIdHeader callIdHeader) throws ParseException, PeerUnavailableException, InvalidArgumentException { + String callId, WWWAuthenticateHeader www , CallIdHeader callIdHeader, boolean isRegister) throws ParseException, PeerUnavailableException, InvalidArgumentException { - Request registerRequest = createRegisterRequest(parentPlatform, redisCatchStorage.getCSEQ(), fromTag, viaTag, callIdHeader); + Request registerRequest = createRegisterRequest(parentPlatform, redisCatchStorage.getCSEQ(), fromTag, viaTag, callIdHeader, isRegister); SipURI requestURI = sipFactory.createAddressFactory().createSipURI(parentPlatform.getServerGBId(), parentPlatform.getServerIP() + ":" + parentPlatform.getServerPort()); if (www == null) { AuthorizationHeader authorizationHeader = sipFactory.createHeaderFactory().createAuthorizationHeader("Digest"); 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 b89fd8e..aee6d4e 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 @@ -12,6 +12,7 @@ import com.genersoft.iot.vmp.common.StreamInfo; import com.genersoft.iot.vmp.gb28181.session.VideoStreamSessionManager; +import com.genersoft.iot.vmp.gb28181.utils.HeaderUtils; import com.genersoft.iot.vmp.storager.IRedisCatchStorage; import gov.nist.javax.sip.SipProviderImpl; import gov.nist.javax.sip.SipStackImpl; @@ -266,15 +267,7 @@ Address concatAddress = sipFactory.createAddressFactory().createAddress(sipFactory.createAddressFactory() .createSipURI(sipConfig.getId(), sipConfig.getIp() + ":" + sipConfig.getPort())); infoRequest.addHeader(sipFactory.createHeaderFactory().createContactHeader(concatAddress)); - 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); - } + UserAgentHeader userAgentHeader = HeaderUtils.createUserAgentHeader(sipFactory); infoRequest.addHeader(userAgentHeader); ContentTypeHeader contentTypeHeader = sipFactory.createHeaderFactory().createContentTypeHeader("Application", 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 3f6fa0c..e9d8046 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 @@ -10,6 +10,7 @@ import com.genersoft.iot.vmp.gb28181.session.VideoStreamSessionManager; import com.genersoft.iot.vmp.gb28181.transmit.cmd.ISIPCommander; import com.genersoft.iot.vmp.gb28181.transmit.cmd.SIPRequestHeaderProvider; +import com.genersoft.iot.vmp.gb28181.utils.HeaderUtils; import com.genersoft.iot.vmp.media.zlm.dto.HookSubscribeFactory; import com.genersoft.iot.vmp.media.zlm.dto.HookSubscribeForStreamChange; import com.genersoft.iot.vmp.media.zlm.dto.HookType; @@ -740,15 +741,7 @@ // 澧炲姞Contact header Address concatAddress = sipFactory.createAddressFactory().createAddress(sipFactory.createAddressFactory().createSipURI(sipConfig.getId(), sipConfig.getIp()+":"+sipConfig.getPort())); byeRequest.addHeader(sipFactory.createHeaderFactory().createContactHeader(concatAddress)); - 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); - } + UserAgentHeader userAgentHeader = HeaderUtils.createUserAgentHeader(sipFactory); byeRequest.addHeader(userAgentHeader); ClientTransaction clientTransaction = null; if("TCP".equals(protocol)) { @@ -1677,14 +1670,11 @@ 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); + userAgentHeader = HeaderUtils.createUserAgentHeader(sipFactory); } catch (ParseException e) { - throw new RuntimeException(e); + logger.error("娣诲姞UserAgentHeader澶辫触", e); } request.addHeader(userAgentHeader); } 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 1d8b605..2d6d582 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 @@ -4,6 +4,7 @@ import com.genersoft.iot.vmp.gb28181.event.SipSubscribe; import com.genersoft.iot.vmp.gb28181.transmit.cmd.ISIPCommanderForPlatform; import com.genersoft.iot.vmp.gb28181.transmit.cmd.SIPRequestHeaderPlarformProvider; +import com.genersoft.iot.vmp.storager.dao.dto.PlatformRegisterInfo; import com.genersoft.iot.vmp.utils.DateUtil; import com.genersoft.iot.vmp.media.zlm.ZLMRTPServerFactory; import com.genersoft.iot.vmp.media.zlm.dto.MediaServerItem; @@ -75,28 +76,21 @@ @Override public boolean register(ParentPlatform parentPlatform, SipSubscribe.Event errorEvent , SipSubscribe.Event okEvent) { - return register(parentPlatform, null, null, errorEvent, okEvent, false); + return register(parentPlatform, null, null, errorEvent, okEvent, false, true); } @Override public boolean unregister(ParentPlatform parentPlatform, SipSubscribe.Event errorEvent , SipSubscribe.Event okEvent) { - ParentPlatformCatch parentPlatformCatch = redisCatchStorage.queryPlatformCatchInfo(parentPlatform.getServerGBId()); - parentPlatform.setExpires("0"); - if (parentPlatformCatch != null) { - parentPlatformCatch.setParentPlatform(parentPlatform); - redisCatchStorage.updatePlatformCatchInfo(parentPlatformCatch); - } - return register(parentPlatform, null, null, errorEvent, okEvent, false); + return register(parentPlatform, null, null, errorEvent, okEvent, false, false); } @Override public boolean register(ParentPlatform parentPlatform, @Nullable String callId, @Nullable WWWAuthenticateHeader www, - SipSubscribe.Event errorEvent , SipSubscribe.Event okEvent, boolean registerAgain) { + SipSubscribe.Event errorEvent , SipSubscribe.Event okEvent, boolean registerAgain, boolean isRegister) { try { Request request; String tm = Long.toString(System.currentTimeMillis()); if (!registerAgain ) { - // //callid CallIdHeader callIdHeader = null; if(parentPlatform.getTransport().equals("TCP")) { callIdHeader = tcpSipProvider.getNewCallId(); @@ -107,10 +101,10 @@ request = headerProviderPlarformProvider.createRegisterRequest(parentPlatform, redisCatchStorage.getCSEQ(), "FromRegister" + tm, - "z9hG4bK-" + UUID.randomUUID().toString().replace("-", ""), callIdHeader); + "z9hG4bK-" + UUID.randomUUID().toString().replace("-", ""), callIdHeader, isRegister); // 灏� callid 鍐欏叆缂撳瓨锛� 绛夋敞鍐屾垚鍔熷彲浠ユ洿鏂扮姸鎬� String callIdFromHeader = callIdHeader.getCallId(); - redisCatchStorage.updatePlatformRegisterInfo(callIdFromHeader, parentPlatform.getServerGBId()); + redisCatchStorage.updatePlatformRegisterInfo(callIdFromHeader, PlatformRegisterInfo.getInstance(parentPlatform.getServerGBId(), isRegister)); sipSubscribe.addErrorSubscribe(callIdHeader.getCallId(), (event)->{ if (event != null) { @@ -127,7 +121,7 @@ }else { CallIdHeader callIdHeader = parentPlatform.getTransport().equals("TCP") ? tcpSipProvider.getNewCallId() : udpSipProvider.getNewCallId(); - request = headerProviderPlarformProvider.createRegisterRequest(parentPlatform, "FromRegister" + tm, null, callId, www, callIdHeader); + request = headerProviderPlarformProvider.createRegisterRequest(parentPlatform, "FromRegister" + tm, null, callId, www, callIdHeader, isRegister); } transmitRequest(parentPlatform, request, null, okEvent); @@ -145,7 +139,7 @@ } @Override - public String keepalive(ParentPlatform parentPlatform) { + public String keepalive(ParentPlatform parentPlatform,SipSubscribe.Event errorEvent , SipSubscribe.Event okEvent) { String callId = null; try { String characterSet = parentPlatform.getCharacterSet(); @@ -168,7 +162,7 @@ UUID.randomUUID().toString().replace("-", ""), null, callIdHeader); - transmitRequest(parentPlatform, request); + transmitRequest(parentPlatform, request, errorEvent, okEvent); callId = callIdHeader.getCallId(); } catch (ParseException | InvalidArgumentException | SipException e) { e.printStackTrace(); 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 8f3ba0a..8977d8a 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 @@ -59,6 +59,9 @@ public ServerTransaction getServerTransaction(RequestEvent evt) { Request request = evt.getRequest(); ServerTransaction serverTransaction = evt.getServerTransaction(); + if (serverTransaction != null) { + System.out.println(serverTransaction.getState().toString()); + } // 鍒ゆ柇TCP杩樻槸UDP boolean isTcp = false; ViaHeader reqViaHeader = (ViaHeader) request.getHeader(ViaHeader.NAME); @@ -86,6 +89,8 @@ logger.error(e.getMessage()); } catch (TransactionUnavailableException e) { logger.error(e.getMessage()); + }finally { + } } return serverTransaction; @@ -182,6 +187,10 @@ sipFactory.createAddressFactory().createSipURI(sipURI.getUser(), sipURI.getHost()+":"+sipURI.getPort() )); response.addHeader(sipFactory.createHeaderFactory().createContactHeader(concatAddress)); + ServerTransaction serverTransaction = getServerTransaction(evt); + if (serverTransaction == null) { + + } getServerTransaction(evt).sendResponse(response); } diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/response/impl/InviteResponseProcessor.java b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/response/impl/InviteResponseProcessor.java index 04a11b9..1a39635 100644 --- a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/response/impl/InviteResponseProcessor.java +++ b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/response/impl/InviteResponseProcessor.java @@ -6,6 +6,7 @@ import com.genersoft.iot.vmp.gb28181.session.VideoStreamSessionManager; import com.genersoft.iot.vmp.gb28181.transmit.SIPProcessorObserver; import com.genersoft.iot.vmp.gb28181.transmit.event.response.SIPResponseProcessorAbstract; +import com.genersoft.iot.vmp.gb28181.utils.HeaderUtils; import gov.nist.javax.sip.ResponseEventExt; import gov.nist.javax.sip.message.SIPResponse; import gov.nist.javax.sip.stack.SIPDialog; @@ -103,15 +104,7 @@ } requestURI.setPort(event.getRemotePort()); reqAck.setRequestURI(requestURI); - 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); - } + UserAgentHeader userAgentHeader = HeaderUtils.createUserAgentHeader(sipFactory); reqAck.addHeader(userAgentHeader); Address concatAddress = sipFactory.createAddressFactory().createAddress(sipFactory.createAddressFactory().createSipURI(sipConfig.getId(), sipConfig.getIp()+":"+sipConfig.getPort())); reqAck.addHeader(sipFactory.createHeaderFactory().createContactHeader(concatAddress)); diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/response/impl/RegisterResponseProcessor.java b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/response/impl/RegisterResponseProcessor.java index a48dd20..a5cddae 100644 --- a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/response/impl/RegisterResponseProcessor.java +++ b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/response/impl/RegisterResponseProcessor.java @@ -6,8 +6,10 @@ import com.genersoft.iot.vmp.gb28181.transmit.SIPProcessorObserver; import com.genersoft.iot.vmp.gb28181.transmit.cmd.ISIPCommanderForPlatform; import com.genersoft.iot.vmp.gb28181.transmit.event.response.SIPResponseProcessorAbstract; +import com.genersoft.iot.vmp.service.IPlatformService; import com.genersoft.iot.vmp.storager.IRedisCatchStorage; import com.genersoft.iot.vmp.storager.IVideoManagerStorage; +import com.genersoft.iot.vmp.storager.dao.dto.PlatformRegisterInfo; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -44,6 +46,9 @@ @Autowired private SubscribeHolder subscribeHolder; + @Autowired + private IPlatformService platformService; + @Override public void afterPropertiesSet() throws Exception { // 娣诲姞娑堟伅澶勭悊鐨勮闃� @@ -60,48 +65,39 @@ Response response = evt.getResponse(); CallIdHeader callIdHeader = (CallIdHeader) response.getHeader(CallIdHeader.NAME); String callId = callIdHeader.getCallId(); - - String platformGBId = redisCatchStorage.queryPlatformRegisterInfo(callId); - if (platformGBId == null) { - logger.info(String.format("鏈壘鍒癱allId锛� %s 鐨勬敞鍐�/娉ㄩ攢骞冲彴id", callId )); + PlatformRegisterInfo platformRegisterInfo = redisCatchStorage.queryPlatformRegisterInfo(callId); + if (platformRegisterInfo == null) { + logger.info(String.format("[鍥芥爣绾ц仈]鏈壘鍒癱allId锛� %s 鐨勬敞鍐�/娉ㄩ攢骞冲彴id", callId )); return; } - ParentPlatformCatch parentPlatformCatch = redisCatchStorage.queryPlatformCatchInfo(platformGBId); + ParentPlatformCatch parentPlatformCatch = redisCatchStorage.queryPlatformCatchInfo(platformRegisterInfo.getPlatformId()); if (parentPlatformCatch == null) { - logger.warn(String.format("[鏀跺埌娉ㄥ唽/娉ㄩ攢%S璇锋眰]骞冲彴锛�%s锛屼絾鏄钩鍙扮紦瀛樹俊鎭湭鏌ヨ鍒�!!!", response.getStatusCode(),platformGBId)); + logger.warn(String.format("[鍥芥爣绾ц仈]鏀跺埌娉ㄥ唽/娉ㄩ攢%S璇锋眰锛屽钩鍙帮細%s锛屼絾鏄钩鍙扮紦瀛樹俊鎭湭鏌ヨ鍒�!!!", response.getStatusCode(),platformRegisterInfo.getPlatformId())); return; } - String action = parentPlatformCatch.getParentPlatform().getExpires().equals("0") ? "娉ㄩ攢" : "娉ㄥ唽"; - logger.info(String.format("[%s %S鍝嶅簲]%s ", action, response.getStatusCode(), platformGBId )); + + String action = platformRegisterInfo.isRegister() ? "娉ㄥ唽" : "娉ㄩ攢"; + logger.info(String.format("[鍥芥爣绾ц仈]%s %S鍝嶅簲,%s ", action, response.getStatusCode(), platformRegisterInfo.getPlatformId() )); ParentPlatform parentPlatform = parentPlatformCatch.getParentPlatform(); if (parentPlatform == null) { - logger.warn(String.format("鏀跺埌 %s %s鐨�%S璇锋眰, 浣嗘槸骞冲彴淇℃伅鏈煡璇㈠埌!!!", platformGBId, action, response.getStatusCode())); + logger.warn(String.format("[鍥芥爣绾ц仈]鏀跺埌 %s %s鐨�%S璇锋眰, 浣嗘槸骞冲彴淇℃伅鏈煡璇㈠埌!!!", platformRegisterInfo.getPlatformId(), action, response.getStatusCode())); return; } - if (response.getStatusCode() == 401) { + if (response.getStatusCode() == Response.UNAUTHORIZED) { WWWAuthenticateHeader www = (WWWAuthenticateHeader)response.getHeader(WWWAuthenticateHeader.NAME); - sipCommanderForPlatform.register(parentPlatform, callId, www, null, null, true); - }else if (response.getStatusCode() == 200){ - // 娉ㄥ唽/娉ㄩ攢鎴愬姛 - logger.info(String.format("%s %s鎴愬姛", platformGBId, action)); + sipCommanderForPlatform.register(parentPlatform, callId, www, null, null, true, platformRegisterInfo.isRegister()); + }else if (response.getStatusCode() == Response.OK){ + + if (platformRegisterInfo.isRegister()) { + platformService.online(parentPlatform); + }else { + platformService.offline(parentPlatform); + } + + // 娉ㄥ唽/娉ㄩ攢鎴愬姛绉婚櫎缂撳瓨鐨勪俊鎭� redisCatchStorage.delPlatformRegisterInfo(callId); - redisCatchStorage.delPlatformCatchInfo(platformGBId); - // 鍙栧洖Expires璁剧疆锛岄伩鍏嶆敞閿�杩囩▼涓缃负0 - ParentPlatform parentPlatformTmp = storager.queryParentPlatByServerGBId(platformGBId); - if (parentPlatformTmp != null) { - parentPlatformTmp.setStatus("娉ㄥ唽".equals(action)); - redisCatchStorage.updatePlatformRegister(parentPlatformTmp); - redisCatchStorage.updatePlatformKeepalive(parentPlatformTmp); - parentPlatformCatch.setParentPlatform(parentPlatformTmp); - } - redisCatchStorage.updatePlatformCatchInfo(parentPlatformCatch); - storager.updateParentPlatformStatus(platformGBId, "娉ㄥ唽".equals(action)); - if ("娉ㄩ攢".equals(action)) { - subscribeHolder.removeCatalogSubscribe(platformGBId); - subscribeHolder.removeMobilePositionSubscribe(platformGBId); - } } } diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/utils/HeaderUtils.java b/src/main/java/com/genersoft/iot/vmp/gb28181/utils/HeaderUtils.java new file mode 100644 index 0000000..8611267 --- /dev/null +++ b/src/main/java/com/genersoft/iot/vmp/gb28181/utils/HeaderUtils.java @@ -0,0 +1,22 @@ +package com.genersoft.iot.vmp.gb28181.utils; + +import javax.sip.PeerUnavailableException; +import javax.sip.SipFactory; +import javax.sip.header.UserAgentHeader; +import java.text.ParseException; +import java.util.ArrayList; +import java.util.List; + +/** + * 鐢熸垚header鐨勫伐鍏风被 + * @author lin + */ +public class HeaderUtils { + + public static UserAgentHeader createUserAgentHeader(SipFactory sipFactory) throws PeerUnavailableException, ParseException { + List<String> agentParam = new ArrayList<>(); + agentParam.add("WVP PRO"); + // TODO 娣诲姞鐗堟湰淇℃伅浠ュ強鏃ユ湡 + return sipFactory.createHeaderFactory().createUserAgentHeader(agentParam); + } +} diff --git a/src/main/java/com/genersoft/iot/vmp/media/zlm/AssistRESTfulUtils.java b/src/main/java/com/genersoft/iot/vmp/media/zlm/AssistRESTfulUtils.java index 36ae1b8..2d11754 100644 --- a/src/main/java/com/genersoft/iot/vmp/media/zlm/AssistRESTfulUtils.java +++ b/src/main/java/com/genersoft/iot/vmp/media/zlm/AssistRESTfulUtils.java @@ -50,7 +50,7 @@ if (mediaServerItem == null) { return null; } - if (ObjectUtils.isEmpty(mediaServerItem.getRecordAssistPort())) { + if (mediaServerItem.getRecordAssistPort() > 0) { logger.warn("鏈惎鐢ˋssist鏈嶅姟"); return null; } diff --git a/src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMHttpHookListener.java b/src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMHttpHookListener.java index e7c32ef..7afe0fd 100644 --- a/src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMHttpHookListener.java +++ b/src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMHttpHookListener.java @@ -18,8 +18,11 @@ 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.http.HttpStatus; import org.springframework.http.ResponseEntity; +import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor; +import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler; import org.springframework.util.ObjectUtils; import org.springframework.util.StringUtils; import org.springframework.web.bind.annotation.PostMapping; @@ -91,6 +94,10 @@ @Autowired private AssistRESTfulUtils assistRESTfulUtils; + + @Qualifier("taskExecutor") + @Autowired + private ThreadPoolTaskExecutor taskExecutor; /** * 鏈嶅姟鍣ㄥ畾鏃朵笂鎶ユ椂闂达紝涓婃姤闂撮殧鍙厤缃紝榛樿10s涓婃姤涓�娆� @@ -238,9 +245,12 @@ // 閴存潈閫氳繃 redisCatchStorage.updateStreamAuthorityInfo(param.getApp(), param.getStream(), streamAuthorityInfo); // 閫氱煡assist鏂扮殑callId - if (mediaInfo != null && mediaInfo.getRecordAssistPort() > 0) { - assistRESTfulUtils.addStreamCallInfo(mediaInfo, param.getApp(), param.getStream(), callId, null); - } + taskExecutor.execute(()->{ + if (mediaInfo != null && mediaInfo.getRecordAssistPort() > 0) { + assistRESTfulUtils.addStreamCallInfo(mediaInfo, param.getApp(), param.getStream(), callId, null); + } + }); + }else { zlmMediaListManager.sendStreamEvent(param.getApp(),param.getStream(), param.getMediaServerId()); } @@ -416,18 +426,23 @@ String schema = item.getSchema(); List<MediaItem.MediaTrack> tracks = item.getTracks(); boolean regist = item.isRegist(); - if (regist) { - StreamAuthorityInfo streamAuthorityInfo = redisCatchStorage.getStreamAuthorityInfo(app, stream); - if (streamAuthorityInfo == null) { - streamAuthorityInfo = StreamAuthorityInfo.getInstanceByHook(item); + if (item.getOriginType() == OriginType.RTMP_PUSH.ordinal() + || item.getOriginType() == OriginType.RTSP_PUSH.ordinal() + || item.getOriginType() == OriginType.RTC_PUSH.ordinal()) { + if (regist) { + StreamAuthorityInfo streamAuthorityInfo = redisCatchStorage.getStreamAuthorityInfo(app, stream); + if (streamAuthorityInfo == null) { + streamAuthorityInfo = StreamAuthorityInfo.getInstanceByHook(item); + }else { + streamAuthorityInfo.setOriginType(item.getOriginType()); + streamAuthorityInfo.setOriginTypeStr(item.getOriginTypeStr()); + } + redisCatchStorage.updateStreamAuthorityInfo(app, stream, streamAuthorityInfo); }else { - streamAuthorityInfo.setOriginType(item.getOriginType()); - streamAuthorityInfo.setOriginTypeStr(item.getOriginTypeStr()); + redisCatchStorage.removeStreamAuthorityInfo(app, stream); } - redisCatchStorage.updateStreamAuthorityInfo(app, stream, streamAuthorityInfo); - }else { - redisCatchStorage.removeStreamAuthorityInfo(app, stream); } + if ("rtsp".equals(schema)){ logger.info("on_stream_changed锛氭敞鍐�->{}, app->{}, stream->{}", regist, app, stream); if (regist) { diff --git a/src/main/java/com/genersoft/iot/vmp/service/IPlatformService.java b/src/main/java/com/genersoft/iot/vmp/service/IPlatformService.java new file mode 100644 index 0000000..b5f3c5b --- /dev/null +++ b/src/main/java/com/genersoft/iot/vmp/service/IPlatformService.java @@ -0,0 +1,45 @@ +package com.genersoft.iot.vmp.service; + +import com.genersoft.iot.vmp.gb28181.bean.ParentPlatform; +import com.github.pagehelper.PageInfo; + +/** + * 鍥芥爣骞冲彴鐨勪笟鍔$被 + * @author lin + */ +public interface IPlatformService { + + ParentPlatform queryPlatformByServerGBId(String platformGbId); + + /** + * 鍒嗛〉鑾峰彇涓婄骇骞冲彴 + * @param page + * @param count + * @return + */ + PageInfo<ParentPlatform> queryParentPlatformList(int page, int count); + + /** + * 娣诲姞绾ц仈骞冲彴 + * @param parentPlatform 绾ц仈骞冲彴 + */ + boolean add(ParentPlatform parentPlatform); + + /** + * 骞冲彴涓婄嚎 + * @param parentPlatform 骞冲彴淇℃伅 + */ + void online(ParentPlatform parentPlatform); + + /** + * 骞冲彴绂荤嚎 + * @param parentPlatform 骞冲彴淇℃伅 + */ + void offline(ParentPlatform parentPlatform); + + /** + * 鍚戜笂绾у钩鍙板彂璧锋敞鍐� + * @param parentPlatform + */ + void login(ParentPlatform parentPlatform); +} diff --git a/src/main/java/com/genersoft/iot/vmp/service/impl/MediaServerServiceImpl.java b/src/main/java/com/genersoft/iot/vmp/service/impl/MediaServerServiceImpl.java index d923755..37aeca0 100644 --- a/src/main/java/com/genersoft/iot/vmp/service/impl/MediaServerServiceImpl.java +++ b/src/main/java/com/genersoft/iot/vmp/service/impl/MediaServerServiceImpl.java @@ -513,10 +513,7 @@ mediaServerItem.getId(), mediaServerItem.getIp(), mediaServerItem.getHttpPort()); String protocol = sslEnabled ? "https" : "http"; String hookPrex = String.format("%s://%s:%s/index/hook", protocol, mediaServerItem.getHookIp(), serverPort); - String recordHookPrex = null; - if (mediaServerItem.getRecordAssistPort() != 0) { - recordHookPrex = String.format("http://127.0.0.1:%s/api/record", mediaServerItem.getRecordAssistPort()); - } + Map<String, Object> param = new HashMap<>(); param.put("api.secret",mediaServerItem.getSecret()); // -profile:v Baseline param.put("ffmpeg.cmd","%s -fflags nobuffer -i %s -c:a aac -strict -2 -ar 44100 -ab 48k -c:v libx264 -f flv %s"); @@ -525,7 +522,6 @@ param.put("hook.on_play",String.format("%s/on_play", hookPrex)); param.put("hook.on_http_access",String.format("%s/on_http_access", hookPrex)); param.put("hook.on_publish", String.format("%s/on_publish", hookPrex)); - param.put("hook.on_record_mp4",recordHookPrex != null? String.format("%s/on_record_mp4", recordHookPrex): ""); param.put("hook.on_record_ts",String.format("%s/on_record_ts", hookPrex)); param.put("hook.on_rtsp_auth",String.format("%s/on_rtsp_auth", hookPrex)); param.put("hook.on_rtsp_realm",String.format("%s/on_rtsp_realm", hookPrex)); @@ -535,6 +531,11 @@ param.put("hook.on_stream_none_reader",String.format("%s/on_stream_none_reader", hookPrex)); param.put("hook.on_stream_not_found",String.format("%s/on_stream_not_found", hookPrex)); param.put("hook.on_server_keepalive",String.format("%s/on_server_keepalive", hookPrex)); + if (mediaServerItem.getRecordAssistPort() > 0) { + param.put("hook.on_record_mp4",String.format("http://127.0.0.1:%s/api/record/on_record_mp4", mediaServerItem.getRecordAssistPort())); + }else { + param.put("hook.on_record_mp4",""); + } param.put("hook.timeoutSec","20"); param.put("general.streamNoneReaderDelayMS",mediaServerItem.getStreamNoneReaderDelayMS()==-1?"3600000":mediaServerItem.getStreamNoneReaderDelayMS() ); // 鎺ㄦ祦鏂紑鍚庡彲浠ュ湪瓒呮椂鏃堕棿鍐呴噸鏂拌繛鎺ヤ笂缁х画鎺ㄦ祦锛岃繖鏍锋挱鏀惧櫒浼氭帴鐫�鎾斁銆� @@ -544,7 +545,7 @@ param.put("general.continue_push_ms", "3000" ); // 鏈�澶氱瓑寰呮湭鍒濆鍖栫殑Track鏃堕棿锛屽崟浣嶆绉掞紝瓒呮椂涔嬪悗浼氬拷鐣ユ湭鍒濆鍖栫殑Track, 璁剧疆姝ら�夐」浼樺寲閭d簺闊抽閿欒鐨勪笉瑙勮寖娴侊紝 // 绛墇lm鏀寔缁欐瘡涓猺tpServer璁剧疆鍏抽棴闊抽鐨勬椂鍊欏彲浠ヤ笉璁剧疆姝ら�夐」 - param.put("general.wait_track_ready_ms", "3000" ); +// param.put("general.wait_track_ready_ms", "3000" ); if (mediaServerItem.isRtpEnable() && !ObjectUtils.isEmpty(mediaServerItem.getRtpPortRange())) { param.put("rtp_proxy.port_range", mediaServerItem.getRtpPortRange().replace(",", "-")); } diff --git a/src/main/java/com/genersoft/iot/vmp/service/impl/PlatformServiceImpl.java b/src/main/java/com/genersoft/iot/vmp/service/impl/PlatformServiceImpl.java new file mode 100644 index 0000000..3a5d19a --- /dev/null +++ b/src/main/java/com/genersoft/iot/vmp/service/impl/PlatformServiceImpl.java @@ -0,0 +1,232 @@ +package com.genersoft.iot.vmp.service.impl; + +import com.genersoft.iot.vmp.conf.DynamicTask; +import com.genersoft.iot.vmp.gb28181.bean.ParentPlatform; +import com.genersoft.iot.vmp.gb28181.bean.ParentPlatformCatch; +import com.genersoft.iot.vmp.gb28181.bean.SendRtpItem; +import com.genersoft.iot.vmp.gb28181.bean.SubscribeHolder; +import com.genersoft.iot.vmp.gb28181.event.SipSubscribe; +import com.genersoft.iot.vmp.gb28181.transmit.cmd.impl.SIPCommanderFroPlatform; +import com.genersoft.iot.vmp.media.zlm.ZLMRTPServerFactory; +import com.genersoft.iot.vmp.media.zlm.dto.MediaServerItem; +import com.genersoft.iot.vmp.service.IMediaServerService; +import com.genersoft.iot.vmp.service.IPlatformService; +import com.genersoft.iot.vmp.storager.IRedisCatchStorage; +import com.genersoft.iot.vmp.storager.dao.ParentPlatformMapper; +import com.github.pagehelper.PageHelper; +import com.github.pagehelper.PageInfo; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import javax.sip.TimeoutEvent; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * @author lin + */ +@Service +public class PlatformServiceImpl implements IPlatformService { + + private final static String REGISTER_KEY_PREFIX = "platform_register_"; + private final static String KEEPALIVE_KEY_PREFIX = "platform_keepalive_"; + + private final static Logger logger = LoggerFactory.getLogger(PlatformServiceImpl.class); + + @Autowired + private ParentPlatformMapper platformMapper; + + @Autowired + private IRedisCatchStorage redisCatchStorage; + + @Autowired + private IMediaServerService mediaServerService; + + @Autowired + private SIPCommanderFroPlatform commanderForPlatform; + + @Autowired + private DynamicTask dynamicTask; + + @Autowired + private ZLMRTPServerFactory zlmrtpServerFactory; + + @Autowired + private SubscribeHolder subscribeHolder; + + + + @Override + public ParentPlatform queryPlatformByServerGBId(String platformGbId) { + return platformMapper.getParentPlatByServerGBId(platformGbId); + } + + @Override + public PageInfo<ParentPlatform> queryParentPlatformList(int page, int count) { + PageHelper.startPage(page, count); + List<ParentPlatform> all = platformMapper.getParentPlatformList(); + return new PageInfo<>(all); + } + + @Override + public boolean add(ParentPlatform parentPlatform) { + + if (parentPlatform.getCatalogGroup() == 0) { + // 姣忔鍙戦�佺洰褰曠殑鏁伴噺榛樿涓�1 + parentPlatform.setCatalogGroup(1); + } + if (parentPlatform.getAdministrativeDivision() == null) { + // 琛屾斂鍖哄垝榛樿鍘荤紪鍙风殑鍓�6浣� + parentPlatform.setAdministrativeDivision(parentPlatform.getServerGBId().substring(0,6)); + } + parentPlatform.setCatalogId(parentPlatform.getDeviceGBId()); + int result = platformMapper.addParentPlatform(parentPlatform); + // 娣诲姞缂撳瓨 + ParentPlatformCatch parentPlatformCatch = new ParentPlatformCatch(); + parentPlatformCatch.setParentPlatform(parentPlatform); + parentPlatformCatch.setId(parentPlatform.getServerGBId()); + parentPlatformCatch.setParentPlatform(parentPlatform); + redisCatchStorage.updatePlatformCatchInfo(parentPlatformCatch); + if (parentPlatform.isEnable()) { + // 淇濆瓨鏃跺惎鐢ㄥ氨鍙戦�佹敞鍐� + // 娉ㄥ唽鎴愬姛鏃剁敱绋嬪簭鐩存帴璋冪敤浜唎nline鏂规硶 + commanderForPlatform.register(parentPlatform, eventResult -> { + logger.info("[鍥芥爣绾ц仈] {},娣诲姞鍚戜笂绾ф敞鍐屽け璐ワ紝璇风‘瀹氫笂绾у钩鍙板彲鐢ㄦ椂閲嶆柊淇濆瓨", parentPlatform.getServerGBId()); + }, null); + } + return result > 0; + } + + @Override + public void online(ParentPlatform parentPlatform) { + logger.info("[鍥芥爣绾ц仈]锛歿}, 骞冲彴涓婄嚎", parentPlatform.getServerGBId()); + platformMapper.updateParentPlatformStatus(parentPlatform.getServerGBId(), true); + ParentPlatformCatch parentPlatformCatch = redisCatchStorage.queryPlatformCatchInfo(parentPlatform.getServerGBId()); + if (parentPlatformCatch != null) { + parentPlatformCatch.getParentPlatform().setStatus(true); + redisCatchStorage.updatePlatformCatchInfo(parentPlatformCatch); + }else { + parentPlatformCatch = new ParentPlatformCatch(); + parentPlatformCatch.setParentPlatform(parentPlatform); + parentPlatformCatch.setId(parentPlatform.getServerGBId()); + parentPlatform.setStatus(true); + parentPlatformCatch.setParentPlatform(parentPlatform); + redisCatchStorage.updatePlatformCatchInfo(parentPlatformCatch); + } + + final String registerTaskKey = REGISTER_KEY_PREFIX + parentPlatform.getServerGBId(); + if (dynamicTask.contains(registerTaskKey)) { + dynamicTask.stop(registerTaskKey); + } + // 娣诲姞娉ㄥ唽浠诲姟 + dynamicTask.startDelay(registerTaskKey, + // 娉ㄥ唽澶辫触锛堟敞鍐屾垚鍔熸椂鐢辩▼搴忕洿鎺ヨ皟鐢ㄤ簡online鏂规硶锛� + ()->commanderForPlatform.register(parentPlatform, eventResult -> offline(parentPlatform),null), + parentPlatform.getExpires()*1000); + + final String keepaliveTaskKey = KEEPALIVE_KEY_PREFIX + parentPlatform.getServerGBId(); + if (!dynamicTask.contains(keepaliveTaskKey)) { + // 娣诲姞蹇冭烦浠诲姟 + dynamicTask.startCron(keepaliveTaskKey, + ()-> commanderForPlatform.keepalive(parentPlatform, eventResult -> { + // 蹇冭烦澶辫触 + if (eventResult.type == SipSubscribe.EventResultType.timeout) { + // 蹇冭烦瓒呮椂 + ParentPlatformCatch platformCatch = redisCatchStorage.queryPlatformCatchInfo(parentPlatform.getServerGBId()); + // 姝ゆ椂鏄涓夋蹇冭烦瓒呮椂锛� 骞冲彴绂荤嚎 + if (platformCatch.getKeepAliveReply() == 2) { + // 璁剧疆骞冲彴绂荤嚎锛屽苟閲嶆柊娉ㄥ唽 + offline(parentPlatform); + logger.info("[鍥芥爣绾ц仈] {}锛屼笁娆″績璺宠秴鏃跺悗鍐嶆鍙戣捣娉ㄥ唽", parentPlatform.getServerGBId()); + commanderForPlatform.register(parentPlatform, eventResult1 -> { + logger.info("[鍥芥爣绾ц仈] {}锛屼笁娆″績璺宠秴鏃跺悗鍐嶆鍙戣捣娉ㄥ唽浠嶇劧澶辫触锛屽紑濮嬪畾鏃跺彂璧锋敞鍐岋紝闂撮殧涓�1鍒嗛挓", parentPlatform.getServerGBId()); + // 娣诲姞娉ㄥ唽浠诲姟 + dynamicTask.startCron(registerTaskKey, + // 娉ㄥ唽澶辫触锛堟敞鍐屾垚鍔熸椂鐢辩▼搴忕洿鎺ヨ皟鐢ㄤ簡online鏂规硶锛� + ()->logger.info("[鍥芥爣绾ц仈] {},骞冲彴绂荤嚎鍚庢寔缁彂璧锋敞鍐岋紝澶辫触", parentPlatform.getServerGBId()), + 60*1000); + }, null); + } + + }else { + logger.warn("[鍥芥爣绾ц仈]鍙戦�佸績璺虫敹鍒伴敊璇紝code锛� {}, msg: {}", eventResult.statusCode, eventResult.msg); + } + + }, eventResult -> { + // 蹇冭烦鎴愬姛 + // 娓呯┖涔嬪墠鐨勫績璺宠秴鏃惰鏁� + ParentPlatformCatch platformCatch = redisCatchStorage.queryPlatformCatchInfo(parentPlatform.getServerGBId()); + if (platformCatch.getKeepAliveReply() > 0) { + platformCatch.setKeepAliveReply(0); + redisCatchStorage.updatePlatformCatchInfo(platformCatch); + } + }), + parentPlatform.getExpires()*1000); + } + } + + @Override + public void offline(ParentPlatform parentPlatform) { + logger.info("[骞冲彴绂荤嚎]锛歿}", parentPlatform.getServerGBId()); + ParentPlatformCatch parentPlatformCatch = redisCatchStorage.queryPlatformCatchInfo(parentPlatform.getServerGBId()); + parentPlatformCatch.setKeepAliveReply(0); + parentPlatformCatch.setRegisterAliveReply(0); + ParentPlatform parentPlatformInCatch = parentPlatformCatch.getParentPlatform(); + parentPlatformInCatch.setStatus(false); + parentPlatformCatch.setParentPlatform(parentPlatformInCatch); + redisCatchStorage.updatePlatformCatchInfo(parentPlatformCatch); + platformMapper.updateParentPlatformStatus(parentPlatform.getServerGBId(), false); + + // 鍋滄鎵�鏈夋帹娴� + logger.info("[骞冲彴绂荤嚎] {}, 鍋滄鎵�鏈夋帹娴�", parentPlatform.getServerGBId()); + stopAllPush(parentPlatform.getServerGBId()); + // 娓呴櫎娉ㄥ唽瀹氭椂 + logger.info("[骞冲彴绂荤嚎] {}, 鍋滄瀹氭椂娉ㄥ唽浠诲姟", parentPlatform.getServerGBId()); + final String registerTaskKey = REGISTER_KEY_PREFIX + parentPlatform.getServerGBId(); + if (dynamicTask.contains(registerTaskKey)) { + dynamicTask.stop(registerTaskKey); + } + // 娓呴櫎蹇冭烦瀹氭椂 + logger.info("[骞冲彴绂荤嚎] {}, 鍋滄瀹氭椂鍙戦�佸績璺充换鍔�", parentPlatform.getServerGBId()); + final String keepaliveTaskKey = KEEPALIVE_KEY_PREFIX + parentPlatform.getServerGBId(); + if (dynamicTask.contains(keepaliveTaskKey)) { + // 娣诲姞蹇冭烦浠诲姟 + dynamicTask.stop(keepaliveTaskKey); + } + // 鍋滄鐩綍璁㈤槄鍥炲 + logger.info("[骞冲彴绂荤嚎] {}, 鍋滄璁㈤槄鍥炲", parentPlatform.getServerGBId()); + subscribeHolder.removeAllSubscribe(parentPlatform.getServerGBId()); + } + + private void stopAllPush(String platformId) { + List<SendRtpItem> sendRtpItems = redisCatchStorage.querySendRTPServer(platformId); + if (sendRtpItems != null && sendRtpItems.size() > 0) { + for (SendRtpItem sendRtpItem : sendRtpItems) { + redisCatchStorage.deleteSendRTPServer(platformId, sendRtpItem.getChannelId(), null, null); + MediaServerItem mediaInfo = mediaServerService.getOne(sendRtpItem.getMediaServerId()); + Map<String, Object> param = new HashMap<>(3); + param.put("vhost", "__defaultVhost__"); + param.put("app", sendRtpItem.getApp()); + param.put("stream", sendRtpItem.getStreamId()); + zlmrtpServerFactory.stopSendRtpStream(mediaInfo, param); + } + + } + } + + @Override + public void login(ParentPlatform parentPlatform) { + final String registerTaskKey = REGISTER_KEY_PREFIX + parentPlatform.getServerGBId(); + commanderForPlatform.register(parentPlatform, eventResult1 -> { + logger.info("[鍥芥爣绾ц仈] {}锛屽紑濮嬪畾鏃跺彂璧锋敞鍐岋紝闂撮殧涓�1鍒嗛挓", parentPlatform.getServerGBId()); + // 娣诲姞娉ㄥ唽浠诲姟 + dynamicTask.startCron(registerTaskKey, + // 娉ㄥ唽澶辫触锛堟敞鍐屾垚鍔熸椂鐢辩▼搴忕洿鎺ヨ皟鐢ㄤ簡online鏂规硶锛� + ()->logger.info("[鍥芥爣绾ц仈] {},骞冲彴绂荤嚎鍚庢寔缁彂璧锋敞鍐岋紝澶辫触", parentPlatform.getServerGBId()), + 60*1000); + }, null); + } +} 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 e00eb55..dc62b07 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 @@ -575,7 +575,7 @@ logger.warn("鏌ヨ褰曞儚淇℃伅鏃跺彂鐜拌妭鐐瑰凡绂荤嚎"); return null; } - if (mediaServerItem.getRecordAssistPort() != 0) { + if (mediaServerItem.getRecordAssistPort() > 0) { JSONObject jsonObject = assistRESTfulUtils.fileDuration(mediaServerItem, streamInfo.getApp(), streamInfo.getStream(), null); if (jsonObject != null && jsonObject.getInteger("code") == 0) { long duration = jsonObject.getLong("data"); @@ -691,7 +691,7 @@ // for (SendRtpItem sendRtpItem : sendRtpItems) { // if (sendRtpItem.getMediaServerId().equals(mediaServerId)) { // if (mediaListMap.get(sendRtpItem.getStreamId()) == null) { -// ParentPlatform platform = storager.queryParentPlatByServerGBId(sendRtpItem.getPlatformId()); +// ParentPlatform platform = storager.queryPlatformByServerGBId(sendRtpItem.getPlatformId()); // sipCommanderFroPlatform.streamByeCmd(platform, sendRtpItem.getCallId()); // } // } 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 b3bb89c..1f467e4 100644 --- a/src/main/java/com/genersoft/iot/vmp/storager/IRedisCatchStorage.java +++ b/src/main/java/com/genersoft/iot/vmp/storager/IRedisCatchStorage.java @@ -8,6 +8,7 @@ import com.genersoft.iot.vmp.service.bean.MessageForPushChannel; import com.genersoft.iot.vmp.service.bean.SSRCInfo; import com.genersoft.iot.vmp.service.bean.ThirdPartyGB; +import com.genersoft.iot.vmp.storager.dao.dto.PlatformRegisterInfo; import java.util.List; import java.util.Map; @@ -61,17 +62,13 @@ void delPlatformCatchInfo(String platformGbId); - void updatePlatformKeepalive(ParentPlatform parentPlatform); - void delPlatformKeepalive(String platformGbId); - - void updatePlatformRegister(ParentPlatform parentPlatform); void delPlatformRegister(String platformGbId); - void updatePlatformRegisterInfo(String callId, String platformGbId); + void updatePlatformRegisterInfo(String callId, PlatformRegisterInfo platformRegisterInfo); - String queryPlatformRegisterInfo(String callId); + PlatformRegisterInfo queryPlatformRegisterInfo(String callId); void delPlatformRegisterInfo(String callId); diff --git a/src/main/java/com/genersoft/iot/vmp/storager/IVideoManagerStorage.java b/src/main/java/com/genersoft/iot/vmp/storager/IVideoManagerStorage.java index b2c1e1b..b65cc68 100644 --- a/src/main/java/com/genersoft/iot/vmp/storager/IVideoManagerStorage.java +++ b/src/main/java/com/genersoft/iot/vmp/storager/IVideoManagerStorage.java @@ -170,15 +170,6 @@ */ boolean deleteParentPlatform(ParentPlatform parentPlatform); - - /** - * 鍒嗛〉鑾峰彇涓婄骇骞冲彴 - * @param page - * @param count - * @return - */ - PageInfo<ParentPlatform> queryParentPlatformList(int page, int count); - /** * 鑾峰彇鎵�鏈夊凡鍚敤鐨勫钩鍙� * @return diff --git a/src/main/java/com/genersoft/iot/vmp/storager/dao/dto/PlatformRegisterInfo.java b/src/main/java/com/genersoft/iot/vmp/storager/dao/dto/PlatformRegisterInfo.java new file mode 100644 index 0000000..16f6636 --- /dev/null +++ b/src/main/java/com/genersoft/iot/vmp/storager/dao/dto/PlatformRegisterInfo.java @@ -0,0 +1,41 @@ +package com.genersoft.iot.vmp.storager.dao.dto; + +/** + * 骞冲彴鍙戦�佹敞鍐�/娉ㄩ攢娑堟伅鏃剁紦瀛樻娑堟伅 + * @author lin + */ +public class PlatformRegisterInfo { + + /** + * 骞冲彴Id + */ + private String platformId; + + /** + * 鏄惁鏃舵敞鍐岋紝false涓烘敞閿� + */ + private boolean register; + + public static PlatformRegisterInfo getInstance(String platformId, boolean register) { + PlatformRegisterInfo platformRegisterInfo = new PlatformRegisterInfo(); + platformRegisterInfo.setPlatformId(platformId); + platformRegisterInfo.setRegister(register); + return platformRegisterInfo; + } + + public String getPlatformId() { + return platformId; + } + + public void setPlatformId(String platformId) { + this.platformId = platformId; + } + + public boolean isRegister() { + return register; + } + + public void setRegister(boolean register) { + this.register = register; + } +} 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 14a369c..ecefe73 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 @@ -16,6 +16,7 @@ import com.genersoft.iot.vmp.service.bean.ThirdPartyGB; import com.genersoft.iot.vmp.storager.IRedisCatchStorage; import com.genersoft.iot.vmp.storager.dao.DeviceChannelMapper; +import com.genersoft.iot.vmp.storager.dao.dto.PlatformRegisterInfo; import com.genersoft.iot.vmp.utils.DateUtil; import com.genersoft.iot.vmp.utils.redis.RedisUtil; import org.slf4j.Logger; @@ -291,18 +292,6 @@ } @Override - public void updatePlatformKeepalive(ParentPlatform parentPlatform) { - String key = VideoManagerConstants.PLATFORM_KEEPALIVE_PREFIX + userSetting.getServerId() + "_" + parentPlatform.getServerGBId(); - RedisUtil.set(key, "", Integer.parseInt(parentPlatform.getKeepTimeout())); - } - - @Override - public void updatePlatformRegister(ParentPlatform parentPlatform) { - String key = VideoManagerConstants.PLATFORM_REGISTER_PREFIX + userSetting.getServerId() + "_" + parentPlatform.getServerGBId(); - RedisUtil.set(key, "", Integer.parseInt(parentPlatform.getExpires())); - } - - @Override public ParentPlatformCatch queryPlatformCatchInfo(String platformGbId) { return (ParentPlatformCatch)RedisUtil.get(VideoManagerConstants.PLATFORM_CATCH_PREFIX + userSetting.getServerId() + "_" + platformGbId); } @@ -324,15 +313,15 @@ @Override - public void updatePlatformRegisterInfo(String callId, String platformGbId) { + public void updatePlatformRegisterInfo(String callId, PlatformRegisterInfo platformRegisterInfo) { String key = VideoManagerConstants.PLATFORM_REGISTER_INFO_PREFIX + userSetting.getServerId() + "_" + callId; - RedisUtil.set(key, platformGbId, 30); + RedisUtil.set(key, platformRegisterInfo, 30); } @Override - public String queryPlatformRegisterInfo(String callId) { - return (String)RedisUtil.get(VideoManagerConstants.PLATFORM_REGISTER_INFO_PREFIX + userSetting.getServerId() + "_" + callId); + public PlatformRegisterInfo queryPlatformRegisterInfo(String callId) { + return (PlatformRegisterInfo)RedisUtil.get(VideoManagerConstants.PLATFORM_REGISTER_INFO_PREFIX + userSetting.getServerId() + "_" + callId); } @Override 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 0ec9dbc..e8e0e02 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 @@ -458,13 +458,6 @@ } @Override - public PageInfo<ParentPlatform> queryParentPlatformList(int page, int count) { - PageHelper.startPage(page, count); - List<ParentPlatform> all = platformMapper.getParentPlatformList(); - return new PageInfo<>(all); - } - - @Override public ParentPlatform queryParentPlatByServerGBId(String platformGbId) { return platformMapper.getParentPlatByServerGBId(platformGbId); } diff --git a/src/main/java/com/genersoft/iot/vmp/utils/redis/RedisUtil.java b/src/main/java/com/genersoft/iot/vmp/utils/redis/RedisUtil.java index 0034c39..749dddd 100644 --- a/src/main/java/com/genersoft/iot/vmp/utils/redis/RedisUtil.java +++ b/src/main/java/com/genersoft/iot/vmp/utils/redis/RedisUtil.java @@ -5,6 +5,7 @@ import com.alibaba.fastjson.JSONObject; import com.genersoft.iot.vmp.utils.SpringBeanFactory; +import gov.nist.javax.sip.stack.UDPMessageChannel; import org.springframework.data.redis.core.*; import org.springframework.util.CollectionUtils; 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 2a40330..bf42189 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 @@ -9,14 +9,13 @@ import com.genersoft.iot.vmp.gb28181.bean.ParentPlatform; import com.genersoft.iot.vmp.gb28181.bean.PlatformCatalog; import com.genersoft.iot.vmp.gb28181.bean.SubscribeHolder; -import com.genersoft.iot.vmp.gb28181.bean.TreeType; import com.genersoft.iot.vmp.gb28181.transmit.cmd.ISIPCommanderForPlatform; import com.genersoft.iot.vmp.service.IPlatformChannelService; +import com.genersoft.iot.vmp.service.IPlatformService; import com.genersoft.iot.vmp.storager.IRedisCatchStorage; import com.genersoft.iot.vmp.storager.IVideoManagerStorage; import com.genersoft.iot.vmp.utils.DateUtil; import com.genersoft.iot.vmp.vmanager.bean.ErrorCode; -import com.genersoft.iot.vmp.vmanager.bean.WVPResult; import com.genersoft.iot.vmp.vmanager.gb28181.platform.bean.ChannelReduce; import com.genersoft.iot.vmp.vmanager.gb28181.platform.bean.UpdateChannelParam; import com.github.pagehelper.PageInfo; @@ -26,10 +25,7 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.http.HttpStatus; -import org.springframework.http.ResponseEntity; import org.springframework.util.ObjectUtils; -import org.springframework.util.StringUtils; import org.springframework.web.bind.annotation.*; import com.genersoft.iot.vmp.conf.SipConfig; @@ -70,6 +66,9 @@ @Autowired private DynamicTask dynamicTask; + @Autowired + private IPlatformService platformService; + /** * 鑾峰彇鍥芥爣鏈嶅姟鐨勯厤缃� * @@ -95,8 +94,7 @@ @Parameter(name = "id", description = "骞冲彴鍥芥爣缂栧彿", required = true) @GetMapping("/info/{id}") public ParentPlatform getPlatform(@PathVariable String id) { - ParentPlatform parentPlatform = storager.queryParentPlatByServerGBId(id); - WVPResult<ParentPlatform> wvpResult = new WVPResult<>(); + ParentPlatform parentPlatform = platformService.queryPlatformByServerGBId(id); if (parentPlatform != null) { return parentPlatform; } else { @@ -117,7 +115,7 @@ @Parameter(name = "count", description = "姣忛〉鏉℃暟", required = true) public PageInfo<ParentPlatform> platforms(@PathVariable int page, @PathVariable int count) { - PageInfo<ParentPlatform> parentPlatformPageInfo = storager.queryParentPlatformList(page, count); + PageInfo<ParentPlatform> parentPlatformPageInfo = platformService.queryParentPlatformList(page, count); if (parentPlatformPageInfo.getList().size() > 0) { for (ParentPlatform platform : parentPlatformPageInfo.getList()) { platform.setMobilePositionSubscribe(subscribeHolder.getMobilePositionSubscribe(platform.getServerGBId()) != null); @@ -136,7 +134,7 @@ @Operation(summary = "娣诲姞涓婄骇骞冲彴淇℃伅") @PostMapping("/add") @ResponseBody - public String addPlatform(@RequestBody ParentPlatform parentPlatform) { + public void addPlatform(@RequestBody ParentPlatform parentPlatform) { if (logger.isDebugEnabled()) { logger.debug("淇濆瓨涓婄骇骞冲彴淇℃伅API璋冪敤"); @@ -158,33 +156,16 @@ throw new ControllerException(ErrorCode.ERROR400.getCode(), "error severPort"); } + ParentPlatform parentPlatformOld = storager.queryParentPlatByServerGBId(parentPlatform.getServerGBId()); if (parentPlatformOld != null) { throw new ControllerException(ErrorCode.ERROR100.getCode(), "骞冲彴 " + parentPlatform.getServerGBId() + " 宸插瓨鍦�"); } parentPlatform.setCreateTime(DateUtil.getNow()); parentPlatform.setUpdateTime(DateUtil.getNow()); - boolean updateResult = storager.updateParentPlatform(parentPlatform); + boolean updateResult = platformService.add(parentPlatform); - if (updateResult) { - // 淇濆瓨鏃跺惎鐢ㄥ氨鍙戦�佹敞鍐� - if (parentPlatform.isEnable()) { - if (parentPlatformOld != null && parentPlatformOld.isStatus()) { - commanderForPlatform.unregister(parentPlatformOld, null, eventResult -> { - // 鍙淇濆瓨灏卞彂閫佹敞鍐� - commanderForPlatform.register(parentPlatform, null, null); - }); - } else { - // 鍙淇濆瓨灏卞彂閫佹敞鍐� - commanderForPlatform.register(parentPlatform, null, null); - } - - } else if (parentPlatformOld != null && parentPlatformOld.isEnable()) { - // 鍏抽棴鍚敤鏃舵敞閿� - commanderForPlatform.unregister(parentPlatform, null, null); - } - return null; - } else { + if (!updateResult) { throw new ControllerException(ErrorCode.ERROR100.getCode(),"鍐欏叆鏁版嵁搴撳け璐�"); } } diff --git a/src/main/resources/all-application.yml b/src/main/resources/all-application.yml index 6679c0d..222c076 100644 --- a/src/main/resources/all-application.yml +++ b/src/main/resources/all-application.yml @@ -179,8 +179,6 @@ platform-play-timeout: 60000 # 鏄惁寮�鍚帴鍙i壌鏉� interface-authentication: true - # 鑷姩閰嶇疆redis 鍙互杩囨湡浜嬩欢 - redis-config: true # 鎺ュ彛閴存潈渚嬪鐨勬帴鍙�, 鍗充笉杩涜鎺ュ彛閴存潈鐨勬帴鍙�,灏介噺璇︾粏涔﹀啓锛屽敖閲忎笉鐢�/**锛岃嚦灏戜袱绾х洰褰� interface-authentication-excludes: - /api/v1/** diff --git a/web_src/src/components/dialog/MediaServerEdit.vue b/web_src/src/components/dialog/MediaServerEdit.vue index 7206bac..1754461 100644 --- a/web_src/src/components/dialog/MediaServerEdit.vue +++ b/web_src/src/components/dialog/MediaServerEdit.vue @@ -357,7 +357,7 @@ var result = false; var that = this; await that.$axios({ - method: 'post', + method: 'get', url:`/api/platform/exit/${deviceGbId}` }).then(function (res) { result = res.data; diff --git a/web_src/src/components/dialog/StreamProxyEdit.vue b/web_src/src/components/dialog/StreamProxyEdit.vue index ac209db..936bc53 100644 --- a/web_src/src/components/dialog/StreamProxyEdit.vue +++ b/web_src/src/components/dialog/StreamProxyEdit.vue @@ -263,7 +263,7 @@ var result = false; var that = this; await that.$axios({ - method: 'post', + method: 'get', url:`/api/platform/exit/${deviceGbId}` }).then(function (res) { result = res.data; diff --git a/web_src/src/components/dialog/platformEdit.vue b/web_src/src/components/dialog/platformEdit.vue index 633160b..ef28b4c 100644 --- a/web_src/src/components/dialog/platformEdit.vue +++ b/web_src/src/components/dialog/platformEdit.vue @@ -327,7 +327,7 @@ var result = false; var that = this; await that.$axios({ - method: 'post', + method: 'get', url:`/api/platform/exit/${deviceGbId}`}) .then(function (res) { if (res.data.code === 0) { diff --git a/web_src/src/components/dialog/pushStreamEdit.vue b/web_src/src/components/dialog/pushStreamEdit.vue index 8c827a3..de4e7bc 100644 --- a/web_src/src/components/dialog/pushStreamEdit.vue +++ b/web_src/src/components/dialog/pushStreamEdit.vue @@ -158,7 +158,7 @@ var result = false; var that = this; await that.$axios({ - method:"post", + method:"get", url:`/api/platform/exit/${deviceGbId}` }).then(function (res) { result = res.data; -- Gitblit v1.8.0