From 241804f5f832c76d8855011ceea713eee4cbf15a Mon Sep 17 00:00:00 2001 From: 648540858 <648540858@qq.com> Date: Fri, 3 Dec 2021 16:13:46 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96redis=E5=AD=98=E5=82=A8?= =?UTF-8?q?=EF=BC=8Calarm=E9=BB=98=E8=AE=A4=E5=85=B3=E9=97=AD=E5=A4=84?= =?UTF-8?q?=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pom.xml | 5 + .../iot/vmp/common/VideoManagerConstants.java | 17 +- .../com/genersoft/iot/vmp/conf/SipConfig.java | 10 + .../genersoft/iot/vmp/conf/WVPTimerTask.java | 5 +- .../gb28181/event/DeviceOffLineDetector.java | 6 +- .../KeepaliveTimeoutListenerForPlatform.java | 19 +- .../offline/KeepliveTimeoutListener.java | 11 +- .../event/offline/OfflineEventListener.java | 6 +- .../event/online/OnlineEventListener.java | 7 +- .../PlatformNotRegisterEventLister.java | 12 +- .../session/VideoStreamSessionManager.java | 14 +- .../impl/MessageRequestProcessor1.java | 1104 ----------------- .../request/impl/NotifyRequestProcessor.java | 7 + .../notify/cmd/AlarmNotifyMessageHandler.java | 7 + .../service/impl/MediaServerServiceImpl.java | 43 +- .../iot/vmp/storager/IRedisCatchStorage.java | 2 +- .../storager/impl/RedisCatchStorageImpl.java | 80 +- src/main/resources/all-application.yml | 4 +- 18 files changed, 160 insertions(+), 1199 deletions(-) delete mode 100644 src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/MessageRequestProcessor1.java diff --git a/pom.xml b/pom.xml index 7a04892b..3336bb37 100644 --- a/pom.xml +++ b/pom.xml @@ -204,6 +204,11 @@ 1.12 + + org.springframework.session + spring-session-core + + diff --git a/src/main/java/com/genersoft/iot/vmp/common/VideoManagerConstants.java b/src/main/java/com/genersoft/iot/vmp/common/VideoManagerConstants.java index 386eb1ca..da58e107 100644 --- a/src/main/java/com/genersoft/iot/vmp/common/VideoManagerConstants.java +++ b/src/main/java/com/genersoft/iot/vmp/common/VideoManagerConstants.java @@ -14,7 +14,7 @@ public class VideoManagerConstants { public static final String MEDIA_SERVER_PREFIX = "VMP_MEDIA_SERVER_"; - public static final String MEDIA_SERVERS_ONLINE_PREFIX = "VMP_MEDIA_ONLINE_SERVERS"; + public static final String MEDIA_SERVERS_ONLINE_PREFIX = "VMP_MEDIA_ONLINE_SERVERS_"; public static final String MEDIA_STREAM_PREFIX = "VMP_MEDIA_STREAM"; @@ -22,14 +22,15 @@ public class VideoManagerConstants { public static final String CACHEKEY_PREFIX = "VMP_CHANNEL_"; - public static final String KEEPLIVEKEY_PREFIX = "VMP_keeplive_"; + public static final String KEEPLIVEKEY_PREFIX = "VMP_KEEPALIVE_"; + // 此处多了一个_,暂不修改 public static final String PLAYER_PREFIX = "VMP_PLAYER_"; - public static final String PLAY_BLACK_PREFIX = "VMP_PLAYBACK_"; + public static final String DOWNLOAD_PREFIX = "VMP_DOWNLOAD_"; - public static final String PLATFORM_KEEPLIVEKEY_PREFIX = "VMP_PLATFORM_KEEPLIVE_"; + public static final String PLATFORM_KEEPALIVE_PREFIX = "VMP_PLATFORM_KEEPALIVE_"; public static final String PLATFORM_CATCH_PREFIX = "VMP_PLATFORM_CATCH_"; @@ -39,8 +40,6 @@ public class VideoManagerConstants { public static final String PLATFORM_SEND_RTP_INFO_PREFIX = "VMP_PLATFORM_SEND_RTP_INFO_"; - public static final String Pattern_Topic = "VMP_KEEPLIVE_PLATFORM_"; - public static final String EVENT_ONLINE_REGISTER = "1"; public static final String EVENT_ONLINE_KEEPLIVE = "2"; @@ -51,10 +50,10 @@ public class VideoManagerConstants { public static final String EVENT_OUTLINE_TIMEOUT = "2"; - public static final String MEDIA_SSRC_USED_PREFIX = "VMP_media_used_ssrc_"; + public static final String MEDIA_SSRC_USED_PREFIX = "VMP_MEDIA_USED_SSRC_"; - public static final String MEDIA_TRANSACTION_USED_PREFIX = "VMP_media_transaction_"; + public static final String MEDIA_TRANSACTION_USED_PREFIX = "VMP_MEDIA_TRANSACTION_"; //************************** redis 消息********************************* - public static final String WVP_MSG_STREAM_PUSH_CHANGE_PREFIX = "WVP_MSG_STREAM_CHANGE_"; + public static final String WVP_MSG_STREAM_CHANGE__PREFIX = "WVP_MSG_STREAM_CHANGE_"; } diff --git a/src/main/java/com/genersoft/iot/vmp/conf/SipConfig.java b/src/main/java/com/genersoft/iot/vmp/conf/SipConfig.java index 2d307925..4c24d14a 100644 --- a/src/main/java/com/genersoft/iot/vmp/conf/SipConfig.java +++ b/src/main/java/com/genersoft/iot/vmp/conf/SipConfig.java @@ -29,6 +29,8 @@ public class SipConfig { Integer registerTimeInterval = 60; + private boolean alarm = false; + public void setIp(String ip) { this.ip = ip; } @@ -104,4 +106,12 @@ public class SipConfig { public Integer getRegisterTimeInterval() { return registerTimeInterval; } + + public boolean isAlarm() { + return alarm; + } + + public void setAlarm(boolean alarm) { + this.alarm = alarm; + } } diff --git a/src/main/java/com/genersoft/iot/vmp/conf/WVPTimerTask.java b/src/main/java/com/genersoft/iot/vmp/conf/WVPTimerTask.java index 3e72e29e..93e2b879 100644 --- a/src/main/java/com/genersoft/iot/vmp/conf/WVPTimerTask.java +++ b/src/main/java/com/genersoft/iot/vmp/conf/WVPTimerTask.java @@ -17,9 +17,6 @@ public class WVPTimerTask { @Autowired private IMediaServerService mediaServerService; - @Autowired - private UserSetup userSetup; - @Value("${server.port}") private int serverPort; @@ -31,6 +28,6 @@ public class WVPTimerTask { JSONObject jsonObject = new JSONObject(); jsonObject.put("ip", sipConfig.getIp()); jsonObject.put("port", serverPort); - redisCatchStorage.updateWVPInfo(userSetup.getServerId(), jsonObject, 3); + redisCatchStorage.updateWVPInfo(jsonObject, 3); } } 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 index e5b57c8b..ea2fa6c2 100644 --- a/src/main/java/com/genersoft/iot/vmp/gb28181/event/DeviceOffLineDetector.java +++ b/src/main/java/com/genersoft/iot/vmp/gb28181/event/DeviceOffLineDetector.java @@ -1,5 +1,6 @@ package com.genersoft.iot.vmp.gb28181.event; +import com.genersoft.iot.vmp.conf.UserSetup; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; @@ -16,9 +17,12 @@ public class DeviceOffLineDetector { @Autowired private RedisUtil redis; + + @Autowired + private UserSetup userSetup; public boolean isOnline(String deviceId) { - String key = VideoManagerConstants.KEEPLIVEKEY_PREFIX + deviceId; + String key = VideoManagerConstants.KEEPLIVEKEY_PREFIX + userSetup.getServerId() + "_" + deviceId; return redis.hasKey(key); } } 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 index 8363e581..d0850a8b 100644 --- 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 @@ -1,5 +1,6 @@ package com.genersoft.iot.vmp.gb28181.event.offline; +import com.genersoft.iot.vmp.conf.UserSetup; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -24,6 +25,9 @@ public class KeepaliveTimeoutListenerForPlatform extends KeyExpirationEventMessa @Autowired private EventPublisher publisher; + @Autowired + private UserSetup userSetup; + public KeepaliveTimeoutListenerForPlatform(RedisMessageListenerContainer listenerContainer) { super(listenerContainer); } @@ -40,17 +44,20 @@ public class KeepaliveTimeoutListenerForPlatform extends KeyExpirationEventMessa String expiredKey = message.toString(); logger.debug(expiredKey); // 平台心跳到期,需要重发, 判断是否已经多次未收到心跳回复, 多次未收到,则重新发起注册, 注册尝试多次未得到回复,则认为平台离线 - if (expiredKey.startsWith(VideoManagerConstants.PLATFORM_KEEPLIVEKEY_PREFIX)) { - String platformGBId = expiredKey.substring(VideoManagerConstants.PLATFORM_KEEPLIVEKEY_PREFIX.length(),expiredKey.length()); + String PLATFORM_KEEPLIVEKEY_PREFIX = VideoManagerConstants.PLATFORM_KEEPALIVE_PREFIX + userSetup.getServerId() + "_"; + String PLATFORM_REGISTER_PREFIX = VideoManagerConstants.PLATFORM_REGISTER_PREFIX + userSetup.getServerId() + "_"; + String KEEPLIVEKEY_PREFIX = VideoManagerConstants.KEEPLIVEKEY_PREFIX + userSetup.getServerId() + "_"; + if (expiredKey.startsWith(PLATFORM_KEEPLIVEKEY_PREFIX)) { + String platformGBId = expiredKey.substring(PLATFORM_KEEPLIVEKEY_PREFIX.length(),expiredKey.length()); publisher.platformKeepaliveExpireEventPublish(platformGBId); - }else if (expiredKey.startsWith(VideoManagerConstants.PLATFORM_REGISTER_PREFIX)) { - String platformGBId = expiredKey.substring(VideoManagerConstants.PLATFORM_REGISTER_PREFIX.length(),expiredKey.length()); + }else if (expiredKey.startsWith(PLATFORM_REGISTER_PREFIX)) { + String platformGBId = expiredKey.substring(PLATFORM_REGISTER_PREFIX.length(),expiredKey.length()); publisher.platformNotRegisterEventPublish(platformGBId); }else{ - String deviceId = expiredKey.substring(VideoManagerConstants.KEEPLIVEKEY_PREFIX.length(),expiredKey.length()); - publisher.outlineEventPublish(deviceId, VideoManagerConstants.EVENT_OUTLINE_TIMEOUT); + String deviceId = expiredKey.substring(KEEPLIVEKEY_PREFIX.length(),expiredKey.length()); + publisher.outlineEventPublish(deviceId, KEEPLIVEKEY_PREFIX); } } diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/event/offline/KeepliveTimeoutListener.java b/src/main/java/com/genersoft/iot/vmp/gb28181/event/offline/KeepliveTimeoutListener.java index db694cc2..de2b8294 100644 --- a/src/main/java/com/genersoft/iot/vmp/gb28181/event/offline/KeepliveTimeoutListener.java +++ b/src/main/java/com/genersoft/iot/vmp/gb28181/event/offline/KeepliveTimeoutListener.java @@ -1,5 +1,6 @@ package com.genersoft.iot.vmp.gb28181.event.offline; +import com.genersoft.iot.vmp.conf.UserSetup; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -24,6 +25,9 @@ public class KeepliveTimeoutListener extends KeyExpirationEventMessageListener { @Autowired private EventPublisher publisher; + @Autowired + private UserSetup userSetup; + public KeepliveTimeoutListener(RedisMessageListenerContainer listenerContainer) { super(listenerContainer); } @@ -37,12 +41,13 @@ public class KeepliveTimeoutListener extends KeyExpirationEventMessageListener { public void onMessage(Message message, byte[] pattern) { // 获取失效的key String expiredKey = message.toString(); - if(!expiredKey.startsWith(VideoManagerConstants.KEEPLIVEKEY_PREFIX)){ - logger.debug("收到redis过期监听,但开头不是"+VideoManagerConstants.KEEPLIVEKEY_PREFIX+",忽略"); + String KEEPLIVEKEY_PREFIX = VideoManagerConstants.KEEPLIVEKEY_PREFIX + userSetup.getServerId() + "_"; + if(!expiredKey.startsWith(KEEPLIVEKEY_PREFIX)){ + logger.debug("收到redis过期监听,但开头不是"+KEEPLIVEKEY_PREFIX+",忽略"); return; } - String deviceId = expiredKey.substring(VideoManagerConstants.KEEPLIVEKEY_PREFIX.length(),expiredKey.length()); + String deviceId = expiredKey.substring(KEEPLIVEKEY_PREFIX.length(),expiredKey.length()); publisher.outlineEventPublish(deviceId, VideoManagerConstants.EVENT_OUTLINE_TIMEOUT); } } diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/event/offline/OfflineEventListener.java b/src/main/java/com/genersoft/iot/vmp/gb28181/event/offline/OfflineEventListener.java index 4b401c76..0f5604c0 100644 --- a/src/main/java/com/genersoft/iot/vmp/gb28181/event/offline/OfflineEventListener.java +++ b/src/main/java/com/genersoft/iot/vmp/gb28181/event/offline/OfflineEventListener.java @@ -1,5 +1,6 @@ package com.genersoft.iot.vmp.gb28181.event.offline; +import com.genersoft.iot.vmp.conf.UserSetup; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -28,6 +29,9 @@ public class OfflineEventListener implements ApplicationListener { @Autowired private RedisUtil redis; + @Autowired + private UserSetup userSetup; + @Override public void onApplicationEvent(OfflineEvent event) { @@ -35,7 +39,7 @@ public class OfflineEventListener implements ApplicationListener { logger.debug("设备离线事件触发,deviceId:" + event.getDeviceId() + ",from:" + event.getFrom()); } - String key = VideoManagerConstants.KEEPLIVEKEY_PREFIX + event.getDeviceId(); + String key = VideoManagerConstants.KEEPLIVEKEY_PREFIX + userSetup.getServerId() + "_" + event.getDeviceId(); switch (event.getFrom()) { // 心跳超时触发的离线事件,说明redis中已删除,无需处理 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 b347891b..a62c76d5 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 @@ -1,7 +1,9 @@ package com.genersoft.iot.vmp.gb28181.event.online; import com.genersoft.iot.vmp.conf.SipConfig; +import com.genersoft.iot.vmp.conf.UserSetup; import com.genersoft.iot.vmp.gb28181.bean.Device; +import com.genersoft.iot.vmp.storager.dao.dto.User; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -35,6 +37,9 @@ public class OnlineEventListener implements ApplicationListener { @Autowired private SipConfig sipConfig; + @Autowired + private UserSetup userSetup; + private SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); @Override @@ -44,7 +49,7 @@ public class OnlineEventListener implements ApplicationListener { logger.debug("设备上线事件触发,deviceId:" + event.getDevice().getDeviceId() + ",from:" + event.getFrom()); } Device device = event.getDevice(); - String key = VideoManagerConstants.KEEPLIVEKEY_PREFIX + event.getDevice().getDeviceId(); + String key = VideoManagerConstants.KEEPLIVEKEY_PREFIX + userSetup.getServerId() + "_" + event.getDevice().getDeviceId(); switch (event.getFrom()) { // 注册时触发的在线事件,先在redis中增加超时超时监听 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 20950ca2..2ab2b239 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 @@ -52,18 +52,18 @@ public class PlatformNotRegisterEventLister implements ApplicationListener sendRtpItems = redisCatchStorage.querySendRTPServer(event.getPlatformGbID()); - logger.info("停止[ {} ]的所有推流size", sendRtpItems.size()); + logger.info("[ 平台未注册事件 ] 停止[ {} ]的所有推流size", sendRtpItems.size()); if (sendRtpItems != null && sendRtpItems.size() > 0) { - logger.info("停止[ {} ]的所有推流", event.getPlatformGbID()); + logger.info("[ 平台未注册事件 ] 停止[ {} ]的所有推流", event.getPlatformGbID()); StringBuilder app = new StringBuilder(); StringBuilder stream = new StringBuilder(); for (SendRtpItem sendRtpItem : sendRtpItems) { @@ -91,13 +91,13 @@ public class PlatformNotRegisterEventLister implements ApplicationListener{ timer.cancel(); }; - logger.info("向平台注册,平台国标ID:" + event.getPlatformGbID()); + logger.info("[平台注册]平台国标ID:" + event.getPlatformGbID()); sipCommanderFroPlatform.register(parentPlatform, null, okEvent); // 设置注册失败则每隔15秒发起一次注册 timer.schedule(new TimerTask() { @Override public void run() { - logger.info("再次向平台注册,平台国标ID:" + event.getPlatformGbID()); + logger.info("[平台注册]再次向平台注册,平台国标ID:" + event.getPlatformGbID()); sipCommanderFroPlatform.register(parentPlatform, null, okEvent); } }, config.getRegisterTimeInterval()* 1000, config.getRegisterTimeInterval()* 1000);//十五秒后再次发起注册 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 ea9aa369..d41b04da 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 @@ -7,6 +7,7 @@ import javax.sip.ClientTransaction; import javax.sip.Dialog; import com.genersoft.iot.vmp.common.VideoManagerConstants; +import com.genersoft.iot.vmp.conf.UserSetup; import com.genersoft.iot.vmp.gb28181.bean.SsrcTransaction; import com.genersoft.iot.vmp.utils.SerializeUtils; import com.genersoft.iot.vmp.utils.redis.RedisUtil; @@ -25,6 +26,9 @@ public class VideoStreamSessionManager { @Autowired private RedisUtil redisUtil; + @Autowired + private UserSetup userSetup; + public void put(String deviceId, String channelId ,String ssrc, String streamId, String mediaServerId, ClientTransaction transaction){ SsrcTransaction ssrcTransaction = new SsrcTransaction(); ssrcTransaction.setDeviceId(deviceId); @@ -35,7 +39,7 @@ public class VideoStreamSessionManager { ssrcTransaction.setSsrc(ssrc); ssrcTransaction.setMediaServerId(mediaServerId); - redisUtil.set(VideoManagerConstants.MEDIA_TRANSACTION_USED_PREFIX + deviceId + "_" + channelId, ssrcTransaction); + redisUtil.set(VideoManagerConstants.MEDIA_TRANSACTION_USED_PREFIX + userSetup.getServerId() + "_" + deviceId + "_" + channelId, ssrcTransaction); } public void put(String deviceId, String channelId , Dialog dialog){ @@ -44,7 +48,7 @@ public class VideoStreamSessionManager { byte[] dialogByteArray = SerializeUtils.serialize(dialog); ssrcTransaction.setDialog(dialogByteArray); } - redisUtil.set(VideoManagerConstants.MEDIA_TRANSACTION_USED_PREFIX + deviceId + "_" + channelId, ssrcTransaction); + redisUtil.set(VideoManagerConstants.MEDIA_TRANSACTION_USED_PREFIX + userSetup.getServerId() + "_" + deviceId + "_" + channelId, ssrcTransaction); } @@ -66,7 +70,7 @@ public class VideoStreamSessionManager { } public SsrcTransaction getSsrcTransaction(String deviceId, String channelId){ - SsrcTransaction ssrcTransaction = (SsrcTransaction)redisUtil.get(VideoManagerConstants.MEDIA_TRANSACTION_USED_PREFIX + deviceId + "_" + channelId); + SsrcTransaction ssrcTransaction = (SsrcTransaction)redisUtil.get(VideoManagerConstants.MEDIA_TRANSACTION_USED_PREFIX + userSetup.getServerId() + "_" + deviceId + "_" + channelId); return ssrcTransaction; } @@ -90,11 +94,11 @@ public class VideoStreamSessionManager { public void remove(String deviceId, String channelId) { SsrcTransaction ssrcTransaction = getSsrcTransaction(deviceId, channelId); if (ssrcTransaction == null) return; - redisUtil.del(VideoManagerConstants.MEDIA_TRANSACTION_USED_PREFIX + deviceId + "_" + channelId); + redisUtil.del(VideoManagerConstants.MEDIA_TRANSACTION_USED_PREFIX + userSetup.getServerId() + "_" + deviceId + "_" + channelId); } public List getAllSsrc() { - List ssrcTransactionKeys = redisUtil.scan(String.format("%s_*_*", VideoManagerConstants.MEDIA_TRANSACTION_USED_PREFIX)); + List ssrcTransactionKeys = redisUtil.scan(String.format("%s_*_*", VideoManagerConstants.MEDIA_TRANSACTION_USED_PREFIX+ userSetup.getServerId() + "_" )); List result= new ArrayList<>(); for (int i = 0; i < ssrcTransactionKeys.size(); i++) { String key = (String)ssrcTransactionKeys.get(i); diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/MessageRequestProcessor1.java b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/MessageRequestProcessor1.java deleted file mode 100644 index 2a908414..00000000 --- a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/MessageRequestProcessor1.java +++ /dev/null @@ -1,1104 +0,0 @@ -package com.genersoft.iot.vmp.gb28181.transmit.event.request.impl; - -import com.alibaba.fastjson.JSONObject; -import com.genersoft.iot.vmp.VManageBootstrap; -import com.genersoft.iot.vmp.common.StreamInfo; -import com.genersoft.iot.vmp.common.VideoManagerConstants; -import com.genersoft.iot.vmp.conf.SipConfig; -import com.genersoft.iot.vmp.conf.UserSetup; -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.SIPProcessorObserver; -import com.genersoft.iot.vmp.gb28181.transmit.callback.CheckForAllRecordsThread; -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.cmd.impl.SIPCommander; -import com.genersoft.iot.vmp.gb28181.transmit.cmd.impl.SIPCommanderFroPlatform; -import com.genersoft.iot.vmp.gb28181.transmit.event.request.ISIPRequestProcessor; -import com.genersoft.iot.vmp.gb28181.transmit.event.request.SIPRequestProcessorParent; -import com.genersoft.iot.vmp.gb28181.utils.DateUtil; -import com.genersoft.iot.vmp.gb28181.utils.NumericUtil; -import com.genersoft.iot.vmp.gb28181.utils.SipUtils; -import com.genersoft.iot.vmp.gb28181.utils.XmlUtil; -import com.genersoft.iot.vmp.service.IDeviceAlarmService; -import com.genersoft.iot.vmp.storager.IRedisCatchStorage; -import com.genersoft.iot.vmp.storager.IVideoManagerStorager; -import com.genersoft.iot.vmp.utils.GpsUtil; -import com.genersoft.iot.vmp.utils.SpringBeanFactory; -import com.genersoft.iot.vmp.utils.redis.RedisUtil; -import com.genersoft.iot.vmp.vmanager.gb28181.platform.bean.ChannelReduce; -import gov.nist.javax.sip.SipStackImpl; -import gov.nist.javax.sip.address.SipUri; -import org.dom4j.DocumentException; -import org.dom4j.Element; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.beans.factory.InitializingBean; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; -import org.springframework.util.StringUtils; - -import javax.sip.*; -import javax.sip.address.SipURI; -import javax.sip.header.FromHeader; -import javax.sip.header.HeaderAddress; -import javax.sip.header.ToHeader; -import javax.sip.message.Response; -import java.text.ParseException; -import java.util.*; -import java.util.concurrent.ConcurrentHashMap; - -import static com.genersoft.iot.vmp.gb28181.utils.XmlUtil.getText; - -/** - * @description: MESSAGE请求分发处理器, - * @author: panlinlin - * @date: 2021年11月8日 10:28 - */ -@SuppressWarnings(value={"unchecked", "rawtypes"}) -@Component -public class MessageRequestProcessor1 extends SIPRequestProcessorParent implements InitializingBean, ISIPRequestProcessor { - - public static volatile List threadNameList = new ArrayList(); - private final static Logger logger = LoggerFactory.getLogger(MessageRequestProcessor1.class); - private static Map messageHandlerMap = new ConcurrentHashMap<>(); - - - private final static String CACHE_RECORDINFO_KEY = "CACHE_RECORDINFO_"; - private static final String MESSAGE_KEEP_ALIVE = "Keepalive"; - private static final String MESSAGE_CONFIG_DOWNLOAD = "ConfigDownload"; - private static final String MESSAGE_CATALOG = "Catalog"; - private static final String MESSAGE_DEVICE_INFO = "DeviceInfo"; - private static final String MESSAGE_ALARM = "Alarm"; - private static final String MESSAGE_RECORD_INFO = "RecordInfo"; - private static final String MESSAGE_MEDIA_STATUS = "MediaStatus"; - private static final String MESSAGE_BROADCAST = "Broadcast"; - private static final String MESSAGE_DEVICE_STATUS = "DeviceStatus"; - private static final String MESSAGE_DEVICE_CONTROL = "DeviceControl"; - private static final String MESSAGE_DEVICE_CONFIG = "DeviceConfig"; - private static final String MESSAGE_MOBILE_POSITION = "MobilePosition"; - private static final String MESSAGE_PRESET_QUERY = "PresetQuery"; - private String method = "MESSAGE1111"; - - @Autowired - private UserSetup userSetup; - - @Autowired - private SIPCommander cmder; - - @Autowired - private SipConfig config; - - @Autowired - private SIPCommanderFroPlatform cmderFroPlatform; - - @Autowired - private IVideoManagerStorager storager; - - @Autowired - private IRedisCatchStorage redisCatchStorage; - - @Autowired - private EventPublisher publisher; - - @Autowired - private RedisUtil redis; - - @Autowired - private DeferredResultHolder deferredResultHolder; - - @Autowired - private DeviceOffLineDetector offLineDetector; - - @Autowired - private IDeviceAlarmService deviceAlarmService; - - @Autowired - private SIPProcessorObserver sipProcessorObserver; - - @Override - public void afterPropertiesSet() throws Exception { - // 添加消息处理的订阅 - sipProcessorObserver.addRequestProcessor(method, this); - } - - /** - * 处理MESSAGE请求 - * - * @param evt - */ - @Override - public void process(RequestEvent evt) { - - try { - Element rootElement = getRootElement(evt); - String cmd = getText(rootElement, "CmdType"); - - if (MESSAGE_KEEP_ALIVE.equals(cmd)) { - logger.debug("接收到KeepAlive消息"); - processMessageKeepAlive(evt); - } else if (MESSAGE_CONFIG_DOWNLOAD.equals(cmd)) { - logger.debug("接收到ConfigDownload消息"); - processMessageConfigDownload(evt); - } else if (MESSAGE_CATALOG.equals(cmd)) { - logger.debug("接收到Catalog消息"); - processMessageCatalogList(evt); - } else if (MESSAGE_DEVICE_INFO.equals(cmd)) { - // DeviceInfo消息处理 - processMessageDeviceInfo(evt); - } else if (MESSAGE_DEVICE_STATUS.equals(cmd)) { - // DeviceStatus消息处理 - processMessageDeviceStatus(evt); - } else if (MESSAGE_DEVICE_CONTROL.equals(cmd)) { - logger.debug("接收到DeviceControl消息"); - processMessageDeviceControl(evt); - } else if (MESSAGE_DEVICE_CONFIG.equals(cmd)) { - logger.info("接收到DeviceConfig消息"); - processMessageDeviceConfig(evt); - } else if (MESSAGE_ALARM.equals(cmd)) { - logger.debug("接收到Alarm消息"); - processMessageAlarm(evt); - } else if (MESSAGE_RECORD_INFO.equals(cmd)) { - logger.debug("接收到RecordInfo消息"); - processMessageRecordInfo(evt); - }else if (MESSAGE_MEDIA_STATUS.equals(cmd)) { - logger.debug("接收到MediaStatus消息"); - processMessageMediaStatus(evt); - } else if (MESSAGE_MOBILE_POSITION.equals(cmd)) { - logger.debug("接收到MobilePosition消息"); - processMessageMobilePosition(evt); - } else if (MESSAGE_PRESET_QUERY.equals(cmd)) { - logger.debug("接收到PresetQuery消息"); - processMessagePresetQuery(evt); - } else if (MESSAGE_BROADCAST.equals(cmd)) { - // Broadcast消息处理 - processMessageBroadcast(evt); - } else { - logger.debug("接收到消息:" + cmd); - responseAck(evt, Response.OK); - } - } catch (DocumentException | SipException |InvalidArgumentException | ParseException e) { - e.printStackTrace(); - } - } - - /** - * 处理MobilePosition移动位置消息 - * - * @param evt - */ - private void processMessageMobilePosition(RequestEvent evt) { - try { - String deviceId = SipUtils.getUserIdFromFromHeader(evt.getRequest()); - Device device = storager.queryVideoDevice(deviceId); - if (device == null) { - logger.warn("处理MobilePosition移动位置消息时未找到设备信息"); - responseAck(evt, Response.NOT_FOUND); - return; - } - Element rootElement = getRootElement(evt, device.getCharset()); - - MobilePosition mobilePosition = new MobilePosition(); - if (!StringUtils.isEmpty(device.getName())) { - mobilePosition.setDeviceName(device.getName()); - } - mobilePosition.setDeviceId(deviceId); - mobilePosition.setChannelId(getText(rootElement, "DeviceID")); - mobilePosition.setTime(getText(rootElement, "Time")); - mobilePosition.setLongitude(Double.parseDouble(getText(rootElement, "Longitude"))); - mobilePosition.setLatitude(Double.parseDouble(getText(rootElement, "Latitude"))); - if (NumericUtil.isDouble(getText(rootElement, "Speed"))) { - mobilePosition.setSpeed(Double.parseDouble(getText(rootElement, "Speed"))); - } else { - mobilePosition.setSpeed(0.0); - } - if (NumericUtil.isDouble(getText(rootElement, "Direction"))) { - mobilePosition.setDirection(Double.parseDouble(getText(rootElement, "Direction"))); - } else { - mobilePosition.setDirection(0.0); - } - if (NumericUtil.isDouble(getText(rootElement, "Altitude"))) { - mobilePosition.setAltitude(Double.parseDouble(getText(rootElement, "Altitude"))); - } else { - mobilePosition.setAltitude(0.0); - } - mobilePosition.setReportSource("Mobile Position"); - BaiduPoint bp = new BaiduPoint(); - bp = GpsUtil.Wgs84ToBd09(String.valueOf(mobilePosition.getLongitude()), String.valueOf(mobilePosition.getLatitude())); - logger.info("百度坐标:" + bp.getBdLng() + ", " + bp.getBdLat()); - mobilePosition.setGeodeticSystem("BD-09"); - mobilePosition.setCnLng(bp.getBdLng()); - mobilePosition.setCnLat(bp.getBdLat()); - if (!userSetup.getSavePositionHistory()) { - storager.clearMobilePositionsByDeviceId(deviceId); - } - storager.insertMobilePosition(mobilePosition); - //回复 200 OK - responseAck(evt, Response.OK); - } catch (DocumentException | SipException | InvalidArgumentException | ParseException e) { - e.printStackTrace(); - } - } - - /** - * 处理DeviceStatus设备状态Message - * - * @param evt - */ - private void processMessageDeviceStatus(RequestEvent evt) { - try { - String deviceId = SipUtils.getUserIdFromFromHeader(evt.getRequest()); - Device device = storager.queryVideoDevice(deviceId); - if (device == null) { - logger.warn("处理DeviceStatus设备状态Message时未找到设备信息"); - responseAck(evt, Response.NOT_FOUND); - return; - } - Element rootElement = getRootElement(evt); - String name = rootElement.getName(); - Element deviceIdElement = rootElement.element("DeviceID"); - String channelId = deviceIdElement.getText(); - if (name.equalsIgnoreCase("Query")) { // 区分是Response——查询响应,还是Query——查询请求 - logger.info("接收到DeviceStatus查询消息"); - FromHeader fromHeader = (FromHeader) evt.getRequest().getHeader(FromHeader.NAME); - String platformId = ((SipUri) fromHeader.getAddress().getURI()).getUser(); - if (platformId == null) { - responseAck(evt, Response.NOT_FOUND); - return; - } else { - // 回复200 OK - responseAck(evt, Response.OK); - String sn = rootElement.element("SN").getText(); - ParentPlatform parentPlatform = storager.queryParentPlatByServerGBId(platformId); - cmderFroPlatform.deviceStatusResponse(parentPlatform, sn, fromHeader.getTag()); - } - } else { - logger.info("接收到DeviceStatus应答消息"); - // 检查设备是否存在, 不存在则不回复 - if (storager.exists(deviceId)) { - // 回复200 OK - responseAck(evt, Response.OK); - JSONObject json = new JSONObject(); - XmlUtil.node2Json(rootElement, json); - if (logger.isDebugEnabled()) { - logger.debug(json.toJSONString()); - } - RequestMessage msg = new RequestMessage(); - msg.setKey(DeferredResultHolder.CALLBACK_CMD_DEVICESTATUS + deviceId + channelId); - msg.setData(json); - deferredResultHolder.invokeAllResult(msg); - - if (offLineDetector.isOnline(deviceId)) { - publisher.onlineEventPublish(device, VideoManagerConstants.EVENT_ONLINE_MESSAGE); - } else { - } - } - } - - } catch (ParseException | SipException | InvalidArgumentException | DocumentException e) { - e.printStackTrace(); - } - } - - /** - * 处理DeviceControl设备状态Message - * - * @param evt - */ - private void processMessageDeviceControl(RequestEvent evt) { - try { - String deviceId = SipUtils.getUserIdFromFromHeader(evt.getRequest()); - Device device = storager.queryVideoDevice(deviceId); - if (device == null) { - logger.warn("处理DeviceControl设备状态Message未找到设备信息"); - responseAck(evt, Response.NOT_FOUND); - return; - } - Element rootElement = getRootElement(evt); - String channelId = getText(rootElement, "DeviceID"); - //String result = getText(rootElement, "Result"); - // 回复200 OK - responseAck(evt, Response.OK); - if (rootElement.getName().equals("Response")) {//} !StringUtils.isEmpty(result)) { - // 此处是对本平台发出DeviceControl指令的应答 - JSONObject json = new JSONObject(); - XmlUtil.node2Json(rootElement, json); - if (logger.isDebugEnabled()) { - logger.debug(json.toJSONString()); - } - RequestMessage msg = new RequestMessage(); - String key = DeferredResultHolder.CALLBACK_CMD_DEVICECONTROL + deviceId + channelId; - msg.setKey(key); - msg.setData(json); - deferredResultHolder.invokeAllResult(msg); - } else { - // 此处是上级发出的DeviceControl指令 - String platformId = ((SipURI) ((HeaderAddress) evt.getRequest().getHeader(FromHeader.NAME)).getAddress().getURI()).getUser(); - String targetGBId = ((SipURI) ((HeaderAddress) evt.getRequest().getHeader(ToHeader.NAME)).getAddress().getURI()).getUser(); - // 远程启动功能 - if (!StringUtils.isEmpty(getText(rootElement, "TeleBoot"))) { - if (deviceId.equals(targetGBId)) { - // 远程启动本平台:需要在重新启动程序后先对SipStack解绑 - logger.info("执行远程启动本平台命令"); - ParentPlatform parentPlatform = storager.queryParentPlatByServerGBId(platformId); - cmderFroPlatform.unregister(parentPlatform, null, null); - - Thread restartThread = new Thread(new Runnable() { - @Override - public void run() { - try { - Thread.sleep(3000); - SipProvider up = (SipProvider) SpringBeanFactory.getBean("udpSipProvider"); - SipStackImpl stack = (SipStackImpl)up.getSipStack(); - stack.stop(); - Iterator listener = stack.getListeningPoints(); - while (listener.hasNext()) { - stack.deleteListeningPoint((ListeningPoint) listener.next()); - } - Iterator providers = stack.getSipProviders(); - while (providers.hasNext()) { - stack.deleteSipProvider((SipProvider) providers.next()); - } - VManageBootstrap.restart(); - } catch (InterruptedException ignored) { - } catch (ObjectInUseException e) { - e.printStackTrace(); - } - } - }); - - restartThread.setDaemon(false); - restartThread.start(); - } else { - // 远程启动指定设备 - } - } - // 云台/前端控制命令 - if (!StringUtils.isEmpty(getText(rootElement,"PTZCmd")) && !deviceId.equals(targetGBId)) { - String cmdString = getText(rootElement,"PTZCmd"); - Device deviceForPlatform = storager.queryVideoDeviceByPlatformIdAndChannelId(platformId, deviceId); - cmder.fronEndCmd(deviceForPlatform, deviceId, cmdString); - } - } - } catch (ParseException | SipException | InvalidArgumentException | DocumentException e) { - e.printStackTrace(); - } - } - - /** - * 处理DeviceConfig设备状态Message - * - * @param evt - */ - private void processMessageDeviceConfig(RequestEvent evt) { - try { - String deviceId = SipUtils.getUserIdFromFromHeader(evt.getRequest()); - // 查询设备是否存在 - Device device = storager.queryVideoDevice(deviceId); - if (device == null) { - logger.warn("处理DeviceConfig设备状态Message消息时未找到设备信息"); - responseAck(evt, Response.NOT_FOUND); - return; - } - Element rootElement = getRootElement(evt); - String channelId = getText(rootElement, "DeviceID"); - // 回复200 OK - responseAck(evt, Response.OK); - if (rootElement.getName().equals("Response")) { - // 此处是对本平台发出DeviceControl指令的应答 - JSONObject json = new JSONObject(); - XmlUtil.node2Json(rootElement, json); - if (logger.isDebugEnabled()) { - logger.debug(json.toJSONString()); - } - String key = DeferredResultHolder.CALLBACK_CMD_DEVICECONFIG + deviceId + channelId; - RequestMessage msg = new RequestMessage(); - msg.setKey(key); - msg.setData(json); - deferredResultHolder.invokeAllResult(msg); - } else { - // 此处是上级发出的DeviceConfig指令 - } - } catch (ParseException | SipException | InvalidArgumentException | DocumentException e) { - e.printStackTrace(); - } - } - - /** - * 处理ConfigDownload设备状态Message - * - * @param evt - */ - private void processMessageConfigDownload(RequestEvent evt) { - try { - String deviceId = SipUtils.getUserIdFromFromHeader(evt.getRequest()); - // 查询设备是否存在 - Device device = storager.queryVideoDevice(deviceId); - if (device == null) { - logger.warn("处理ConfigDownload设备状态Message时未找到设备信息"); - responseAck(evt, Response.NOT_FOUND); - return; - } - Element rootElement = getRootElement(evt); - String channelId = getText(rootElement, "DeviceID"); - String key = DeferredResultHolder.CALLBACK_CMD_CONFIGDOWNLOAD + deviceId + channelId; - // 回复200 OK - responseAck(evt, Response.OK); - if (rootElement.getName().equals("Response")) { - // 此处是对本平台发出DeviceControl指令的应答 - JSONObject json = new JSONObject(); - XmlUtil.node2Json(rootElement, json); - if (logger.isDebugEnabled()) { - logger.debug(json.toJSONString()); - } - RequestMessage msg = new RequestMessage(); - msg.setKey(key); - msg.setData(json); - deferredResultHolder.invokeAllResult(msg); - } else { - // 此处是上级发出的DeviceConfig指令 - } - } catch (ParseException | SipException | InvalidArgumentException | DocumentException e) { - e.printStackTrace(); - } - } - - /** - * 处理PresetQuery预置位列表Message - * - * @param evt - */ - private void processMessagePresetQuery(RequestEvent evt) { - try { - String deviceId = SipUtils.getUserIdFromFromHeader(evt.getRequest()); - // 查询设备是否存在 - Device device = storager.queryVideoDevice(deviceId); - if (device == null) { - logger.warn("处理PresetQuery预置位列表Message时未找到设备信息"); - responseAck(evt, Response.NOT_FOUND); - return; - } - Element rootElement = getRootElement(evt); - String channelId = getText(rootElement, "DeviceID"); - String key = DeferredResultHolder.CALLBACK_CMD_PRESETQUERY + deviceId + channelId; - // 回复200 OK - responseAck(evt, Response.OK); - if (rootElement.getName().equals("Response")) {// !StringUtils.isEmpty(result)) { - // 此处是对本平台发出DeviceControl指令的应答 - JSONObject json = new JSONObject(); - XmlUtil.node2Json(rootElement, json); - if (logger.isDebugEnabled()) { - logger.debug(json.toJSONString()); - } - RequestMessage msg = new RequestMessage(); - msg.setKey(key); - msg.setData(json); - deferredResultHolder.invokeAllResult(msg); - } else { - // 此处是上级发出的DeviceControl指令 - } - } catch (ParseException | SipException | InvalidArgumentException | DocumentException e) { - e.printStackTrace(); - } - } - - /** - * 处理DeviceInfo设备信息Message - * - * @param evt - */ - private void processMessageDeviceInfo(RequestEvent evt) { - try { - String deviceId = SipUtils.getUserIdFromFromHeader(evt.getRequest()); - // 查询设备是否存在 - Device device = storager.queryVideoDevice(deviceId); - ParentPlatform parentPlatform = storager.queryParentPlatByServerGBId(deviceId); - - Element rootElement = getRootElement(evt); - String requestName = rootElement.getName(); - Element deviceIdElement = rootElement.element("DeviceID"); - String channelId = deviceIdElement.getTextTrim(); - String key = DeferredResultHolder.CALLBACK_CMD_DEVICEINFO + deviceId + channelId; - if (device != null ) { - rootElement = getRootElement(evt, device.getCharset()); - } - if (requestName.equals("Query")) { - logger.info("接收到DeviceInfo查询消息"); - FromHeader fromHeader = (FromHeader) evt.getRequest().getHeader(FromHeader.NAME); - if (parentPlatform == null) { - responseAck(evt, Response.NOT_FOUND); - return; - } else { - // 回复200 OK - responseAck(evt, Response.OK); - String sn = rootElement.element("SN").getText(); - cmderFroPlatform.deviceInfoResponse(parentPlatform, sn, fromHeader.getTag()); - } - } else { - logger.debug("接收到DeviceInfo应答消息"); - if (device == null) { - logger.warn("处理DeviceInfo设备信息Message时未找到设备信息"); - responseAck(evt, Response.NOT_FOUND); - return; - } - - device.setName(getText(rootElement, "DeviceName")); - - device.setManufacturer(getText(rootElement, "Manufacturer")); - device.setModel(getText(rootElement, "Model")); - device.setFirmware(getText(rootElement, "Firmware")); - if (StringUtils.isEmpty(device.getStreamMode())) { - device.setStreamMode("UDP"); - } - storager.updateDevice(device); - - RequestMessage msg = new RequestMessage(); - msg.setKey(key); - msg.setData(device); - deferredResultHolder.invokeAllResult(msg); - // 回复200 OK - responseAck(evt, Response.OK); - if (offLineDetector.isOnline(deviceId)) { - publisher.onlineEventPublish(device, VideoManagerConstants.EVENT_ONLINE_MESSAGE); - } - } - } catch (DocumentException | SipException | InvalidArgumentException | ParseException e) { - e.printStackTrace(); - } - } - - /*** - * 收到catalog设备目录列表请求 处理 - * - * @param evt - */ - private void processMessageCatalogList(RequestEvent evt) { - try { - - String deviceId = SipUtils.getUserIdFromFromHeader(evt.getRequest()); - // 查询设备是否存在 - Device device = storager.queryVideoDevice(deviceId); - ParentPlatform parentPlatform = storager.queryParentPlatByServerGBId(deviceId); - - - Element rootElement = getRootElement(evt); - String name = rootElement.getName(); - Element deviceIdElement = rootElement.element("DeviceID"); - String channelId = deviceIdElement.getText(); - Element deviceListElement = rootElement.element("DeviceList"); - String key = DeferredResultHolder.CALLBACK_CMD_CATALOG + deviceId; - FromHeader fromHeader = (FromHeader) evt.getRequest().getHeader(FromHeader.NAME); - if (name.equalsIgnoreCase("Query")) { // 区分是Response——查询响应,还是Query——查询请求 - // TODO 后续将代码拆分 - if (parentPlatform == null) { - responseAck(evt, Response.NOT_FOUND); - return; - } else { - // 回复200 OK - responseAck(evt, Response.OK); - - Element snElement = rootElement.element("SN"); - String sn = snElement.getText(); - // 准备回复通道信息 - List channelReduces = storager.queryChannelListInParentPlatform(parentPlatform.getServerGBId()); - // 查询关联的直播通道 - List gbStreams = storager.queryGbStreamListInPlatform(parentPlatform.getServerGBId()); - int size = channelReduces.size() + gbStreams.size(); - // 回复级联的通道 - if (channelReduces.size() > 0) { - for (ChannelReduce channelReduce : channelReduces) { - DeviceChannel deviceChannel = storager.queryChannel(channelReduce.getDeviceId(), channelReduce.getChannelId()); - cmderFroPlatform.catalogQuery(deviceChannel, parentPlatform, sn, fromHeader.getTag(), size); - } - } - // 回复直播的通道 - if (gbStreams.size() > 0) { - for (GbStream gbStream : gbStreams) { - DeviceChannel deviceChannel = new DeviceChannel(); - deviceChannel.setChannelId(gbStream.getGbId()); - deviceChannel.setName(gbStream.getName()); - deviceChannel.setLongitude(gbStream.getLongitude()); - deviceChannel.setLatitude(gbStream.getLatitude()); - deviceChannel.setDeviceId(parentPlatform.getDeviceGBId()); - deviceChannel.setManufacture("wvp-pro"); - deviceChannel.setStatus(gbStream.isStatus()?1:0); -// deviceChannel.setParentId(parentPlatform.getDeviceGBId()); - deviceChannel.setRegisterWay(1); - deviceChannel.setCivilCode(config.getDomain()); - deviceChannel.setModel("live"); - deviceChannel.setOwner("wvp-pro"); -// deviceChannel.setAddress("test"); - deviceChannel.setParental(0); - deviceChannel.setSecrecy("0"); - deviceChannel.setSecrecy("0"); - - cmderFroPlatform.catalogQuery(deviceChannel, parentPlatform, sn, fromHeader.getTag(), size); - } - } - if (size == 0) { - // 回复无通道 - cmderFroPlatform.catalogQuery(null, parentPlatform, sn, fromHeader.getTag(), size); - } - } - - - } else { - if (device == null) { - logger.warn("收到catalog设备目录列表请求时未找到设备信息"); - responseAck(evt, Response.NOT_FOUND); - return; - } - deviceListElement = getRootElement(evt, device.getCharset()).element("DeviceList"); - Iterator deviceListIterator = deviceListElement.elementIterator(); - if (deviceListIterator != null) { - - // 遍历DeviceList - while (deviceListIterator.hasNext()) { - Element itemDevice = deviceListIterator.next(); - Element channelDeviceElement = itemDevice.element("DeviceID"); - if (channelDeviceElement == null) { - continue; - } - String channelDeviceId = channelDeviceElement.getText(); - Element channdelNameElement = itemDevice.element("Name"); - String channelName = channdelNameElement != null ? channdelNameElement.getTextTrim().toString() : ""; - Element statusElement = itemDevice.element("Status"); - String status = statusElement != null ? statusElement.getText().toString() : "ON"; - DeviceChannel deviceChannel = new DeviceChannel(); - deviceChannel.setName(channelName); - deviceChannel.setChannelId(channelDeviceId); - // ONLINE OFFLINE HIKVISION DS-7716N-E4 NVR的兼容性处理 - if (status.equals("ON") || status.equals("On") || status.equals("ONLINE")) { - deviceChannel.setStatus(1); - } - if (status.equals("OFF") || status.equals("Off") || status.equals("OFFLINE")) { - deviceChannel.setStatus(0); - } - - deviceChannel.setManufacture(getText(itemDevice, "Manufacturer")); - deviceChannel.setModel(getText(itemDevice, "Model")); - deviceChannel.setOwner(getText(itemDevice, "Owner")); - deviceChannel.setCivilCode(getText(itemDevice, "CivilCode")); - deviceChannel.setBlock(getText(itemDevice, "Block")); - deviceChannel.setAddress(getText(itemDevice, "Address")); - if (getText(itemDevice, "Parental") == null || getText(itemDevice, "Parental") == "") { - deviceChannel.setParental(0); - } else { - deviceChannel.setParental(Integer.parseInt(getText(itemDevice, "Parental"))); - } - deviceChannel.setParentId(getText(itemDevice, "ParentID")); - if (getText(itemDevice, "SafetyWay") == null || getText(itemDevice, "SafetyWay") == "") { - deviceChannel.setSafetyWay(0); - } else { - deviceChannel.setSafetyWay(Integer.parseInt(getText(itemDevice, "SafetyWay"))); - } - if (getText(itemDevice, "RegisterWay") == null || getText(itemDevice, "RegisterWay") == "") { - deviceChannel.setRegisterWay(1); - } else { - deviceChannel.setRegisterWay(Integer.parseInt(getText(itemDevice, "RegisterWay"))); - } - deviceChannel.setCertNum(getText(itemDevice, "CertNum")); - if (getText(itemDevice, "Certifiable") == null || getText(itemDevice, "Certifiable") == "") { - deviceChannel.setCertifiable(0); - } else { - deviceChannel.setCertifiable(Integer.parseInt(getText(itemDevice, "Certifiable"))); - } - if (getText(itemDevice, "ErrCode") == null || getText(itemDevice, "ErrCode") == "") { - deviceChannel.setErrCode(0); - } else { - deviceChannel.setErrCode(Integer.parseInt(getText(itemDevice, "ErrCode"))); - } - deviceChannel.setEndTime(getText(itemDevice, "EndTime")); - deviceChannel.setSecrecy(getText(itemDevice, "Secrecy")); - deviceChannel.setIpAddress(getText(itemDevice, "IPAddress")); - if (getText(itemDevice, "Port") == null || getText(itemDevice, "Port") == "") { - deviceChannel.setPort(0); - } else { - deviceChannel.setPort(Integer.parseInt(getText(itemDevice, "Port"))); - } - deviceChannel.setPassword(getText(itemDevice, "Password")); - if (NumericUtil.isDouble(getText(itemDevice, "Longitude"))) { - deviceChannel.setLongitude(Double.parseDouble(getText(itemDevice, "Longitude"))); - } else { - deviceChannel.setLongitude(0.00); - } - if (NumericUtil.isDouble(getText(itemDevice, "Latitude"))) { - deviceChannel.setLatitude(Double.parseDouble(getText(itemDevice, "Latitude"))); - } else { - deviceChannel.setLatitude(0.00); - } - if (getText(itemDevice, "PTZType") == null || getText(itemDevice, "PTZType") == "") { - deviceChannel.setPTZType(0); - } else { - deviceChannel.setPTZType(Integer.parseInt(getText(itemDevice, "PTZType"))); - } - deviceChannel.setHasAudio(true); // 默认含有音频,播放时再检查是否有音频及是否AAC - storager.updateChannel(device.getDeviceId(), deviceChannel); - } - - RequestMessage msg = new RequestMessage(); - msg.setKey(key); - msg.setData(device); - deferredResultHolder.invokeAllResult(msg); - // 回复200 OK - responseAck(evt, Response.OK); - if (offLineDetector.isOnline(deviceId)) { - publisher.onlineEventPublish(device, VideoManagerConstants.EVENT_ONLINE_MESSAGE); - } - } - } - } catch (DocumentException | SipException | InvalidArgumentException | ParseException e) { - e.printStackTrace(); - } - } - - /*** - * 收到alarm设备报警信息 处理 - * - * @param evt - */ - private void processMessageAlarm(RequestEvent evt) { - try { - String deviceId = SipUtils.getUserIdFromFromHeader(evt.getRequest()); - Device device = storager.queryVideoDevice(deviceId); - if (device == null) { - logger.warn("处理alarm设备报警信息未找到设备信息"); - responseAck(evt, Response.NOT_FOUND); - return; - } - Element rootElement = getRootElement(evt, device.getCharset()); - Element deviceIdElement = rootElement.element("DeviceID"); - String channelId = deviceIdElement.getText().toString(); - String key = DeferredResultHolder.CALLBACK_CMD_ALARM + deviceId + channelId; - // 回复200 OK - responseAck(evt, Response.OK); - - if (device.getCharset() != null) { - rootElement = getRootElement(evt, device.getCharset()); - } - - if (rootElement.getName().equals("Notify")) { // 处理报警通知 - DeviceAlarm deviceAlarm = new DeviceAlarm(); - deviceAlarm.setDeviceId(deviceId); - deviceAlarm.setChannelId(channelId); - deviceAlarm.setAlarmPriority(getText(rootElement, "AlarmPriority")); - deviceAlarm.setAlarmMethod(getText(rootElement, "AlarmMethod")); - deviceAlarm.setAlarmTime(getText(rootElement, "AlarmTime")); - if (getText(rootElement, "AlarmDescription") == null) { - deviceAlarm.setAlarmDescription(""); - } else { - deviceAlarm.setAlarmDescription(getText(rootElement, "AlarmDescription")); - } - if (NumericUtil.isDouble(getText(rootElement, "Longitude"))) { - deviceAlarm.setLongitude(Double.parseDouble(getText(rootElement, "Longitude"))); - } else { - deviceAlarm.setLongitude(0.00); - } - if (NumericUtil.isDouble(getText(rootElement, "Latitude"))) { - deviceAlarm.setLatitude(Double.parseDouble(getText(rootElement, "Latitude"))); - } else { - deviceAlarm.setLatitude(0.00); - } - - if (!StringUtils.isEmpty(deviceAlarm.getAlarmMethod())) { - if ( deviceAlarm.getAlarmMethod().equals("4")) { - MobilePosition mobilePosition = new MobilePosition(); - mobilePosition.setDeviceId(deviceAlarm.getDeviceId()); - mobilePosition.setTime(deviceAlarm.getAlarmTime()); - mobilePosition.setLongitude(deviceAlarm.getLongitude()); - mobilePosition.setLatitude(deviceAlarm.getLatitude()); - mobilePosition.setReportSource("GPS Alarm"); - BaiduPoint bp = new BaiduPoint(); - bp = GpsUtil.Wgs84ToBd09(String.valueOf(mobilePosition.getLongitude()), String.valueOf(mobilePosition.getLatitude())); - logger.info("百度坐标:" + bp.getBdLng() + ", " + bp.getBdLat()); - mobilePosition.setGeodeticSystem("BD-09"); - mobilePosition.setCnLng(bp.getBdLng()); - mobilePosition.setCnLat(bp.getBdLat()); - if (!userSetup.getSavePositionHistory()) { - storager.clearMobilePositionsByDeviceId(deviceId); - } - storager.insertMobilePosition(mobilePosition); - } - } - logger.debug("存储报警信息、报警分类"); - // 存储报警信息、报警分类 - deviceAlarmService.add(deviceAlarm); - - if (offLineDetector.isOnline(deviceId)) { - publisher.deviceAlarmEventPublish(deviceAlarm); - } - } else if (rootElement.getName().equals("Response")) { // 处理报警查询响应 - JSONObject json = new JSONObject(); - XmlUtil.node2Json(rootElement, json); - if (logger.isDebugEnabled()) { - logger.debug(json.toJSONString()); - } - RequestMessage msg = new RequestMessage(); - msg.setKey(key); - msg.setData(json); - deferredResultHolder.invokeAllResult(msg); - } - } catch (DocumentException | SipException | InvalidArgumentException | ParseException e) { - e.printStackTrace(); - } - } - - /*** - * 收到keepalive请求 处理 - * - * @param evt - */ - private void processMessageKeepAlive(RequestEvent evt) { - try { - - String deviceId = SipUtils.getUserIdFromFromHeader(evt.getRequest()); - // 查询设备是否存在 - Device device = storager.queryVideoDevice(deviceId); - - Element rootElement = getRootElement(evt); - String channelId = getText(rootElement, "DeviceID"); - - // 检查设备是否存在并在线, 不在线则设置为在线 - if (device != null ) { - // 回复200 OK - responseAck(evt, Response.OK); - publisher.onlineEventPublish(device, VideoManagerConstants.EVENT_ONLINE_KEEPLIVE); - }else{ - logger.warn("收到[ "+deviceId+" ]心跳信息, 但是设备不存在, 回复404"); - Response response = getMessageFactory().createResponse(Response.NOT_FOUND, evt.getRequest()); - ServerTransaction serverTransaction = getServerTransaction(evt); - serverTransaction.sendResponse(response); - if (serverTransaction.getDialog() != null) { - serverTransaction.getDialog().delete(); - } - } - -// if (device != null && device.getOnline() == 1) { -// -// if (offLineDetector.isOnline(deviceId)) { -// publisher.onlineEventPublish(device, VideoManagerConstants.EVENT_ONLINE_KEEPLIVE); -// } else { -// } -// }else { -//// logger.warn("收到[ "+deviceId+" ]心跳信息, 但是设备" + (device == null? "不存在":"离线") + ", 回复401"); -//// Response response = getMessageFactory().createResponse(Response.UNAUTHORIZED, evt.getRequest()); -//// getServerTransaction(evt).sendResponse(response); -// publisher.onlineEventPublish(device, VideoManagerConstants.EVENT_ONLINE_KEEPLIVE); -// -// } - } catch (ParseException | SipException | InvalidArgumentException | DocumentException e) { - e.printStackTrace(); - } - } - - /*** - * 处理RecordInfo设备录像列表Message请求 TODO 过期时间暂时写死180秒,后续与DeferredResult超时时间保持一致 - * - * @param evt - */ - private void processMessageRecordInfo(RequestEvent evt) { - try { - - String deviceId = SipUtils.getUserIdFromFromHeader(evt.getRequest()); - // 查询设备是否存在 - Device device = storager.queryVideoDevice(deviceId); - if (device == null) { - logger.warn("处理DeviceInfo设备信息Message时未找到设备信息"); - responseAck(evt, Response.NOT_FOUND); - return; - } - - // 回复200 OK - responseAck(evt, Response.OK); - String uuid = UUID.randomUUID().toString().replace("-", ""); - RecordInfo recordInfo = new RecordInfo(); - Element rootElement = getRootElement(evt); - String sn = getText(rootElement, "SN"); - String key = DeferredResultHolder.CALLBACK_CMD_RECORDINFO + deviceId + sn; - if (device != null ) { - rootElement = getRootElement(evt, device.getCharset()); - } - recordInfo.setDeviceId(deviceId); - recordInfo.setSn(sn); - recordInfo.setName(getText(rootElement, "Name")); - if (getText(rootElement, "SumNum")== null || getText(rootElement, "SumNum") =="") { - recordInfo.setSumNum(0); - } else { - recordInfo.setSumNum(Integer.parseInt(getText(rootElement, "SumNum"))); - } - - Element recordListElement = rootElement.element("RecordList"); - if (recordListElement == null || recordInfo.getSumNum() == 0) { - logger.info("无录像数据"); - RequestMessage msg = new RequestMessage(); - msg.setKey(key); - msg.setData(recordInfo); - deferredResultHolder.invokeAllResult(msg); - } else { - Iterator recordListIterator = recordListElement.elementIterator(); - List recordList = new ArrayList(); - if (recordListIterator != null) { - RecordItem record = new RecordItem(); - logger.info("处理录像列表数据..."); - // 遍历DeviceList - while (recordListIterator.hasNext()) { - Element itemRecord = recordListIterator.next(); - Element recordElement = itemRecord.element("DeviceID"); - if (recordElement == null) { - logger.info("记录为空,下一个..."); - continue; - } - record = new RecordItem(); - record.setDeviceId(getText(itemRecord, "DeviceID")); - record.setName(getText(itemRecord, "Name")); - record.setFilePath(getText(itemRecord, "FilePath")); - record.setAddress(getText(itemRecord, "Address")); - record.setStartTime( - DateUtil.ISO8601Toyyyy_MM_dd_HH_mm_ss(getText(itemRecord, "StartTime"))); - record.setEndTime( - DateUtil.ISO8601Toyyyy_MM_dd_HH_mm_ss(getText(itemRecord, "EndTime"))); - record.setSecrecy(itemRecord.element("Secrecy") == null ? 0 - : Integer.parseInt(getText(itemRecord, "Secrecy"))); - record.setType(getText(itemRecord, "Type")); - record.setRecorderId(getText(itemRecord, "RecorderID")); - recordList.add(record); - } - recordInfo.setRecordList(recordList); - } - - // 改用单独线程统计已获取录像文件数量,避免多包并行分别统计不完整的问题 - String cacheKey = CACHE_RECORDINFO_KEY + deviceId + sn; - redis.set(cacheKey + "_" + uuid, recordList, 90); - if (!threadNameList.contains(cacheKey)) { - threadNameList.add(cacheKey); - CheckForAllRecordsThread chk = new CheckForAllRecordsThread(cacheKey, recordInfo); - chk.setName(cacheKey); - chk.setDeferredResultHolder(deferredResultHolder); - chk.setRedis(redis); - chk.setLogger(logger); - chk.start(); - if (logger.isDebugEnabled()) { - logger.debug("Start Thread " + cacheKey + "."); - } - } else { - if (logger.isDebugEnabled()) { - logger.debug("Thread " + cacheKey + " already started."); - } - } - - // 存在录像且如果当前录像明细个数小于总条数,说明拆包返回,需要组装,暂不返回 - // if (recordInfo.getSumNum() > 0 && recordList.size() > 0 && recordList.size() < recordInfo.getSumNum()) { - // // 为防止连续请求该设备的录像数据,返回数据错乱,特增加sn进行区分 - // String cacheKey = CACHE_RECORDINFO_KEY + deviceId + sn; - - // redis.set(cacheKey + "_" + uuid, recordList, 90); - // List cacheKeys = redis.scan(cacheKey + "_*"); - // List totalRecordList = new ArrayList(); - // for (int i = 0; i < cacheKeys.size(); i++) { - // totalRecordList.addAll((List) redis.get(cacheKeys.get(i).toString())); - // } - // if (totalRecordList.size() < recordInfo.getSumNum()) { - // logger.info("已获取" + totalRecordList.size() + "项录像数据,共" + recordInfo.getSumNum() + "项"); - // return; - // } - // logger.info("录像数据已全部获取,共" + recordInfo.getSumNum() + "项"); - // recordInfo.setRecordList(totalRecordList); - // for (int i = 0; i < cacheKeys.size(); i++) { - // redis.del(cacheKeys.get(i).toString()); - // } - // } - // // 自然顺序排序, 元素进行升序排列 - // recordInfo.getRecordList().sort(Comparator.naturalOrder()); - } - // 走到这里,有以下可能:1、没有录像信息,第一次收到recordinfo的消息即返回响应数据,无redis操作 - // 2、有录像数据,且第一次即收到完整数据,返回响应数据,无redis操作 - // 3、有录像数据,在超时时间内收到多次包组装后数量足够,返回数据 - - // RequestMessage msg = new RequestMessage(); - // msg.setDeviceId(deviceId); - // msg.setType(DeferredResultHolder.CALLBACK_CMD_RECORDINFO); - // msg.setData(recordInfo); - // deferredResultHolder.invokeResult(msg); - // logger.info("处理完成,返回结果"); - } catch (DocumentException | SipException | InvalidArgumentException | ParseException e) { - e.printStackTrace(); - } - } - - /** - * 收到MediaStatus消息处理 - * - * @param evt - */ - private void processMessageMediaStatus(RequestEvent evt){ - try { - - String deviceId = SipUtils.getUserIdFromFromHeader(evt.getRequest()); - // 查询设备是否存在 - Device device = storager.queryVideoDevice(deviceId); - if (device == null) { - logger.warn("处理DeviceInfo设备信息Message时未找到设备信息"); - responseAck(evt, Response.NOT_FOUND); - return; - } - - // 回复200 OK - responseAck(evt, Response.OK); - Element rootElement = getRootElement(evt); - String channelId = getText(rootElement, "DeviceID"); - String NotifyType =getText(rootElement, "NotifyType"); - if (NotifyType.equals("121")){ - logger.info("媒体播放完毕,通知关流"); - StreamInfo streamInfo = redisCatchStorage.queryPlaybackByDevice(deviceId, "*"); - if (streamInfo != null) { - redisCatchStorage.stopPlayback(streamInfo); - cmder.streamByeCmd(streamInfo.getDeviceID(), streamInfo.getChannelId()); - } - } - } catch (ParseException | SipException | InvalidArgumentException | DocumentException e) { - e.printStackTrace(); - } - } - - /** - * 处理AudioBroadcast语音广播Message - * - * @param evt - */ - private void processMessageBroadcast(RequestEvent evt) { - try { - - String deviceId = SipUtils.getUserIdFromFromHeader(evt.getRequest()); - // 查询设备是否存在 - Device device = storager.queryVideoDevice(deviceId); - if (device == null) { - logger.warn("处理DeviceInfo设备信息Message时未找到设备信息"); - responseAck(evt, Response.NOT_FOUND); - return; - } - - Element rootElement = getRootElement(evt); - String channelId = getText(rootElement, "DeviceID"); - String key = DeferredResultHolder.CALLBACK_CMD_BROADCAST + deviceId + channelId; - // 回复200 OK - responseAck(evt, Response.OK); - if (rootElement.getName().equals("Response")) { - // 此处是对本平台发出Broadcast指令的应答 - JSONObject json = new JSONObject(); - XmlUtil.node2Json(rootElement, json); - if (logger.isDebugEnabled()) { - logger.debug(json.toJSONString()); - } - RequestMessage msg = new RequestMessage(); - msg.setKey(key); - msg.setData(json); - deferredResultHolder.invokeAllResult(msg); - } else { - // 此处是上级发出的Broadcast指令 - } - } catch (ParseException | SipException | InvalidArgumentException | DocumentException 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 faa39241..74b63c87 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 @@ -1,6 +1,7 @@ package com.genersoft.iot.vmp.gb28181.transmit.event.request.impl; import com.genersoft.iot.vmp.common.VideoManagerConstants; +import com.genersoft.iot.vmp.conf.SipConfig; import com.genersoft.iot.vmp.conf.UserSetup; import com.genersoft.iot.vmp.gb28181.bean.*; import com.genersoft.iot.vmp.gb28181.event.DeviceOffLineDetector; @@ -49,6 +50,9 @@ public class NotifyRequestProcessor extends SIPRequestProcessorParent implements @Autowired private IVideoManagerStorager storager; + @Autowired + private SipConfig sipConfig; + @Autowired private IRedisCatchStorage redisCatchStorage; @@ -156,6 +160,9 @@ public class NotifyRequestProcessor extends SIPRequestProcessorParent implements * @param evt */ private void processNotifyAlarm(RequestEvent evt) { + if (!sipConfig.isAlarm()) { + return; + } try { Element rootElement = getRootElement(evt); Element deviceIdElement = rootElement.element("DeviceID"); 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 511083c0..a46b0034 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,5 +1,6 @@ package com.genersoft.iot.vmp.gb28181.transmit.event.request.impl.message.notify.cmd; +import com.genersoft.iot.vmp.conf.SipConfig; import com.genersoft.iot.vmp.conf.UserSetup; import com.genersoft.iot.vmp.gb28181.bean.*; import com.genersoft.iot.vmp.gb28181.event.DeviceOffLineDetector; @@ -38,6 +39,9 @@ public class AlarmNotifyMessageHandler extends SIPRequestProcessorParent impleme @Autowired private UserSetup userSetup; + @Autowired + private SipConfig sipConfig; + @Autowired private IVideoManagerStorager storager; @@ -54,6 +58,9 @@ public class AlarmNotifyMessageHandler extends SIPRequestProcessorParent impleme @Override public void handForDevice(RequestEvent evt, Device device, Element rootElement) { + if (!sipConfig.isAlarm()) { + return; + } Element deviceIdElement = rootElement.element("DeviceID"); String channelId = deviceIdElement.getText().toString(); DeviceAlarm deviceAlarm = new DeviceAlarm(); 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 3e7d5c4b..3339676e 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 @@ -6,6 +6,7 @@ import com.alibaba.fastjson.JSONObject; import com.genersoft.iot.vmp.common.VideoManagerConstants; import com.genersoft.iot.vmp.conf.MediaConfig; import com.genersoft.iot.vmp.conf.SipConfig; +import com.genersoft.iot.vmp.conf.UserSetup; import com.genersoft.iot.vmp.gb28181.bean.Device; import com.genersoft.iot.vmp.gb28181.session.SsrcConfig; import com.genersoft.iot.vmp.gb28181.session.VideoStreamSessionManager; @@ -52,7 +53,7 @@ public class MediaServerServiceImpl implements IMediaServerService, CommandLineR private Integer serverPort; @Autowired - private MediaConfig mediaConfig; + private UserSetup userSetup; @Autowired private ZLMRESTfulUtils zlmresTfulUtils; @@ -89,10 +90,10 @@ public class MediaServerServiceImpl implements IMediaServerService, CommandLineR if (mediaServerItem.getSsrcConfig() == null) { SsrcConfig ssrcConfig = new SsrcConfig(mediaServerItem.getId(), null, sipConfig.getDomain()); mediaServerItem.setSsrcConfig(ssrcConfig); - redisUtil.set(VideoManagerConstants.MEDIA_SERVER_PREFIX + mediaServerItem.getId(), mediaServerItem); + redisUtil.set(VideoManagerConstants.MEDIA_SERVER_PREFIX + userSetup.getServerId() + "_" + mediaServerItem.getId(), mediaServerItem); } // 查询redis是否存在此mediaServer - String key = VideoManagerConstants.MEDIA_SERVER_PREFIX + mediaServerItem.getId(); + String key = VideoManagerConstants.MEDIA_SERVER_PREFIX + userSetup.getServerId() + "_" + mediaServerItem.getId(); if (!redisUtil.hasKey(key)) { redisUtil.set(key, mediaServerItem); } @@ -110,7 +111,7 @@ public class MediaServerServiceImpl implements IMediaServerService, CommandLineR return null; } // 获取mediaServer可用的ssrc - String key = VideoManagerConstants.MEDIA_SERVER_PREFIX + mediaServerItem.getId(); + String key = VideoManagerConstants.MEDIA_SERVER_PREFIX + userSetup.getServerId() + "_" + mediaServerItem.getId(); SsrcConfig ssrcConfig = mediaServerItem.getSsrcConfig(); if (ssrcConfig == null) { @@ -156,7 +157,7 @@ public class MediaServerServiceImpl implements IMediaServerService, CommandLineR SsrcConfig ssrcConfig = mediaServerItem.getSsrcConfig(); ssrcConfig.releaseSsrc(ssrc); mediaServerItem.setSsrcConfig(ssrcConfig); - String key = VideoManagerConstants.MEDIA_SERVER_PREFIX + mediaServerItem.getId(); + String key = VideoManagerConstants.MEDIA_SERVER_PREFIX + userSetup.getServerId() + "_" + mediaServerItem.getId(); redisUtil.set(key, mediaServerItem); } @@ -166,7 +167,7 @@ public class MediaServerServiceImpl implements IMediaServerService, CommandLineR @Override public void clearRTPServer(MediaServerItem mediaServerItem) { mediaServerItem.setSsrcConfig(new SsrcConfig(mediaServerItem.getId(), null, sipConfig.getDomain())); - redisUtil.zAdd(VideoManagerConstants.MEDIA_SERVERS_ONLINE_PREFIX, mediaServerItem.getId(), 0); + redisUtil.zAdd(VideoManagerConstants.MEDIA_SERVERS_ONLINE_PREFIX + userSetup.getServerId(), mediaServerItem.getId(), 0); } @@ -186,15 +187,15 @@ public class MediaServerServiceImpl implements IMediaServerService, CommandLineR ) ); } - String key = VideoManagerConstants.MEDIA_SERVER_PREFIX + mediaServerItemInDataBase.getId(); + String key = VideoManagerConstants.MEDIA_SERVER_PREFIX + userSetup.getServerId() + "_" + mediaServerItemInDataBase.getId(); redisUtil.set(key, mediaServerItemInDataBase); } @Override public List getAll() { List result = new ArrayList<>(); - List mediaServerKeys = redisUtil.scan(String.format("%S*", VideoManagerConstants.MEDIA_SERVER_PREFIX)); - String onlineKey = VideoManagerConstants.MEDIA_SERVERS_ONLINE_PREFIX; + List mediaServerKeys = redisUtil.scan(String.format("%S*", VideoManagerConstants.MEDIA_SERVER_PREFIX+ userSetup.getServerId() + "_" )); + String onlineKey = VideoManagerConstants.MEDIA_SERVERS_ONLINE_PREFIX + userSetup.getServerId(); for (Object mediaServerKey : mediaServerKeys) { String key = (String) mediaServerKey; MediaServerItem mediaServerItem = (MediaServerItem) redisUtil.get(key); @@ -224,12 +225,12 @@ public class MediaServerServiceImpl implements IMediaServerService, CommandLineR @Override public List getAllOnline() { - String key = VideoManagerConstants.MEDIA_SERVERS_ONLINE_PREFIX; + String key = VideoManagerConstants.MEDIA_SERVERS_ONLINE_PREFIX + userSetup.getServerId(); Set mediaServerIdSet = redisUtil.zRevRange(key, 0, -1); List result = new ArrayList<>(); if (mediaServerIdSet != null && mediaServerIdSet.size() > 0) { for (String mediaServerId : mediaServerIdSet) { - String serverKey = VideoManagerConstants.MEDIA_SERVER_PREFIX + mediaServerId; + String serverKey = VideoManagerConstants.MEDIA_SERVER_PREFIX + userSetup.getServerId() + "_" + mediaServerId; result.add((MediaServerItem) redisUtil.get(serverKey)); } } @@ -246,7 +247,7 @@ public class MediaServerServiceImpl implements IMediaServerService, CommandLineR if (mediaServerId == null) { return null; } - String key = VideoManagerConstants.MEDIA_SERVER_PREFIX + mediaServerId; + String key = VideoManagerConstants.MEDIA_SERVER_PREFIX + userSetup.getServerId() + "_" + mediaServerId; return (MediaServerItem)redisUtil.get(key); } @@ -262,7 +263,7 @@ public class MediaServerServiceImpl implements IMediaServerService, CommandLineR @Override public void clearMediaServerForOnline() { - String key = VideoManagerConstants.MEDIA_SERVERS_ONLINE_PREFIX; + String key = VideoManagerConstants.MEDIA_SERVERS_ONLINE_PREFIX + userSetup.getServerId(); redisUtil.del(key); } @@ -324,10 +325,10 @@ public class MediaServerServiceImpl implements IMediaServerService, CommandLineR if (StringUtils.isEmpty(serverItem.getId())) { serverItem.setId(zlmServerConfig.getGeneralMediaServerId()); } - if (redisUtil.get(VideoManagerConstants.MEDIA_SERVER_PREFIX + serverItem.getId()) == null) { + if (redisUtil.get(VideoManagerConstants.MEDIA_SERVER_PREFIX + userSetup.getServerId() + "_" + serverItem.getId()) == null) { SsrcConfig ssrcConfig = new SsrcConfig(serverItem.getId(), null, sipConfig.getDomain()); serverItem.setSsrcConfig(ssrcConfig); - redisUtil.set(VideoManagerConstants.MEDIA_SERVER_PREFIX + serverItem.getId(), serverItem); + redisUtil.set(VideoManagerConstants.MEDIA_SERVER_PREFIX + userSetup.getServerId() + "_" + serverItem.getId(), serverItem); } serverItem.setStatus(true); @@ -405,7 +406,7 @@ public class MediaServerServiceImpl implements IMediaServerService, CommandLineR @Override public void resetOnlineServerItem(MediaServerItem serverItem) { // 更新缓存 - String key = VideoManagerConstants.MEDIA_SERVERS_ONLINE_PREFIX; + String key = VideoManagerConstants.MEDIA_SERVERS_ONLINE_PREFIX + userSetup.getServerId(); // 使用zset的分数作为当前并发量, 默认值设置为0 if (redisUtil.zScore(key, serverItem.getId()) == null) { // 不存在则设置默认值 已存在则重置 redisUtil.zAdd(key, serverItem.getId(), 0L); @@ -431,14 +432,14 @@ public class MediaServerServiceImpl implements IMediaServerService, CommandLineR if (mediaServerId == null) { return; } - String key = VideoManagerConstants.MEDIA_SERVERS_ONLINE_PREFIX; + String key = VideoManagerConstants.MEDIA_SERVERS_ONLINE_PREFIX + userSetup.getServerId(); redisUtil.zIncrScore(key, mediaServerId, 1); } @Override public void removeCount(String mediaServerId) { - String key = VideoManagerConstants.MEDIA_SERVERS_ONLINE_PREFIX; + String key = VideoManagerConstants.MEDIA_SERVERS_ONLINE_PREFIX + userSetup.getServerId(); redisUtil.zIncrScore(key, mediaServerId, - 1); } @@ -448,7 +449,7 @@ public class MediaServerServiceImpl implements IMediaServerService, CommandLineR */ @Override public MediaServerItem getMediaServerForMinimumLoad() { - String key = VideoManagerConstants.MEDIA_SERVERS_ONLINE_PREFIX; + String key = VideoManagerConstants.MEDIA_SERVERS_ONLINE_PREFIX + userSetup.getServerId(); if (redisUtil.zSize(key) == null || redisUtil.zSize(key) == 0) { logger.info("获取负载最低的节点时无在线节点"); @@ -580,8 +581,8 @@ public class MediaServerServiceImpl implements IMediaServerService, CommandLineR @Override public void delete(String id) { - redisUtil.zRemove(VideoManagerConstants.MEDIA_SERVERS_ONLINE_PREFIX, id); - String key = VideoManagerConstants.MEDIA_SERVER_PREFIX + id; + redisUtil.zRemove(VideoManagerConstants.MEDIA_SERVERS_ONLINE_PREFIX + userSetup.getServerId() + "_", id); + String key = VideoManagerConstants.MEDIA_SERVER_PREFIX + userSetup.getServerId() + "_" + id; redisUtil.del(key); mediaServerMapper.delOne(id); } 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 172213d2..3314fb20 100644 --- a/src/main/java/com/genersoft/iot/vmp/storager/IRedisCatchStorage.java +++ b/src/main/java/com/genersoft/iot/vmp/storager/IRedisCatchStorage.java @@ -121,7 +121,7 @@ public interface IRedisCatchStorage { /** * 在redis添加wvp的信息 */ - void updateWVPInfo(String id, JSONObject jsonObject, int time); + void updateWVPInfo(JSONObject jsonObject, int time); /** * 发送推流生成与推流消失消息 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 835f942d..c008d1e5 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 @@ -41,7 +41,7 @@ public class RedisCatchStorageImpl implements IRedisCatchStorage { */ @Override public boolean startPlay(StreamInfo stream) { - return redis.set(String.format("%S_%s_%s_%s", VideoManagerConstants.PLAYER_PREFIX, stream.getStreamId(),stream.getDeviceID(), stream.getChannelId()), + return redis.set(String.format("%S_%S_%s_%s_%s", VideoManagerConstants.PLAYER_PREFIX, userSetup.getServerId(), stream.getStreamId(),stream.getDeviceID(), stream.getChannelId()), stream); } @@ -53,7 +53,8 @@ public class RedisCatchStorageImpl implements IRedisCatchStorage { @Override public boolean stopPlay(StreamInfo streamInfo) { if (streamInfo == null) return false; - return redis.del(String.format("%S_%s_%s_%s", VideoManagerConstants.PLAYER_PREFIX, + return redis.del(String.format("%S_%s_%s_%s_%s", VideoManagerConstants.PLAYER_PREFIX, + userSetup.getServerId(), streamInfo.getStreamId(), streamInfo.getDeviceID(), streamInfo.getChannelId())); @@ -65,22 +66,23 @@ public class RedisCatchStorageImpl implements IRedisCatchStorage { */ @Override public StreamInfo queryPlay(StreamInfo streamInfo) { - return (StreamInfo)redis.get(String.format("%S_%s_%s_%s", + return (StreamInfo)redis.get(String.format("%S_%s_%s_%s_%s", VideoManagerConstants.PLAYER_PREFIX, + userSetup.getServerId(), streamInfo.getStreamId(), streamInfo.getDeviceID(), streamInfo.getChannelId())); } @Override public StreamInfo queryPlayByStreamId(String streamId) { - List playLeys = redis.scan(String.format("%S_%s_*", VideoManagerConstants.PLAYER_PREFIX, streamId)); + List playLeys = redis.scan(String.format("%S_%s_%s_*", VideoManagerConstants.PLAYER_PREFIX, userSetup.getServerId(), streamId)); if (playLeys == null || playLeys.size() == 0) return null; return (StreamInfo)redis.get(playLeys.get(0).toString()); } @Override public StreamInfo queryPlaybackByStreamId(String streamId) { - List playLeys = redis.scan(String.format("%S_%s_*", VideoManagerConstants.PLAY_BLACK_PREFIX, streamId)); + List playLeys = redis.scan(String.format("%S_%s_%s_*", VideoManagerConstants.PLAY_BLACK_PREFIX, userSetup.getServerId(), streamId)); if (playLeys == null || playLeys.size() == 0) return null; return (StreamInfo)redis.get(playLeys.get(0).toString()); } @@ -88,7 +90,8 @@ public class RedisCatchStorageImpl implements IRedisCatchStorage { @Override public StreamInfo queryPlayByDevice(String deviceId, String channelId) { // List playLeys = redis.keys(String.format("%S_*_%s_%s", VideoManagerConstants.PLAYER_PREFIX, - List playLeys = redis.scan(String.format("%S_*_%s_%s", VideoManagerConstants.PLAYER_PREFIX, + List playLeys = redis.scan(String.format("%S_%s_*_%s_%s", VideoManagerConstants.PLAYER_PREFIX, + userSetup.getServerId(), deviceId, channelId)); if (playLeys == null || playLeys.size() == 0) return null; @@ -99,7 +102,7 @@ public class RedisCatchStorageImpl implements IRedisCatchStorage { public Map queryPlayByDeviceId(String deviceId) { Map streamInfos = new HashMap<>(); // List playLeys = redis.keys(String.format("%S_*_%S_*", VideoManagerConstants.PLAYER_PREFIX, deviceId)); - List players = redis.scan(String.format("%S_*_%S_*", VideoManagerConstants.PLAYER_PREFIX, deviceId)); + List players = redis.scan(String.format("%S_%s_*_%S_*", VideoManagerConstants.PLAYER_PREFIX, userSetup.getServerId(),deviceId)); if (players.size() == 0) return streamInfos; for (int i = 0; i < players.size(); i++) { String key = (String) players.get(i); @@ -112,13 +115,13 @@ public class RedisCatchStorageImpl implements IRedisCatchStorage { @Override public boolean startPlayback(StreamInfo stream) { - return redis.set(String.format("%S_%s_%s_%s", VideoManagerConstants.PLAY_BLACK_PREFIX, stream.getStreamId(), + return redis.set(String.format("%S_%s_%s_%s_%s", VideoManagerConstants.PLAY_BLACK_PREFIX, userSetup.getServerId(),stream.getStreamId(), stream.getDeviceID(), stream.getChannelId()), stream); } @Override public boolean startDownload(StreamInfo streamInfo) { - return redis.set(String.format("%S_%s_%s_%s", VideoManagerConstants.DOWNLOAD_PREFIX, streamInfo.getStreamId(), + return redis.set(String.format("%S_%s_%s_%s_%s", VideoManagerConstants.DOWNLOAD_PREFIX, userSetup.getServerId(),streamInfo.getStreamId(), streamInfo.getDeviceID(), streamInfo.getChannelId()), streamInfo); } @@ -131,7 +134,8 @@ public class RedisCatchStorageImpl implements IRedisCatchStorage { deviceChannel.setDeviceId(streamInfo.getDeviceID()); deviceChannelMapper.update(deviceChannel); } - return redis.del(String.format("%S_%s_%s_%s", VideoManagerConstants.PLAY_BLACK_PREFIX, + return redis.del(String.format("%S_%s_%s_%s_%s", VideoManagerConstants.PLAY_BLACK_PREFIX, + userSetup.getServerId(), streamInfo.getStreamId(), streamInfo.getDeviceID(), streamInfo.getChannelId())); @@ -142,11 +146,13 @@ public class RedisCatchStorageImpl implements IRedisCatchStorage { // String format = String.format("%S_*_%s_%s", VideoManagerConstants.PLAY_BLACK_PREFIX, // deviceId, // code); - List playLeys = redis.scan(String.format("%S_*_%s_%s", VideoManagerConstants.PLAY_BLACK_PREFIX, + List playLeys = redis.scan(String.format("%S_%s_*_%s_%s", VideoManagerConstants.PLAY_BLACK_PREFIX, + userSetup.getServerId(), deviceId, code)); if (playLeys == null || playLeys.size() == 0) { - playLeys = redis.scan(String.format("%S_*_*_%s", VideoManagerConstants.PLAY_BLACK_PREFIX, + playLeys = redis.scan(String.format("%S_%s_*_*_%s", VideoManagerConstants.PLAY_BLACK_PREFIX, + userSetup.getServerId(), deviceId)); } if (playLeys == null || playLeys.size() == 0) return null; @@ -155,63 +161,63 @@ public class RedisCatchStorageImpl implements IRedisCatchStorage { @Override public void updatePlatformCatchInfo(ParentPlatformCatch parentPlatformCatch) { - String key = VideoManagerConstants.PLATFORM_CATCH_PREFIX + parentPlatformCatch.getId(); + String key = VideoManagerConstants.PLATFORM_CATCH_PREFIX + userSetup.getServerId() + "_" + parentPlatformCatch.getId(); redis.set(key, parentPlatformCatch); } @Override public void updatePlatformKeepalive(ParentPlatform parentPlatform) { - String key = VideoManagerConstants.PLATFORM_KEEPLIVEKEY_PREFIX + parentPlatform.getServerGBId(); + String key = VideoManagerConstants.PLATFORM_KEEPALIVE_PREFIX + userSetup.getServerId() + "_" + parentPlatform.getServerGBId(); redis.set(key, "", Integer.parseInt(parentPlatform.getKeepTimeout())); } @Override public void updatePlatformRegister(ParentPlatform parentPlatform) { - String key = VideoManagerConstants.PLATFORM_REGISTER_PREFIX + parentPlatform.getServerGBId(); + String key = VideoManagerConstants.PLATFORM_REGISTER_PREFIX + userSetup.getServerId() + "_" + parentPlatform.getServerGBId(); redis.set(key, "", Integer.parseInt(parentPlatform.getExpires())); } @Override public ParentPlatformCatch queryPlatformCatchInfo(String platformGbId) { - return (ParentPlatformCatch)redis.get(VideoManagerConstants.PLATFORM_CATCH_PREFIX + platformGbId); + return (ParentPlatformCatch)redis.get(VideoManagerConstants.PLATFORM_CATCH_PREFIX + userSetup.getServerId() + "_" + platformGbId); } @Override public void delPlatformCatchInfo(String platformGbId) { - redis.del(VideoManagerConstants.PLATFORM_CATCH_PREFIX + platformGbId); + redis.del(VideoManagerConstants.PLATFORM_CATCH_PREFIX + userSetup.getServerId() + "_" + platformGbId); } @Override public void delPlatformKeepalive(String platformGbId) { - redis.del(VideoManagerConstants.PLATFORM_KEEPLIVEKEY_PREFIX + platformGbId); + redis.del(VideoManagerConstants.PLATFORM_KEEPALIVE_PREFIX + userSetup.getServerId() + "_" + platformGbId); } @Override public void delPlatformRegister(String platformGbId) { - redis.del(VideoManagerConstants.PLATFORM_REGISTER_PREFIX + platformGbId); + redis.del(VideoManagerConstants.PLATFORM_REGISTER_PREFIX + userSetup.getServerId() + "_" + platformGbId); } @Override public void updatePlatformRegisterInfo(String callId, String platformGbId) { - String key = VideoManagerConstants.PLATFORM_REGISTER_INFO_PREFIX + callId; + String key = VideoManagerConstants.PLATFORM_REGISTER_INFO_PREFIX + userSetup.getServerId() + "_" + callId; redis.set(key, platformGbId); } @Override public String queryPlatformRegisterInfo(String callId) { - return (String)redis.get(VideoManagerConstants.PLATFORM_REGISTER_INFO_PREFIX + callId); + return (String)redis.get(VideoManagerConstants.PLATFORM_REGISTER_INFO_PREFIX + userSetup.getServerId() + "_" + callId); } @Override public void delPlatformRegisterInfo(String callId) { - redis.del(VideoManagerConstants.PLATFORM_REGISTER_INFO_PREFIX + callId); + redis.del(VideoManagerConstants.PLATFORM_REGISTER_INFO_PREFIX + userSetup.getServerId() + "_" + callId); } @Override public void cleanPlatformRegisterInfos() { - List regInfos = redis.scan(VideoManagerConstants.PLATFORM_REGISTER_INFO_PREFIX + "*"); + List regInfos = redis.scan(VideoManagerConstants.PLATFORM_REGISTER_INFO_PREFIX + userSetup.getServerId() + "_" + "*"); for (Object key : regInfos) { redis.del(key.toString()); } @@ -219,19 +225,19 @@ public class RedisCatchStorageImpl implements IRedisCatchStorage { @Override public void updateSendRTPSever(SendRtpItem sendRtpItem) { - String key = VideoManagerConstants.PLATFORM_SEND_RTP_INFO_PREFIX + sendRtpItem.getPlatformId() + "_" + sendRtpItem.getChannelId(); + String key = VideoManagerConstants.PLATFORM_SEND_RTP_INFO_PREFIX + userSetup.getServerId() + "_" + sendRtpItem.getPlatformId() + "_" + sendRtpItem.getChannelId(); redis.set(key, sendRtpItem); } @Override public SendRtpItem querySendRTPServer(String platformGbId, String channelId) { - String key = VideoManagerConstants.PLATFORM_SEND_RTP_INFO_PREFIX + platformGbId + "_" + channelId; + String key = VideoManagerConstants.PLATFORM_SEND_RTP_INFO_PREFIX + userSetup.getServerId() + "_" + platformGbId + "_" + channelId; return (SendRtpItem)redis.get(key); } @Override public List querySendRTPServer(String platformGbId) { - String key = VideoManagerConstants.PLATFORM_SEND_RTP_INFO_PREFIX + platformGbId + "_*"; + String key = VideoManagerConstants.PLATFORM_SEND_RTP_INFO_PREFIX + userSetup.getServerId() + "_" + platformGbId + "_*"; List queryResult = redis.scan(key); List result= new ArrayList<>(); @@ -250,7 +256,7 @@ public class RedisCatchStorageImpl implements IRedisCatchStorage { */ @Override public void deleteSendRTPServer(String platformGbId, String channelId) { - String key = VideoManagerConstants.PLATFORM_SEND_RTP_INFO_PREFIX + platformGbId + "_" + channelId; + String key = VideoManagerConstants.PLATFORM_SEND_RTP_INFO_PREFIX + userSetup.getServerId() + "_" + platformGbId + "_" + channelId; redis.del(key); } @@ -260,7 +266,7 @@ public class RedisCatchStorageImpl implements IRedisCatchStorage { */ @Override public boolean isChannelSendingRTP(String channelId) { - String key = VideoManagerConstants.PLATFORM_SEND_RTP_INFO_PREFIX + "*_" + channelId; + String key = VideoManagerConstants.PLATFORM_SEND_RTP_INFO_PREFIX + userSetup.getServerId() + "_" + "*_" + channelId; List RtpStreams = redis.scan(key); if (RtpStreams.size() > 0) { return true; @@ -271,7 +277,8 @@ public class RedisCatchStorageImpl implements IRedisCatchStorage { @Override public void clearCatchByDeviceId(String deviceId) { - List playLeys = redis.scan(String.format("%S_*_%s_*", VideoManagerConstants.PLAYER_PREFIX, + List playLeys = redis.scan(String.format("%S_%s_*_%s_*", VideoManagerConstants.PLAYER_PREFIX, + userSetup.getServerId(), deviceId)); if (playLeys.size() > 0) { for (Object key : playLeys) { @@ -279,7 +286,8 @@ public class RedisCatchStorageImpl implements IRedisCatchStorage { } } - List playBackers = redis.scan(String.format("%S_*_%s_*", VideoManagerConstants.PLAY_BLACK_PREFIX, + List playBackers = redis.scan(String.format("%S_%s_*_%s_*", VideoManagerConstants.PLAY_BLACK_PREFIX, + userSetup.getServerId(), deviceId)); if (playBackers.size() > 0) { for (Object key : playBackers) { @@ -290,7 +298,7 @@ public class RedisCatchStorageImpl implements IRedisCatchStorage { @Override public void outlineForAll() { - List onlineDevices = redis.scan(VideoManagerConstants.KEEPLIVEKEY_PREFIX + "*" ); + List onlineDevices = redis.scan(VideoManagerConstants.KEEPLIVEKEY_PREFIX + userSetup.getServerId() + "_" + "*" ); for (int i = 0; i < onlineDevices.size(); i++) { String key = (String) onlineDevices.get(i); redis.del(key); @@ -300,7 +308,7 @@ public class RedisCatchStorageImpl implements IRedisCatchStorage { @Override public List getOnlineForAll() { List result = new ArrayList<>(); - List onlineDevices = redis.scan(VideoManagerConstants.KEEPLIVEKEY_PREFIX + "*" ); + List onlineDevices = redis.scan(VideoManagerConstants.KEEPLIVEKEY_PREFIX + userSetup.getServerId() + "_" + "*" ); for (int i = 0; i < onlineDevices.size(); i++) { String key = (String) onlineDevices.get(i); result.add((String) redis.get(key)); @@ -309,14 +317,14 @@ public class RedisCatchStorageImpl implements IRedisCatchStorage { } @Override - public void updateWVPInfo(String id, JSONObject jsonObject, int time) { - String key = VideoManagerConstants.WVP_SERVER_PREFIX + id; + public void updateWVPInfo(JSONObject jsonObject, int time) { + String key = VideoManagerConstants.WVP_SERVER_PREFIX + userSetup.getServerId(); redis.set(key, jsonObject, time); } @Override public void sendStreamChangeMsg(String type, JSONObject jsonObject) { - String key = VideoManagerConstants.WVP_MSG_STREAM_PUSH_CHANGE_PREFIX + type; + String key = VideoManagerConstants.WVP_MSG_STREAM_CHANGE__PREFIX + type; logger.debug("[redis 流变化事件] {}: {}", key, jsonObject.toString()); redis.convertAndSend(key, jsonObject); } @@ -338,7 +346,7 @@ public class RedisCatchStorageImpl implements IRedisCatchStorage { @Override public StreamInfo queryDownloadByStreamId(String streamId) { - List playLeys = redis.scan(String.format("%S_%s_*", VideoManagerConstants.DOWNLOAD_PREFIX, streamId)); + List playLeys = redis.scan(String.format("%S_%s_%s_*", VideoManagerConstants.DOWNLOAD_PREFIX, userSetup.getServerId(), streamId)); if (playLeys == null || playLeys.size() == 0) return null; return (StreamInfo)redis.get(playLeys.get(0).toString()); } diff --git a/src/main/resources/all-application.yml b/src/main/resources/all-application.yml index 6328bc37..752008b2 100644 --- a/src/main/resources/all-application.yml +++ b/src/main/resources/all-application.yml @@ -80,6 +80,8 @@ sip: ptz-speed: 50 # TODO [可选] 收到心跳后自动上线, 重启服务后会将所有设备置为离线,默认false,等待注册后上线。设置为true则收到心跳设置为上线。 # keepalliveToOnline: false + # 是否存储alarm信息 + alarm: false #zlm 默认服务器配置 media: @@ -134,7 +136,7 @@ logging: level: com.genersoft.iot: debug com.genersoft.iot.vmp.storager.dao: info - com.genersoft.iot.vmp.gb28181: info + com.genersoft.iot.vmp.gb28181: debug # [根据业务需求配置] user-settings: # [可选] 服务ID,不写则为000000