diff --git a/pom.xml b/pom.xml
index 991abc68..987e76e9 100644
--- a/pom.xml
+++ b/pom.xml
@@ -11,7 +11,7 @@
com.genersoft
wvp-pro
- 2.0
+ 2.0.2
web video platform
国标28181视频平台
@@ -148,12 +148,14 @@
1.3.0-91
+
- log4j
- log4j
- 1.2.17
+ org.slf4j
+ log4j-over-slf4j
+ 1.7.35
+
org.dom4j
@@ -228,6 +230,10 @@
spring-boot-starter-test
+
+ org.projectlombok
+ lombok
+
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 76b44271..426e2e58 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
@@ -5,6 +5,7 @@ import com.genersoft.iot.vmp.gb28181.bean.DeviceChannel;
import com.genersoft.iot.vmp.gb28181.bean.GbStream;
import com.genersoft.iot.vmp.gb28181.event.offline.OfflineEvent;
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.subscribe.catalog.CatalogEvent;
import com.genersoft.iot.vmp.media.zlm.event.ZLMOfflineEvent;
@@ -67,6 +68,16 @@ public class EventPublisher {
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/offline/KeepaliveTimeoutListenerForPlatform.java b/src/main/java/com/genersoft/iot/vmp/gb28181/event/offline/KeepaliveTimeoutListenerForPlatform.java
index ea322d12..9ba0c055 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
@@ -66,7 +66,7 @@ public class KeepaliveTimeoutListenerForPlatform extends RedisKeyExpirationEvent
}else if (expiredKey.startsWith(PLATFORM_REGISTER_PREFIX)) {
String platformGBId = expiredKey.substring(PLATFORM_REGISTER_PREFIX.length(),expiredKey.length());
- publisher.platformNotRegisterEventPublish(platformGBId);
+ publisher.platformRegisterCycleEventPublish(platformGBId);
}else if (expiredKey.startsWith(KEEPLIVEKEY_PREFIX)){
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/platformNotRegister/PlatformCycleRegisterEvent.java b/src/main/java/com/genersoft/iot/vmp/gb28181/event/platformNotRegister/PlatformCycleRegisterEvent.java
new file mode 100644
index 00000000..c2ff61f3
--- /dev/null
+++ b/src/main/java/com/genersoft/iot/vmp/gb28181/event/platformNotRegister/PlatformCycleRegisterEvent.java
@@ -0,0 +1,24 @@
+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
new file mode 100644
index 00000000..996f65dd
--- /dev/null
+++ b/src/main/java/com/genersoft/iot/vmp/gb28181/event/platformNotRegister/PlatformCycleRegisterEventLister.java
@@ -0,0 +1,44 @@
+package com.genersoft.iot.vmp.gb28181.event.platformNotRegister;
+
+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.IVideoManagerStorager;
+import lombok.extern.slf4j.Slf4j;
+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;
+
+@Slf4j
+@Component
+public class PlatformCycleRegisterEventLister implements ApplicationListener {
+ @Autowired
+ private IVideoManagerStorager storager;
+ @Autowired
+ private ISIPCommanderForPlatform sipCommanderFroPlatform;
+
+ @Override
+ public void onApplicationEvent(PlatformCycleRegisterEvent event) {
+ log.info("上级平台周期注册事件");
+ ParentPlatform parentPlatform = storager.queryParentPlatByServerGBId(event.getPlatformGbID());
+ if (parentPlatform == null) {
+ log.info("[ 平台未注册事件 ] 平台已经删除!!! 平台国标ID:" + event.getPlatformGbID());
+ return;
+ }
+ Timer timer = new Timer();
+ SipSubscribe.Event okEvent = (responseEvent)->{
+ timer.cancel();
+ };
+ sipCommanderFroPlatform.register(parentPlatform, null, okEvent);
+ timer.schedule(new TimerTask() {
+ @Override
+ public void run() {
+ log.info("[平台注册]再次向平台注册,平台国标ID:" + event.getPlatformGbID());
+ sipCommanderFroPlatform.register(parentPlatform, null, okEvent);
+ }
+ }, 15*1000 ,Long.parseLong(parentPlatform.getExpires())* 1000);
+ }
+}
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/message/MessageRequestProcessor.java b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/message/MessageRequestProcessor.java
index bd053446..ba95cf6a 100644
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/message/MessageRequestProcessor.java
+++ b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/message/MessageRequestProcessor.java
@@ -77,7 +77,14 @@ public class MessageRequestProcessor extends SIPRequestProcessorParent implement
sipSubscribe.getErrorSubscribe(callIdHeader.getCallId()).response(eventResult);
};
}else {
- Element rootElement = getRootElement(evt);
+ Element rootElement = null;
+ try {
+ rootElement = getRootElement(evt);
+ } catch (DocumentException e) {
+ logger.warn("解析XML消息内容异常", e);
+ // 不存在则回复404
+ responseAck(evt, Response.BAD_REQUEST, e.getMessage());
+ }
String name = rootElement.getName();
IMessageHandler messageHandler = messageHandlerMap.get(name);
if (messageHandler != null) {
@@ -98,8 +105,6 @@ public class MessageRequestProcessor extends SIPRequestProcessorParent implement
logger.warn("参数无效", e);
} catch (ParseException e) {
logger.warn("SIP回复时解析异常", e);
- } catch (DocumentException e) {
- logger.warn("解析XML消息内容异常", e);
}
}
diff --git a/src/main/java/com/genersoft/iot/vmp/service/impl/StreamPushServiceImpl.java b/src/main/java/com/genersoft/iot/vmp/service/impl/StreamPushServiceImpl.java
index d3d32499..948c61ad 100644
--- a/src/main/java/com/genersoft/iot/vmp/service/impl/StreamPushServiceImpl.java
+++ b/src/main/java/com/genersoft/iot/vmp/service/impl/StreamPushServiceImpl.java
@@ -118,7 +118,7 @@ public class StreamPushServiceImpl implements IStreamPushService {
@Override
public List getPushList(String mediaServerId) {
- return streamPushMapper.selectAllByMediaServerId(mediaServerId);
+ return streamPushMapper.selectAllByMediaServerIdWithOutGbID(mediaServerId);
}
@Override
@@ -204,7 +204,9 @@ public class StreamPushServiceImpl implements IStreamPushService {
Map streamInfoPushItemMap = new HashMap<>();
if (pushList.size() > 0) {
for (StreamPushItem streamPushItem : pushList) {
- pushItemMap.put(streamPushItem.getApp() + streamPushItem.getStream(), streamPushItem);
+ if (StringUtils.isEmpty(streamPushItem.getGbId())) {
+ pushItemMap.put(streamPushItem.getApp() + streamPushItem.getStream(), streamPushItem);
+ }
}
}
if (mediaItems.size() > 0) {
@@ -268,7 +270,7 @@ public class StreamPushServiceImpl implements IStreamPushService {
@Override
public void zlmServerOffline(String mediaServerId) {
- List streamPushItems = streamPushMapper.selectAllByMediaServerId(mediaServerId);
+ List streamPushItems = streamPushMapper.selectAllByMediaServerIdWithOutGbID(mediaServerId);
// 移除没有GBId的推流
streamPushMapper.deleteWithoutGBId(mediaServerId);
gbStreamMapper.deleteWithoutGBId("push", mediaServerId);
diff --git a/src/main/java/com/genersoft/iot/vmp/storager/IVideoManagerStorager.java b/src/main/java/com/genersoft/iot/vmp/storager/IVideoManagerStorager.java
index e4bda3f0..038fe2b8 100644
--- a/src/main/java/com/genersoft/iot/vmp/storager/IVideoManagerStorager.java
+++ b/src/main/java/com/genersoft/iot/vmp/storager/IVideoManagerStorager.java
@@ -470,4 +470,6 @@ public interface IVideoManagerStorager {
void delCatalogByPlatformId(String serverGBId);
void delRelationByPlatformId(String serverGBId);
+
+ PlatformCatalog queryDefaultCatalogInPlatform(String platformId);
}
diff --git a/src/main/java/com/genersoft/iot/vmp/storager/dao/PlatformCatalogMapper.java b/src/main/java/com/genersoft/iot/vmp/storager/dao/PlatformCatalogMapper.java
index 59ecdbcb..95015bda 100644
--- a/src/main/java/com/genersoft/iot/vmp/storager/dao/PlatformCatalogMapper.java
+++ b/src/main/java/com/genersoft/iot/vmp/storager/dao/PlatformCatalogMapper.java
@@ -41,4 +41,7 @@ public interface PlatformCatalogMapper {
@Select("SELECT *, (SELECT COUNT(1) from platform_catalog where parentId = pc.id) as childrenCount FROM platform_catalog pc WHERE pc.platformId=#{platformId}")
List selectByPlatForm(String platformId);
+
+ @Select("SELECT pc.* FROM platform_catalog pc WHERE pc.id = (SELECT pp.catalogId from parent_platform pp WHERE pp.serverGBId=#{platformId})")
+ PlatformCatalog selectDefaultByPlatFormId(String platformId);
}
diff --git a/src/main/java/com/genersoft/iot/vmp/storager/dao/StreamPushMapper.java b/src/main/java/com/genersoft/iot/vmp/storager/dao/StreamPushMapper.java
index e072e274..08b7c827 100644
--- a/src/main/java/com/genersoft/iot/vmp/storager/dao/StreamPushMapper.java
+++ b/src/main/java/com/genersoft/iot/vmp/storager/dao/StreamPushMapper.java
@@ -32,6 +32,14 @@ public interface StreamPushMapper {
@Delete("DELETE FROM stream_push WHERE app=#{app} AND stream=#{stream}")
int del(String app, String stream);
+ @Delete("")
+ int delAllWithoutGBId(List streamPushItems);
+
@Delete("