From 45e9fc880c61e12d6415755ee2a29f79fcf81fbb Mon Sep 17 00:00:00 2001
From: 648540858 <648540858@qq.com>
Date: 星期五, 11 三月 2022 09:49:38 +0800
Subject: [PATCH] Merge branch 'wvp-28181-2.0' into wvp-28181-2.0
---
src/main/java/com/genersoft/iot/vmp/gb28181/event/online/OnlineEventListener.java | 26 +-
src/main/java/com/genersoft/iot/vmp/service/impl/StreamPushServiceImpl.java | 60 ++++-
src/main/java/com/genersoft/iot/vmp/gb28181/bean/SubscribeInfo.java | 26 ++
src/main/java/com/genersoft/iot/vmp/gb28181/bean/SendRtpItem.java | 2
src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/impl/SIPCommander.java | 2
src/main/java/com/genersoft/iot/vmp/gb28181/bean/SubscribeHolder.java | 37 +++
src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/SubscribeRequestProcessor.java | 55 +++-
src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/SIPRequestHeaderPlarformProvider.java | 106 ++++----
src/main/java/com/genersoft/iot/vmp/gb28181/event/EventPublisher.java | 18 +
src/main/java/com/genersoft/iot/vmp/gb28181/auth/RegisterLogicHandler.java | 26 +-
src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/SIPRequestHeaderProvider.java | 3
src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/message/MessageRequestProcessor.java | 6
src/main/java/com/genersoft/iot/vmp/gb28181/event/online/OnlineEvent.java | 11
src/main/java/com/genersoft/iot/vmp/conf/MediaConfig.java | 4
src/main/java/com/genersoft/iot/vmp/gb28181/event/offline/OfflineEventListener.java | 2
src/main/java/com/genersoft/iot/vmp/service/impl/MediaServerServiceImpl.java | 10
src/main/java/com/genersoft/iot/vmp/gb28181/event/subscribe/catalog/CatalogEventLister.java | 14
src/main/java/com/genersoft/iot/vmp/service/impl/DeviceServiceImpl.java | 4
src/main/java/com/genersoft/iot/vmp/gb28181/transmit/SIPProcessorObserver.java | 1
src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/RegisterRequestProcessor.java | 8
src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/message/response/cmd/CatalogResponseMessageHandler.java | 75 ++++--
src/main/java/com/genersoft/iot/vmp/gb28181/SipLayer.java | 5
src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/impl/SIPCommanderFroPlatform.java | 143 ++++++++----
src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/NotifyRequestProcessor.java | 7
src/main/java/com/genersoft/iot/vmp/gb28181/task/GPSSubscribeTask.java | 8
25 files changed, 451 insertions(+), 208 deletions(-)
diff --git a/src/main/java/com/genersoft/iot/vmp/conf/MediaConfig.java b/src/main/java/com/genersoft/iot/vmp/conf/MediaConfig.java
index 3f549e5..bdd1503 100644
--- a/src/main/java/com/genersoft/iot/vmp/conf/MediaConfig.java
+++ b/src/main/java/com/genersoft/iot/vmp/conf/MediaConfig.java
@@ -60,8 +60,8 @@
@Value("${media.secret}")
private String secret;
- @Value("${media.stream-none-reader-delay-ms:18000}")
- private int streamNoneReaderDelayMS = 18000;
+ @Value("${media.stream-none-reader-delay-ms:10000}")
+ private int streamNoneReaderDelayMS = 10000;
@Value("${media.rtp.enable}")
private boolean rtpEnable;
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/SipLayer.java b/src/main/java/com/genersoft/iot/vmp/gb28181/SipLayer.java
index 2f62287..1a5cce5 100644
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/SipLayer.java
+++ b/src/main/java/com/genersoft/iot/vmp/gb28181/SipLayer.java
@@ -47,7 +47,7 @@
Properties properties = new Properties();
properties.setProperty("javax.sip.STACK_NAME", "GB28181_SIP");
properties.setProperty("javax.sip.IP_ADDRESS", sipConfig.getMonitorIp());
- properties.setProperty("gov.nist.javax.sip.LOG_MESSAGE_CONTENT", "false");
+ properties.setProperty("gov.nist.javax.sip.LOG_MESSAGE_CONTENT", "true");
/**
* sip_server_log.log 鍜� sip_debug_log.log public static final int TRACE_NONE =
* 0; public static final int TRACE_MESSAGES = 16; public static final int
@@ -57,6 +57,7 @@
properties.setProperty("gov.nist.javax.sip.SERVER_LOG", "sip_server_log");
properties.setProperty("gov.nist.javax.sip.DEBUG_LOG", "sip_debug_log");
sipStack = (SipStackImpl) sipFactory.createSipStack(properties);
+
return sipStack;
}
@@ -70,6 +71,7 @@
tcpSipProvider = (SipProviderImpl)sipStack.createSipProvider(tcpListeningPoint);
tcpSipProvider.setDialogErrorsAutomaticallyHandled();
tcpSipProvider.addSipListener(sipProcessorObserver);
+// tcpSipProvider.setAutomaticDialogSupportEnabled(false);
logger.info("Sip Server TCP 鍚姩鎴愬姛 port {" + sipConfig.getMonitorIp() + ":" + sipConfig.getPort() + "}");
} catch (TransportNotSupportedException e) {
e.printStackTrace();
@@ -93,6 +95,7 @@
udpListeningPoint = sipStack.createListeningPoint(sipConfig.getMonitorIp(), sipConfig.getPort(), "UDP");
udpSipProvider = (SipProviderImpl)sipStack.createSipProvider(udpListeningPoint);
udpSipProvider.addSipListener(sipProcessorObserver);
+// udpSipProvider.setAutomaticDialogSupportEnabled(false);
} catch (TransportNotSupportedException e) {
e.printStackTrace();
} catch (InvalidArgumentException e) {
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/auth/RegisterLogicHandler.java b/src/main/java/com/genersoft/iot/vmp/gb28181/auth/RegisterLogicHandler.java
index c6fba3d..8239070 100644
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/auth/RegisterLogicHandler.java
+++ b/src/main/java/com/genersoft/iot/vmp/gb28181/auth/RegisterLogicHandler.java
@@ -27,18 +27,18 @@
public void onRegister(Device device) {
// 鍙湁绗竴娆℃敞鍐屾椂璋冪敤鏌ヨ璁惧淇℃伅锛屽闇�鏇存柊璋冪敤鏇存柊API鎺ュ彛
- // TODO 姝ゅ閿欒鏃犳硶鑾峰彇鍒伴�氶亾
- Device device1 = storager.queryVideoDevice(device.getDeviceId());
- if (device.isFirsRegister()) {
- logger.info("[{}] 棣栨娉ㄥ唽锛屾煡璇㈣澶囦俊鎭互鍙婇�氶亾淇℃伅", device.getDeviceId());
- try {
- Thread.sleep(100);
- cmder.deviceInfoQuery(device);
- Thread.sleep(100);
- cmder.catalogQuery(device, null);
- } catch (InterruptedException e) {
- e.printStackTrace();
- }
- }
+// // TODO 姝ゅ閿欒鏃犳硶鑾峰彇鍒伴�氶亾
+// Device device1 = storager.queryVideoDevice(device.getDeviceId());
+// if (device.isFirsRegister()) {
+// logger.info("[{}] 棣栨娉ㄥ唽锛屾煡璇㈣澶囦俊鎭互鍙婇�氶亾淇℃伅", device.getDeviceId());
+// try {
+// Thread.sleep(100);
+// cmder.deviceInfoQuery(device);
+// Thread.sleep(100);
+// cmder.catalogQuery(device, null);
+// } catch (InterruptedException e) {
+// e.printStackTrace();
+// }
+// }
}
}
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/bean/SendRtpItem.java b/src/main/java/com/genersoft/iot/vmp/gb28181/bean/SendRtpItem.java
index 3914fa1..a2c38ac 100644
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/bean/SendRtpItem.java
+++ b/src/main/java/com/genersoft/iot/vmp/gb28181/bean/SendRtpItem.java
@@ -220,4 +220,6 @@
public void setDialog(byte[] dialog) {
this.dialog = dialog;
}
+
+
}
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/bean/SubscribeHolder.java b/src/main/java/com/genersoft/iot/vmp/gb28181/bean/SubscribeHolder.java
new file mode 100644
index 0000000..a027486
--- /dev/null
+++ b/src/main/java/com/genersoft/iot/vmp/gb28181/bean/SubscribeHolder.java
@@ -0,0 +1,37 @@
+package com.genersoft.iot.vmp.gb28181.bean;
+
+import org.springframework.stereotype.Component;
+
+import java.util.concurrent.ConcurrentHashMap;
+
+@Component
+public class SubscribeHolder {
+
+ private static ConcurrentHashMap<String, SubscribeInfo> catalogMap = new ConcurrentHashMap<>();
+ private static ConcurrentHashMap<String, SubscribeInfo> mobilePositionMap = new ConcurrentHashMap<>();
+
+
+ public void putCatalogSubscribe(String platformId, SubscribeInfo subscribeInfo) {
+ catalogMap.put(platformId, subscribeInfo);
+ }
+
+ public SubscribeInfo getCatalogSubscribe(String platformId) {
+ return catalogMap.get(platformId);
+ }
+
+ public void removeCatalogSubscribe(String platformId) {
+ catalogMap.remove(platformId);
+ }
+
+ public void putMobilePositionSubscribe(String platformId, SubscribeInfo subscribeInfo) {
+ mobilePositionMap.put(platformId, subscribeInfo);
+ }
+
+ public SubscribeInfo getMobilePositionSubscribe(String platformId) {
+ return mobilePositionMap.get(platformId);
+ }
+
+ public void removeMobilePositionSubscribe(String platformId) {
+ mobilePositionMap.remove(platformId);
+ }
+}
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/bean/SubscribeInfo.java b/src/main/java/com/genersoft/iot/vmp/gb28181/bean/SubscribeInfo.java
index e9d4167..373533a 100644
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/bean/SubscribeInfo.java
+++ b/src/main/java/com/genersoft/iot/vmp/gb28181/bean/SubscribeInfo.java
@@ -1,13 +1,15 @@
package com.genersoft.iot.vmp.gb28181.bean;
+import com.genersoft.iot.vmp.utils.SerializeUtils;
+
+import javax.sip.Dialog;
import javax.sip.RequestEvent;
+import javax.sip.ServerTransaction;
import javax.sip.header.*;
import javax.sip.message.Request;
public class SubscribeInfo {
- public SubscribeInfo() {
- }
public SubscribeInfo(RequestEvent evt, String id) {
this.id = id;
@@ -23,6 +25,8 @@
this.eventType = eventHeader.getEventType();
ViaHeader viaHeader = (ViaHeader)request.getHeader(ViaHeader.NAME);
this.branch = viaHeader.getBranch();
+ this.transaction = evt.getServerTransaction();
+ this.dialog = evt.getDialog();
}
private String id;
@@ -33,6 +37,8 @@
private String fromTag;
private String toTag;
private String branch;
+ private ServerTransaction transaction;
+ private Dialog dialog;
public String getId() {
return id;
@@ -97,4 +103,20 @@
public void setBranch(String branch) {
this.branch = branch;
}
+
+ public ServerTransaction getTransaction() {
+ return transaction;
+ }
+
+ public void setTransaction(ServerTransaction transaction) {
+ this.transaction = transaction;
+ }
+
+ public Dialog getDialog() {
+ return dialog;
+ }
+
+ public void setDialog(Dialog dialog) {
+ this.dialog = dialog;
+ }
}
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 a9464b7..ffe477f 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
@@ -33,12 +33,20 @@
@Autowired
private ApplicationEventPublisher applicationEventPublisher;
+ public void onlineEventPublish(Device device, String from, int expires) {
+ OnlineEvent onEvent = new OnlineEvent(this);
+ onEvent.setDevice(device);
+ onEvent.setFrom(from);
+ onEvent.setExpires(expires);
+ applicationEventPublisher.publishEvent(onEvent);
+ }
+
public void onlineEventPublish(Device device, String from) {
OnlineEvent onEvent = new OnlineEvent(this);
onEvent.setDevice(device);
onEvent.setFrom(from);
- applicationEventPublisher.publishEvent(onEvent);
- }
+ applicationEventPublisher.publishEvent(onEvent);
+ }
public void outlineEventPublish(String deviceId, String from){
OfflineEvent outEvent = new OfflineEvent(this);
@@ -107,6 +115,12 @@
}
+ /**
+ *
+ * @param platformId
+ * @param deviceChannels
+ * @param type
+ */
public void catalogEventPublish(String platformId, List<DeviceChannel> deviceChannels, String type) {
CatalogEvent outEvent = new CatalogEvent(this);
List<DeviceChannel> channels = new ArrayList<>();
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 97e480c..9e67191 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
@@ -91,7 +91,7 @@
// 绂荤嚎閲婃斁鎵�鏈塻src
List<SsrcTransaction> ssrcTransactions = streamSession.getSsrcTransactionForAll(event.getDeviceId(), null, null, null);
- if (ssrcTransactions.size() > 0) {
+ if (ssrcTransactions != null && ssrcTransactions.size() > 0) {
for (SsrcTransaction ssrcTransaction : ssrcTransactions) {
mediaServerService.releaseSsrc(ssrcTransaction.getMediaServerId(), ssrcTransaction.getSsrc());
mediaServerService.closeRTPServer(event.getDeviceId(), ssrcTransaction.getChannelId(), ssrcTransaction.getStream());
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/event/online/OnlineEvent.java b/src/main/java/com/genersoft/iot/vmp/gb28181/event/online/OnlineEvent.java
index 73d7f1f..9aa9f8d 100644
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/event/online/OnlineEvent.java
+++ b/src/main/java/com/genersoft/iot/vmp/gb28181/event/online/OnlineEvent.java
@@ -23,6 +23,8 @@
private String from;
+ private int expires;
+
public Device getDevice() {
return device;
}
@@ -38,5 +40,12 @@
public void setFrom(String from) {
this.from = from;
}
-
+
+ public int getExpires() {
+ return expires;
+ }
+
+ public void setExpires(int expires) {
+ this.expires = expires;
+ }
}
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 c0de8de..27bc4bc 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
@@ -6,6 +6,7 @@
import com.genersoft.iot.vmp.gb28181.bean.DeviceChannel;
import com.genersoft.iot.vmp.gb28181.event.EventPublisher;
import com.genersoft.iot.vmp.gb28181.event.subscribe.catalog.CatalogEvent;
+import com.genersoft.iot.vmp.gb28181.transmit.cmd.impl.SIPCommander;
import com.genersoft.iot.vmp.service.IDeviceService;
import com.genersoft.iot.vmp.storager.dao.dto.User;
import org.slf4j.Logger;
@@ -51,6 +52,9 @@
@Autowired
private EventPublisher eventPublisher;
+ @Autowired
+ private SIPCommander cmder;
+
private SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
@Override
@@ -62,13 +66,21 @@
Device device = event.getDevice();
if (device == null) return;
String key = VideoManagerConstants.KEEPLIVEKEY_PREFIX + userSetup.getServerId() + "_" + event.getDevice().getDeviceId();
-
+ Device deviceInStore = storager.queryVideoDevice(device.getDeviceId());
+ device.setOnline(1);
+ // 澶勭悊涓婄嚎鐩戝惉
+ storager.updateDevice(device);
switch (event.getFrom()) {
// 娉ㄥ唽鏃惰Е鍙戠殑鍦ㄧ嚎浜嬩欢锛屽厛鍦╮edis涓鍔犺秴鏃惰秴鏃剁洃鍚�
case VideoManagerConstants.EVENT_ONLINE_REGISTER:
// 瓒呮椂鏃堕棿
redis.set(key, event.getDevice().getDeviceId(), sipConfig.getKeepaliveTimeOut());
device.setRegisterTime(format.format(System.currentTimeMillis()));
+ if (deviceInStore == null) { //绗竴娆′笂绾�
+ logger.info("[{}] 棣栨娉ㄥ唽锛屾煡璇㈣澶囦俊鎭互鍙婇�氶亾淇℃伅", device.getDeviceId());
+ cmder.deviceInfoQuery(device);
+ cmder.catalogQuery(device, null);
+ }
break;
// 璁惧涓诲姩鍙戦�佸績璺宠Е鍙戠殑鍦ㄧ嚎浜嬩欢
case VideoManagerConstants.EVENT_ONLINE_KEEPLIVE:
@@ -87,19 +99,11 @@
break;
}
- device.setOnline(1);
- Device deviceInStore = storager.queryVideoDevice(device.getDeviceId());
- if (deviceInStore != null && deviceInStore.getOnline() == 0) {
- List<DeviceChannel> deviceChannelList = storager.queryOnlineChannelsByDeviceId(device.getDeviceId());
- eventPublisher.catalogEventPublish(null, deviceChannelList, CatalogEvent.ON);
- }
- // 澶勭悊涓婄嚎鐩戝惉
- storager.updateDevice(device);
-
+ List<DeviceChannel> deviceChannelList = storager.queryOnlineChannelsByDeviceId(device.getDeviceId());
+ eventPublisher.catalogEventPublish(null, deviceChannelList, CatalogEvent.ON);
// 涓婄嚎娣诲姞璁㈤槄
if (device.getSubscribeCycleForCatalog() > 0) {
deviceService.addCatalogSubscribe(device);
}
-
}
}
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/event/subscribe/catalog/CatalogEventLister.java b/src/main/java/com/genersoft/iot/vmp/gb28181/event/subscribe/catalog/CatalogEventLister.java
index f959363..9e3b352 100644
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/event/subscribe/catalog/CatalogEventLister.java
+++ b/src/main/java/com/genersoft/iot/vmp/gb28181/event/subscribe/catalog/CatalogEventLister.java
@@ -52,6 +52,9 @@
@Autowired
private IGbStreamService gbStreamService;
+ @Autowired
+ private SubscribeHolder subscribeHolder;
+
@Override
public void onApplicationEvent(CatalogEvent event) {
SubscribeInfo subscribe = null;
@@ -62,7 +65,8 @@
parentPlatform = storager.queryParentPlatByServerGBId(event.getPlatformId());
if (parentPlatform != null && !parentPlatform.isStatus())return;
String key = VideoManagerConstants.SIP_SUBSCRIBE_PREFIX + userSetup.getServerId() + "_Catalog_" + event.getPlatformId();
- subscribe = redisCatchStorage.getSubscribe(key);
+// subscribe = redisCatchStorage.getSubscribe(key);
+ subscribe = subscribeHolder.getCatalogSubscribe(event.getPlatformId());
if (subscribe == null) {
logger.debug("鍙戦�佽闃呮秷鎭椂鍙戠幇璁㈤槄淇℃伅宸茬粡涓嶅瓨鍦�");
@@ -114,7 +118,8 @@
if (parentPlatforms != null && parentPlatforms.size() > 0) {
for (ParentPlatform platform : parentPlatforms) {
String key = VideoManagerConstants.SIP_SUBSCRIBE_PREFIX + userSetup.getServerId() + "_Catalog_" + platform.getServerGBId();
- SubscribeInfo subscribeInfo = redisCatchStorage.getSubscribe(key);
+// SubscribeInfo subscribeInfo = redisCatchStorage.getSubscribe(key);
+ SubscribeInfo subscribeInfo = subscribeHolder.getCatalogSubscribe(platform.getServerGBId());
if (subscribeInfo == null) continue;
logger.info("[Catalog浜嬩欢: {}]骞冲彴锛歿}锛屽奖鍝嶉�氶亾{}", event.getType(), platform.getServerGBId(), gbId);
List<DeviceChannel> deviceChannelList = new ArrayList<>();
@@ -153,8 +158,9 @@
List<ParentPlatform> parentPlatforms = parentPlatformMap.get(gbId);
if (parentPlatforms != null && parentPlatforms.size() > 0) {
for (ParentPlatform platform : parentPlatforms) {
- String key = VideoManagerConstants.SIP_SUBSCRIBE_PREFIX + userSetup.getServerId() + "_Catalog_" + platform.getServerGBId();
- SubscribeInfo subscribeInfo = redisCatchStorage.getSubscribe(key);
+// String key = VideoManagerConstants.SIP_SUBSCRIBE_PREFIX + userSetup.getServerId() + "_Catalog_" + platform.getServerGBId();
+// SubscribeInfo subscribeInfo = redisCatchStorage.getSubscribe(key);
+ SubscribeInfo subscribeInfo = subscribeHolder.getCatalogSubscribe(event.getPlatformId());
if (subscribeInfo == null) continue;
logger.info("[Catalog浜嬩欢: {}]骞冲彴锛歿}锛屽奖鍝嶉�氶亾{}", event.getType(), platform.getServerGBId(), gbId);
List<DeviceChannel> deviceChannelList = new ArrayList<>();
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/task/GPSSubscribeTask.java b/src/main/java/com/genersoft/iot/vmp/gb28181/task/GPSSubscribeTask.java
index 25dc75b..4b21638 100644
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/task/GPSSubscribeTask.java
+++ b/src/main/java/com/genersoft/iot/vmp/gb28181/task/GPSSubscribeTask.java
@@ -2,6 +2,7 @@
import com.genersoft.iot.vmp.gb28181.bean.GbStream;
import com.genersoft.iot.vmp.gb28181.bean.ParentPlatform;
+import com.genersoft.iot.vmp.gb28181.bean.SubscribeHolder;
import com.genersoft.iot.vmp.gb28181.bean.SubscribeInfo;
import com.genersoft.iot.vmp.gb28181.transmit.cmd.ISIPCommanderForPlatform;
import com.genersoft.iot.vmp.service.bean.GPSMsgInfo;
@@ -16,25 +17,28 @@
private IRedisCatchStorage redisCatchStorage;
private IVideoManagerStorager storager;
private ISIPCommanderForPlatform sipCommanderForPlatform;
+ private SubscribeHolder subscribeHolder;
private String platformId;
private String sn;
private String key;
private final SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
- public GPSSubscribeTask(IRedisCatchStorage redisCatchStorage, ISIPCommanderForPlatform sipCommanderForPlatform, IVideoManagerStorager storager, String platformId, String sn, String key) {
+ public GPSSubscribeTask(IRedisCatchStorage redisCatchStorage, ISIPCommanderForPlatform sipCommanderForPlatform, IVideoManagerStorager storager, String platformId, String sn, String key, SubscribeHolder subscribeInfo) {
this.redisCatchStorage = redisCatchStorage;
this.storager = storager;
this.platformId = platformId;
this.sn = sn;
this.key = key;
this.sipCommanderForPlatform = sipCommanderForPlatform;
+ this.subscribeHolder = subscribeInfo;
}
@Override
public void run() {
- SubscribeInfo subscribe = redisCatchStorage.getSubscribe(key);
+ SubscribeInfo subscribe = subscribeHolder.getMobilePositionSubscribe(platformId);
+
if (subscribe != null) {
ParentPlatform parentPlatform = storager.queryParentPlatByServerGBId(platformId);
if (parentPlatform == null || parentPlatform.isStatus()) {
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/SIPProcessorObserver.java b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/SIPProcessorObserver.java
index 3cc4456..30efa20 100644
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/SIPProcessorObserver.java
+++ b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/SIPProcessorObserver.java
@@ -94,6 +94,7 @@
Response response = responseEvent.getResponse();
logger.debug("\n鏀跺埌鍝嶅簲锛歕n{}", responseEvent.getResponse());
int status = response.getStatusCode();
+
if (((status >= 200) && (status < 300)) || status == 401) { // Success!
CSeqHeader cseqHeader = (CSeqHeader) responseEvent.getResponse().getHeader(CSeqHeader.NAME);
String method = cseqHeader.getMethod();
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/SIPRequestHeaderPlarformProvider.java b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/SIPRequestHeaderPlarformProvider.java
index c0e7281..43e2690 100644
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/SIPRequestHeaderPlarformProvider.java
+++ b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/SIPRequestHeaderPlarformProvider.java
@@ -236,57 +236,57 @@
return request;
}
- public Request createNotifyRequest(ParentPlatform parentPlatform, String content, CallIdHeader callIdHeader, String viaTag, SubscribeInfo subscribeInfo) throws PeerUnavailableException, ParseException, InvalidArgumentException {
- Request request = null;
- // sipuri
- SipURI requestURI = sipFactory.createAddressFactory().createSipURI(parentPlatform.getServerGBId(), parentPlatform.getServerIP()+ ":" + parentPlatform.getServerPort());
- // via
- ArrayList<ViaHeader> viaHeaders = new ArrayList<ViaHeader>();
- ViaHeader viaHeader = sipFactory.createHeaderFactory().createViaHeader(parentPlatform.getDeviceIp(), Integer.parseInt(parentPlatform.getDevicePort()),
- parentPlatform.getTransport(), subscribeInfo.getBranch());
- viaHeader.setRPort();
- viaHeaders.add(viaHeader);
- // from
- SipURI fromSipURI = sipFactory.createAddressFactory().createSipURI(parentPlatform.getDeviceGBId(),
- parentPlatform.getDeviceIp() + ":" + parentPlatform.getDevicePort());
- Address fromAddress = sipFactory.createAddressFactory().createAddress(fromSipURI);
- FromHeader fromHeader = sipFactory.createHeaderFactory().createFromHeader(fromAddress, subscribeInfo.getToTag());
- // to
- SipURI toSipURI = sipFactory.createAddressFactory().createSipURI(parentPlatform.getServerGBId(), parentPlatform.getServerGBDomain());
- Address toAddress = sipFactory.createAddressFactory().createAddress(toSipURI);
- ToHeader toHeader = sipFactory.createHeaderFactory().createToHeader(toAddress, subscribeInfo.getFromTag());
-
- // Forwards
- MaxForwardsHeader maxForwards = sipFactory.createHeaderFactory().createMaxForwardsHeader(70);
- // ceq
- CSeqHeader cSeqHeader = sipFactory.createHeaderFactory().createCSeqHeader(redisCatchStorage.getCSEQ(Request.NOTIFY), Request.NOTIFY);
- MessageFactoryImpl messageFactory = (MessageFactoryImpl) sipFactory.createMessageFactory();
- // 璁剧疆缂栫爜锛� 闃叉涓枃涔辩爜
- messageFactory.setDefaultContentEncodingCharset("gb2312");
- request = messageFactory.createRequest(requestURI, Request.NOTIFY, callIdHeader, cSeqHeader, fromHeader,
- toHeader, viaHeaders, maxForwards);
- List<String> agentParam = new ArrayList<>();
- agentParam.add("wvp-pro");
- UserAgentHeader userAgentHeader = sipFactory.createHeaderFactory().createUserAgentHeader(agentParam);
- request.addHeader(userAgentHeader);
-
- EventHeader event = sipFactory.createHeaderFactory().createEventHeader(subscribeInfo.getEventType());
- if (subscribeInfo.getEventId() != null) {
- event.setEventId(subscribeInfo.getEventId());
- }
-
- request.addHeader(event);
-
- SubscriptionStateHeader active = sipFactory.createHeaderFactory().createSubscriptionStateHeader("active");
- request.setHeader(active);
-
- String sipAddress = sipConfig.getIp() + ":" + sipConfig.getPort();
- Address concatAddress = sipFactory.createAddressFactory().createAddress(sipFactory.createAddressFactory()
- .createSipURI(parentPlatform.getDeviceGBId(), sipAddress));
- request.addHeader(sipFactory.createHeaderFactory().createContactHeader(concatAddress));
-
- ContentTypeHeader contentTypeHeader = sipFactory.createHeaderFactory().createContentTypeHeader("Application", "MANSCDP+xml");
- request.setContent(content, contentTypeHeader);
- return request;
- }
+// public Request createNotifyRequest(ParentPlatform parentPlatform, String content, CallIdHeader callIdHeader, String viaTag, String fromTag, SubscribeInfo subscribeInfo) throws PeerUnavailableException, ParseException, InvalidArgumentException {
+// Request request = null;
+// // sipuri
+// SipURI requestURI = sipFactory.createAddressFactory().createSipURI(parentPlatform.getServerGBId(), parentPlatform.getServerIP()+ ":" + parentPlatform.getServerPort());
+// // via
+// ArrayList<ViaHeader> viaHeaders = new ArrayList<ViaHeader>();
+// ViaHeader viaHeader = sipFactory.createHeaderFactory().createViaHeader(parentPlatform.getDeviceIp(), Integer.parseInt(parentPlatform.getDevicePort()),
+// parentPlatform.getTransport(), viaTag);
+// viaHeader.setRPort();
+// viaHeaders.add(viaHeader);
+// // from
+// SipURI fromSipURI = sipFactory.createAddressFactory().createSipURI(parentPlatform.getDeviceGBId(),
+// parentPlatform.getDeviceIp() + ":" + parentPlatform.getDevicePort());
+// Address fromAddress = sipFactory.createAddressFactory().createAddress(fromSipURI);
+// FromHeader fromHeader = sipFactory.createHeaderFactory().createFromHeader(fromAddress, fromTag);
+// // to
+// SipURI toSipURI = sipFactory.createAddressFactory().createSipURI(parentPlatform.getServerGBId(), parentPlatform.getServerGBDomain());
+// Address toAddress = sipFactory.createAddressFactory().createAddress(toSipURI);
+// ToHeader toHeader = sipFactory.createHeaderFactory().createToHeader(toAddress, subscribeInfo.getFromTag());
+//
+// // Forwards
+// MaxForwardsHeader maxForwards = sipFactory.createHeaderFactory().createMaxForwardsHeader(70);
+// // ceq
+// CSeqHeader cSeqHeader = sipFactory.createHeaderFactory().createCSeqHeader(redisCatchStorage.getCSEQ(Request.NOTIFY), Request.NOTIFY);
+// MessageFactoryImpl messageFactory = (MessageFactoryImpl) sipFactory.createMessageFactory();
+// // 璁剧疆缂栫爜锛� 闃叉涓枃涔辩爜
+// messageFactory.setDefaultContentEncodingCharset("gb2312");
+// request = messageFactory.createRequest(requestURI, Request.NOTIFY, callIdHeader, cSeqHeader, fromHeader,
+// toHeader, viaHeaders, maxForwards);
+// List<String> agentParam = new ArrayList<>();
+// agentParam.add("wvp-pro");
+// UserAgentHeader userAgentHeader = sipFactory.createHeaderFactory().createUserAgentHeader(agentParam);
+// request.addHeader(userAgentHeader);
+//
+// EventHeader event = sipFactory.createHeaderFactory().createEventHeader(subscribeInfo.getEventType());
+// if (subscribeInfo.getEventId() != null) {
+// event.setEventId(subscribeInfo.getEventId());
+// }
+//
+// request.addHeader(event);
+//
+// SubscriptionStateHeader active = sipFactory.createHeaderFactory().createSubscriptionStateHeader("active");
+// request.setHeader(active);
+//
+// String sipAddress = sipConfig.getIp() + ":" + sipConfig.getPort();
+// Address concatAddress = sipFactory.createAddressFactory().createAddress(sipFactory.createAddressFactory()
+// .createSipURI(parentPlatform.getDeviceGBId(), sipAddress));
+// request.addHeader(sipFactory.createHeaderFactory().createContactHeader(concatAddress));
+//
+// ContentTypeHeader contentTypeHeader = sipFactory.createHeaderFactory().createContentTypeHeader("Application", "MANSCDP+xml");
+// request.setContent(content, contentTypeHeader);
+// return request;
+// }
}
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/SIPRequestHeaderProvider.java b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/SIPRequestHeaderProvider.java
index f4a0ec4..1c368bf 100644
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/SIPRequestHeaderProvider.java
+++ b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/SIPRequestHeaderProvider.java
@@ -215,6 +215,9 @@
// Event
EventHeader eventHeader = sipFactory.createHeaderFactory().createEventHeader(event);
+
+ int random = (int)Math.random() * 1000000000;
+ eventHeader.setEventId(random + "");
request.addHeader(eventHeader);
ContentTypeHeader contentTypeHeader = sipFactory.createHeaderFactory().createContentTypeHeader("Application", "MANSCDP+xml");
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/impl/SIPCommander.java b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/impl/SIPCommander.java
index a7b67ad..b38a8c1 100644
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/impl/SIPCommander.java
+++ b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/impl/SIPCommander.java
@@ -1518,7 +1518,7 @@
// 鏈夋晥鏃堕棿榛樿涓�60绉掍互涓�
Request request = headerProvider.createSubscribeRequest(device, cmdXml.toString(), "z9hG4bK-viaPos-" + tm,
- "fromTagPos" + tm, null, device.getSubscribeCycleForCatalog() + 60, "Catalog" ,
+ "fromTagPos" + tm, null, device.getSubscribeCycleForCatalog(), "Catalog" ,
callIdHeader);
transmitRequest(device, request, errorEvent, okEvent);
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/impl/SIPCommanderFroPlatform.java b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/impl/SIPCommanderFroPlatform.java
index 67cb734..a379f39 100644
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/impl/SIPCommanderFroPlatform.java
+++ b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/impl/SIPCommanderFroPlatform.java
@@ -27,9 +27,7 @@
import javax.sip.*;
import javax.sip.address.SipURI;
-import javax.sip.header.CallIdHeader;
-import javax.sip.header.ViaHeader;
-import javax.sip.header.WWWAuthenticateHeader;
+import javax.sip.header.*;
import javax.sip.message.Request;
import java.lang.reflect.Field;
import java.text.ParseException;
@@ -68,6 +66,9 @@
@Qualifier(value="udpSipProvider")
private SipProviderImpl udpSipProvider;
+ @Autowired
+ private SipFactory sipFactory;
+
@Override
public boolean register(ParentPlatform parentPlatform, SipSubscribe.Event errorEvent , SipSubscribe.Event okEvent) {
return register(parentPlatform, null, null, errorEvent, okEvent, false);
@@ -88,7 +89,7 @@
public boolean register(ParentPlatform parentPlatform, @Nullable String callId, @Nullable WWWAuthenticateHeader www,
SipSubscribe.Event errorEvent , SipSubscribe.Event okEvent, boolean registerAgain) {
try {
- Request request = null;
+ Request request;
String tm = Long.toString(System.currentTimeMillis());
if (!registerAgain ) {
// //callid
@@ -364,16 +365,18 @@
: udpSipProvider.getNewCallId();
callIdHeader.setCallId(subscribeInfo.getCallId());
- String tm = Long.toString(System.currentTimeMillis());
+//
+ sendNotify(parentPlatform, deviceStatusXml.toString(), subscribeInfo, eventResult -> {
+ logger.error("鍙戦�丯OTIFY閫氱煡娑堟伅澶辫触銆傞敊璇細{} {}", eventResult.statusCode, eventResult.msg);
+ }, null);
- Request request = headerProviderPlarformProvider.createNotifyRequest(parentPlatform,
- deviceStatusXml.toString(),callIdHeader,
- "z9hG4bK-" + UUID.randomUUID().toString().replace("-", ""), subscribeInfo);
- transmitRequest(parentPlatform, request);
-
- } catch (SipException | ParseException | InvalidArgumentException e) {
+ } catch (SipException | ParseException e) {
e.printStackTrace();
return false;
+ } catch (NoSuchFieldException e) {
+ e.printStackTrace();
+ } catch (IllegalAccessException e) {
+ e.printStackTrace();
}
return true;
}
@@ -386,36 +389,88 @@
if (index == null) {
index = 0;
}
-
+ if (index >= deviceChannels.size()) {
+ return true;
+ }
try {
- if (index > deviceChannels.size() - 1) {
- return true;
- }
- Request request = getCatalogNotifyRequestForCatalogAddOrUpdate(parentPlatform, deviceChannels.get(index), deviceChannels.size(), type, subscribeInfo);
- index += 1;
Integer finalIndex = index;
- transmitRequest(parentPlatform, request, null, (eventResult -> {
- sendNotifyForCatalogAddOrUpdate(type, parentPlatform, deviceChannels, subscribeInfo, finalIndex);
+ String catalogXmlContent = getCatalogXmlContentForCatalogAddOrUpdate(parentPlatform, deviceChannels.get(index ), deviceChannels.size(), type, subscribeInfo);
+ sendNotify(parentPlatform, catalogXmlContent, subscribeInfo, eventResult -> {
+ logger.error("鍙戦�丯OTIFY閫氱煡娑堟伅澶辫触銆傞敊璇細{} {}", eventResult.statusCode, eventResult.msg);
+ }, (eventResult -> {
+ sendNotifyForCatalogAddOrUpdate(type, parentPlatform, deviceChannels, subscribeInfo, finalIndex + 1);
}));
- } catch (SipException | ParseException | InvalidArgumentException e) {
+ } catch (SipException | ParseException e) {
e.printStackTrace();
return false;
+ } catch (NoSuchFieldException e) {
+ e.printStackTrace();
+ } catch (IllegalAccessException e) {
+ e.printStackTrace();
}
return true;
}
- private Request getCatalogNotifyRequestForCatalogAddOrUpdate(ParentPlatform parentPlatform, DeviceChannel channel, int size, String type,
- SubscribeInfo subscribeInfo) throws ParseException, InvalidArgumentException,
- PeerUnavailableException {
- String catalogXmlContent = getCatalogXmlContentForCatalogAddOrUpdate(parentPlatform, channel, size, type, subscribeInfo);
+ private void sendNotify(ParentPlatform parentPlatform, String catalogXmlContent,
+ SubscribeInfo subscribeInfo, SipSubscribe.Event errorEvent, SipSubscribe.Event okEvent )
+ throws NoSuchFieldException, IllegalAccessException, SipException, ParseException {
+ Dialog dialog = subscribeInfo.getDialog();
+ Request notifyRequest = dialog.createRequest(Request.NOTIFY);
- CallIdHeader callIdHeader = parentPlatform.getTransport().equals("TCP") ? tcpSipProvider.getNewCallId()
- : udpSipProvider.getNewCallId();
- callIdHeader.setCallId(subscribeInfo.getCallId());
- Request request = headerProviderPlarformProvider.createNotifyRequest(parentPlatform, catalogXmlContent,
- callIdHeader, "z9hG4bK-" + UUID.randomUUID().toString().replace("-", ""), subscribeInfo);
- return request;
+ ContentTypeHeader contentTypeHeader = sipFactory.createHeaderFactory().createContentTypeHeader("Application", "MANSCDP+xml");
+
+ notifyRequest.setContent(catalogXmlContent, contentTypeHeader);
+
+ SubscriptionStateHeader subscriptionState = sipFactory.createHeaderFactory()
+ .createSubscriptionStateHeader(SubscriptionStateHeader.ACTIVE);
+ notifyRequest.addHeader(subscriptionState);
+
+ EventHeader event = sipFactory.createHeaderFactory().createEventHeader(subscribeInfo.getEventType());
+ if (subscribeInfo.getEventId() != null) {
+ event.setEventId(subscribeInfo.getEventId());
+ }
+ notifyRequest.addHeader(event);
+
+ SipURI sipURI = (SipURI) notifyRequest.getRequestURI();
+ SIPRequest request = (SIPRequest) subscribeInfo.getTransaction().getRequest();
+ sipURI.setHost(request.getRemoteAddress().getHostName());
+ sipURI.setPort(request.getRemotePort());
+ ClientTransaction transaction = null;
+ if ("TCP".equals(parentPlatform.getTransport())) {
+ transaction = tcpSipProvider.getNewClientTransaction(notifyRequest);
+ } else if ("UDP".equals(parentPlatform.getTransport())) {
+ transaction = udpSipProvider.getNewClientTransaction(notifyRequest);
+ }
+ // 娣诲姞閿欒璁㈤槄
+ if (errorEvent != null) {
+ sipSubscribe.addErrorSubscribe(subscribeInfo.getCallId(), errorEvent);
+ }
+ // 娣诲姞璁㈤槄
+ if (okEvent != null) {
+ sipSubscribe.addOkSubscribe(subscribeInfo.getCallId(), okEvent);
+ }
+ if (transaction == null) {
+ logger.error("骞冲彴{}鐨凾ransport閿欒锛歿}",parentPlatform.getServerGBId(), parentPlatform.getTransport());
+ return;
+ }
+ dialog.sendRequest(transaction);
+
}
+
+// private Request getCatalogNotifyRequestForCatalogAddOrUpdate(ParentPlatform parentPlatform, DeviceChannel channel, int size, String type,
+// SubscribeInfo subscribeInfo) throws ParseException, InvalidArgumentException,
+// PeerUnavailableException, NoSuchFieldException, IllegalAccessException {
+// String catalogXmlContent = getCatalogXmlContentForCatalogAddOrUpdate(parentPlatform, channel, size, type, subscribeInfo);
+//
+// CallIdHeader callIdHeader = parentPlatform.getTransport().equals("TCP") ? tcpSipProvider.getNewCallId()
+// : udpSipProvider.getNewCallId();
+// callIdHeader.setCallId(subscribeInfo.getCallId());
+// String tm = Long.toString(System.currentTimeMillis());
+//
+// Request request = headerProviderPlarformProvider.createNotifyRequest(parentPlatform, catalogXmlContent,
+// callIdHeader, "z9hG4bK-" + UUID.randomUUID().toString().replace("-", ""),"FromRegister" + tm, subscribeInfo);
+// return request;
+// }
private String getCatalogXmlContentForCatalogAddOrUpdate(ParentPlatform parentPlatform, DeviceChannel channel, int sumNum, String type, SubscribeInfo subscribeInfo) {
StringBuffer catalogXml = new StringBuffer(600);
@@ -465,34 +520,31 @@
if (index == null) {
index = 0;
}
-
- if (index > deviceChannels.size() - 1) {
+ if (index >= deviceChannels.size()) {
return true;
}
try {
- String catalogXml = getCatalogXmlContentForCatalogOther(deviceChannels.get(index), type, parentPlatform);
- CallIdHeader callIdHeader = parentPlatform.getTransport().equals("TCP") ? tcpSipProvider.getNewCallId()
- : udpSipProvider.getNewCallId();
- Request request = headerProviderPlarformProvider.createNotifyRequest(parentPlatform, catalogXml,
- callIdHeader,
- "z9hG4bK-" + UUID.randomUUID().toString().replace("-", ""), subscribeInfo);
- index += 1;
Integer finalIndex = index;
- transmitRequest(parentPlatform, request, null, eventResult -> {
- sendNotifyForCatalogOther(type, parentPlatform, deviceChannels, subscribeInfo, finalIndex);
- });
+ String catalogXmlContent = getCatalogXmlContentForCatalogOther(parentPlatform, deviceChannels.get(index), type);
+ sendNotify(parentPlatform, catalogXmlContent, subscribeInfo, eventResult -> {
+ logger.error("鍙戦�丯OTIFY閫氱煡娑堟伅澶辫触銆傞敊璇細{} {}", eventResult.statusCode, eventResult.msg);
+ }, (eventResult -> {
+ sendNotifyForCatalogOther(type, parentPlatform, deviceChannels, subscribeInfo, finalIndex + 1);
+ }));
} catch (SipException e) {
e.printStackTrace();
- } catch (InvalidArgumentException e) {
- e.printStackTrace();
} catch (ParseException e) {
+ e.printStackTrace();
+ } catch (NoSuchFieldException e) {
+ e.printStackTrace();
+ } catch (IllegalAccessException e) {
e.printStackTrace();
}
return true;
}
- private String getCatalogXmlContentForCatalogOther(DeviceChannel channel, String type, ParentPlatform parentPlatform) {
+ private String getCatalogXmlContentForCatalogOther(ParentPlatform parentPlatform, DeviceChannel channel, String type) {
if (parentPlatform.getServerGBId().equals(channel.getParentId())) {
channel.setParentId(parentPlatform.getDeviceGBId());
}
@@ -594,6 +646,7 @@
byte[] transactionByteArray = sendRtpItem.getTransaction();
ClientTransaction clientTransaction = (ClientTransaction) SerializeUtils.deSerialize(transactionByteArray);
Request byeRequest = dialog.createRequest(Request.BYE);
+
SipURI byeURI = (SipURI) byeRequest.getRequestURI();
SIPRequest request = (SIPRequest) clientTransaction.getRequest();
byeURI.setHost(request.getRemoteAddress().getHostName());
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 c339598..6ae0f3e 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
@@ -233,6 +233,7 @@
*/
private void processNotifyCatalogList(RequestEvent evt) {
try {
+ System.out.println(343434);
FromHeader fromHeader = (FromHeader) evt.getRequest().getHeader(FromHeader.NAME);
String deviceId = SipUtils.getUserIdFromFromHeader(fromHeader);
@@ -308,12 +309,6 @@
eventPublisher.catalogEventPublish(null, channel, eventElement.getText().toUpperCase());
}
-
- // RequestMessage msg = new RequestMessage();
- // msg.setDeviceId(deviceId);
- // msg.setType(DeferredResultHolder.CALLBACK_CMD_CATALOG);
- // msg.setData(device);
- // deferredResultHolder.invokeResult(msg);
if (offLineDetector.isOnline(deviceId)) {
publisher.onlineEventPublish(device, VideoManagerConstants.EVENT_ONLINE_MESSAGE);
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/RegisterRequestProcessor.java b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/RegisterRequestProcessor.java
index 737f752..cfc61c4 100644
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/RegisterRequestProcessor.java
+++ b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/RegisterRequestProcessor.java
@@ -81,7 +81,7 @@
String requestAddress = evtExt.getRemoteIpAddress() + ":" + evtExt.getRemotePort();
logger.info("[{}] 鏀跺埌娉ㄥ唽璇锋眰锛屽紑濮嬪鐞�", requestAddress);
Request request = evt.getRequest();
-
+ ExpiresHeader expiresHeader = (ExpiresHeader) request.getHeader(Expires.NAME);
Response response = null;
boolean passwordCorrect = false;
// 娉ㄥ唽鏍囧織 0锛氭湭鎼哄甫鎺堟潈澶存垨鑰呭瘑鐮侀敊璇� 1锛氭敞鍐屾垚鍔� 2锛氭敞閿�鎴愬姛
@@ -128,7 +128,7 @@
dateHeader.setDate(wvpSipDate);
response.addHeader(dateHeader);
- ExpiresHeader expiresHeader = (ExpiresHeader) request.getHeader(Expires.NAME);
+
if (expiresHeader == null) {
response = getMessageFactory().createResponse(Response.BAD_REQUEST, request);
ServerTransaction serverTransaction = getServerTransaction(evt);
@@ -193,9 +193,7 @@
// 淇濆瓨鍒皉edis
if (registerFlag == 1 ) {
logger.info("[{}] 娉ㄥ唽鎴愬姛! deviceId:" + device.getDeviceId(), requestAddress);
- publisher.onlineEventPublish(device, VideoManagerConstants.EVENT_ONLINE_REGISTER);
- // 閲嶆柊娉ㄥ唽鏇存柊璁惧鍜岄�氶亾锛屼互鍏嶈澶囨浛鎹㈡垨鏇存柊鍚庝俊鎭棤娉曟洿鏂�
- handler.onRegister(device);
+ publisher.onlineEventPublish(device, VideoManagerConstants.EVENT_ONLINE_REGISTER, expiresHeader.getExpires());
} else if (registerFlag == 2) {
logger.info("[{}] 娉ㄩ攢鎴愬姛! deviceId:" + device.getDeviceId(), requestAddress);
publisher.outlineEventPublish(device.getDeviceId(), VideoManagerConstants.EVENT_OUTLINE_UNREGISTER);
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/SubscribeRequestProcessor.java b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/SubscribeRequestProcessor.java
index a765b3a..e1e7125 100644
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/SubscribeRequestProcessor.java
+++ b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/SubscribeRequestProcessor.java
@@ -5,6 +5,7 @@
import com.genersoft.iot.vmp.conf.UserSetup;
import com.genersoft.iot.vmp.gb28181.bean.CmdType;
import com.genersoft.iot.vmp.gb28181.bean.ParentPlatform;
+import com.genersoft.iot.vmp.gb28181.bean.SubscribeHolder;
import com.genersoft.iot.vmp.gb28181.bean.SubscribeInfo;
import com.genersoft.iot.vmp.gb28181.task.GPSSubscribeTask;
import com.genersoft.iot.vmp.gb28181.transmit.SIPProcessorObserver;
@@ -15,18 +16,19 @@
import com.genersoft.iot.vmp.gb28181.utils.XmlUtil;
import com.genersoft.iot.vmp.storager.IRedisCatchStorage;
import com.genersoft.iot.vmp.storager.IVideoManagerStorager;
+import com.genersoft.iot.vmp.utils.SerializeUtils;
+import gov.nist.javax.sip.SipProviderImpl;
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.beans.factory.annotation.Qualifier;
+import org.springframework.context.annotation.Lazy;
import org.springframework.stereotype.Component;
-import javax.sip.InvalidArgumentException;
-import javax.sip.RequestEvent;
-import javax.sip.ServerTransaction;
-import javax.sip.SipException;
+import javax.sip.*;
import javax.sip.header.ExpiresHeader;
import javax.sip.header.ToHeader;
import javax.sip.message.Request;
@@ -54,11 +56,25 @@
@Autowired
private IVideoManagerStorager storager;
+ @Lazy
+ @Autowired
+ @Qualifier(value="tcpSipProvider")
+ private SipProviderImpl tcpSipProvider;
+
+ @Lazy
+ @Autowired
+ @Qualifier(value="udpSipProvider")
+ private SipProviderImpl udpSipProvider;
+
@Autowired
private DynamicTask dynamicTask;
@Autowired
private UserSetup userSetup;
+
+
+ @Autowired
+ private SubscribeHolder subscribeHolder;
@Override
public void afterPropertiesSet() throws Exception {
@@ -136,16 +152,17 @@
.append("</Response>\r\n");
if (subscribeInfo.getExpires() > 0) {
- if (redisCatchStorage.getSubscribe(key) != null) {
+ if (subscribeHolder.getMobilePositionSubscribe(platformId) != null) {
dynamicTask.stop(key);
}
String interval = XmlUtil.getText(rootElement, "Interval"); // GPS涓婃姤鏃堕棿闂撮殧
- dynamicTask.startCron(key, new GPSSubscribeTask(redisCatchStorage, sipCommanderForPlatform, storager, platformId, sn, key), Integer.parseInt(interval));
-
- redisCatchStorage.updateSubscribe(key, subscribeInfo);
+ dynamicTask.startCron(key, new GPSSubscribeTask(redisCatchStorage, sipCommanderForPlatform, storager, platformId, sn, key, subscribeHolder), Integer.parseInt(interval));
+ subscribeHolder.putMobilePositionSubscribe(platformId, subscribeInfo);
+// redisCatchStorage.updateSubscribe(key, subscribeInfo);
}else if (subscribeInfo.getExpires() == 0) {
dynamicTask.stop(key);
- redisCatchStorage.delSubscribe(key);
+// redisCatchStorage.delSubscribe(key);
+ subscribeHolder.removeMobilePositionSubscribe(platformId);
}
try {
@@ -168,10 +185,19 @@
}
- private void processNotifyCatalogList(RequestEvent evt, Element rootElement) {
+ private void processNotifyCatalogList(RequestEvent evt, Element rootElement) throws SipException {
String platformId = SipUtils.getUserIdFromFromHeader(evt.getRequest());
String deviceID = XmlUtil.getText(rootElement, "DeviceID");
+ ParentPlatform platform = storager.queryParentPlatByServerGBId(platformId);
SubscribeInfo subscribeInfo = new SubscribeInfo(evt, platformId);
+ if (evt.getServerTransaction() == null) {
+ ServerTransaction serverTransaction = platform.getTransport().equals("TCP") ? tcpSipProvider.getNewServerTransaction(evt.getRequest())
+ : udpSipProvider.getNewServerTransaction(evt.getRequest());
+ subscribeInfo.setTransaction(serverTransaction);
+ Dialog dialog = serverTransaction.getDialog();
+ dialog.terminateOnBye(false);
+ subscribeInfo.setDialog(dialog);
+ }
String sn = XmlUtil.getText(rootElement, "SN");
String key = VideoManagerConstants.SIP_SUBSCRIBE_PREFIX + userSetup.getServerId() + "_Catalog_" + platformId;
logger.info("鎺ユ敹鍒皗}鐨凜atalog璁㈤槄", platformId);
@@ -185,9 +211,11 @@
.append("</Response>\r\n");
if (subscribeInfo.getExpires() > 0) {
- redisCatchStorage.updateSubscribe(key, subscribeInfo);
+// redisCatchStorage.updateSubscribe(key, subscribeInfo);
+ subscribeHolder.putCatalogSubscribe(platformId, subscribeInfo);
}else if (subscribeInfo.getExpires() == 0) {
- redisCatchStorage.delSubscribe(key);
+// redisCatchStorage.delSubscribe(key);
+ subscribeHolder.removeCatalogSubscribe(platformId);
}
try {
@@ -195,7 +223,8 @@
Response response = responseXmlAck(evt, resultXml.toString(), parentPlatform);
ToHeader toHeader = (ToHeader)response.getHeader(ToHeader.NAME);
subscribeInfo.setToTag(toHeader.getTag());
- redisCatchStorage.updateSubscribe(key, subscribeInfo);
+// redisCatchStorage.updateSubscribe(key, subscribeInfo);
+ subscribeHolder.putCatalogSubscribe(platformId, subscribeInfo);
} catch (SipException e) {
e.printStackTrace();
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 ba95cf6..5813998 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
@@ -21,6 +21,7 @@
import javax.sip.InvalidArgumentException;
import javax.sip.RequestEvent;
import javax.sip.SipException;
+import javax.sip.header.CSeqHeader;
import javax.sip.header.CallIdHeader;
import javax.sip.message.Response;
import java.text.ParseException;
@@ -64,6 +65,11 @@
String deviceId = SipUtils.getUserIdFromFromHeader(evt.getRequest());
CallIdHeader callIdHeader = (CallIdHeader)evt.getRequest().getHeader(CallIdHeader.NAME);
// 鏌ヨ璁惧鏄惁瀛樺湪
+ CSeqHeader cseqHeader = (CSeqHeader) evt.getRequest().getHeader(CSeqHeader.NAME);
+ String method = cseqHeader.getMethod();
+ if (method.equals("MESSAGE")) {
+ System.out.println();
+ }
Device device = redisCatchStorage.getDevice(deviceId);
// 鏌ヨ涓婄骇骞冲彴鏄惁瀛樺湪
ParentPlatform parentPlatform = storage.queryParentPlatByServerGBId(deviceId);
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/message/response/cmd/CatalogResponseMessageHandler.java b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/message/response/cmd/CatalogResponseMessageHandler.java
index dfd0eb2..62ec5e9 100644
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/message/response/cmd/CatalogResponseMessageHandler.java
+++ b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/message/response/cmd/CatalogResponseMessageHandler.java
@@ -85,41 +85,54 @@
return;
}
int sumNum = Integer.parseInt(sumNumElement.getText());
- Iterator<Element> deviceListIterator = deviceListElement.elementIterator();
- if (deviceListIterator != null) {
- List<DeviceChannel> channelList = new ArrayList<>();
- // 閬嶅巻DeviceList
- while (deviceListIterator.hasNext()) {
- Element itemDevice = deviceListIterator.next();
- Element channelDeviceElement = itemDevice.element("DeviceID");
- if (channelDeviceElement == null) {
- continue;
+ if (sumNum == 0) {
+ // 鏁版嵁宸茬粡瀹屾暣鎺ユ敹
+ storager.cleanChannelsForDevice(device.getDeviceId());
+ RequestMessage msg = new RequestMessage();
+ msg.setKey(key);
+ WVPResult<Object> result = new WVPResult<>();
+ result.setCode(0);
+ result.setData(device);
+ msg.setData(result);
+ result.setMsg("鏇存柊鎴愬姛锛屽叡0鏉�");
+ deferredResultHolder.invokeAllResult(msg);
+ catalogDataCatch.del(key);
+ }else {
+ Iterator<Element> deviceListIterator = deviceListElement.elementIterator();
+ if (deviceListIterator != null) {
+ List<DeviceChannel> channelList = new ArrayList<>();
+ // 閬嶅巻DeviceList
+ while (deviceListIterator.hasNext()) {
+ Element itemDevice = deviceListIterator.next();
+ Element channelDeviceElement = itemDevice.element("DeviceID");
+ if (channelDeviceElement == null) {
+ continue;
+ }
+ DeviceChannel deviceChannel = XmlUtil.channelContentHander(itemDevice);
+ deviceChannel.setDeviceId(device.getDeviceId());
+ logger.debug("鏀跺埌鏉ヨ嚜璁惧銆恵}銆戠殑閫氶亾: {}銆恵}銆�", device.getDeviceId(), deviceChannel.getName(), deviceChannel.getChannelId());
+ channelList.add(deviceChannel);
}
- DeviceChannel deviceChannel = XmlUtil.channelContentHander(itemDevice);
- deviceChannel.setDeviceId(device.getDeviceId());
- logger.debug("鏀跺埌鏉ヨ嚜璁惧銆恵}銆戠殑閫氶亾: {}銆恵}銆�", device.getDeviceId(), deviceChannel.getName(), deviceChannel.getChannelId());
- channelList.add(deviceChannel);
- }
- catalogDataCatch.put(key, sumNum, device, channelList);
- if (catalogDataCatch.get(key).size() == sumNum) {
- // 鏁版嵁宸茬粡瀹屾暣鎺ユ敹
- boolean resetChannelsResult = storager.resetChannels(device.getDeviceId(), catalogDataCatch.get(key));
- RequestMessage msg = new RequestMessage();
- msg.setKey(key);
- WVPResult<Object> result = new WVPResult<>();
- result.setCode(0);
- result.setData(device);
- if (resetChannelsResult) {
- result.setMsg("鏇存柊鎴愬姛锛屽叡" + sumNum + "鏉★紝宸叉洿鏂�" + catalogDataCatch.get(key).size() + "鏉�");
- }else {
- result.setMsg("鎺ユ敹鎴愬姛锛屽啓鍏ュけ璐ワ紝鍏�" + sumNum + "鏉★紝宸叉帴鏀�" + catalogDataCatch.get(key).size() + "鏉�");
+ catalogDataCatch.put(key, sumNum, device, channelList);
+ if (catalogDataCatch.get(key).size() == sumNum) {
+ // 鏁版嵁宸茬粡瀹屾暣鎺ユ敹
+ boolean resetChannelsResult = storager.resetChannels(device.getDeviceId(), catalogDataCatch.get(key));
+ RequestMessage msg = new RequestMessage();
+ msg.setKey(key);
+ WVPResult<Object> result = new WVPResult<>();
+ result.setCode(0);
+ result.setData(device);
+ if (resetChannelsResult || sumNum ==0) {
+ result.setMsg("鏇存柊鎴愬姛锛屽叡" + sumNum + "鏉★紝宸叉洿鏂�" + catalogDataCatch.get(key).size() + "鏉�");
+ }else {
+ result.setMsg("鎺ユ敹鎴愬姛锛屽啓鍏ュけ璐ワ紝鍏�" + sumNum + "鏉★紝宸叉帴鏀�" + catalogDataCatch.get(key).size() + "鏉�");
+ }
+ msg.setData(result);
+ deferredResultHolder.invokeAllResult(msg);
+ catalogDataCatch.del(key);
}
- msg.setData(result);
- deferredResultHolder.invokeAllResult(msg);
- catalogDataCatch.del(key);
}
-
// 鍥炲200 OK
responseAck(evt, Response.OK);
if (offLineDetector.isOnline(device.getDeviceId())) {
diff --git a/src/main/java/com/genersoft/iot/vmp/service/impl/DeviceServiceImpl.java b/src/main/java/com/genersoft/iot/vmp/service/impl/DeviceServiceImpl.java
index 675ed4e..0fc6f4c 100644
--- a/src/main/java/com/genersoft/iot/vmp/service/impl/DeviceServiceImpl.java
+++ b/src/main/java/com/genersoft/iot/vmp/service/impl/DeviceServiceImpl.java
@@ -31,8 +31,8 @@
return false;
}
if (dynamicTask.contains(device.getDeviceId())) {
- logger.info("[娣诲姞鐩綍璁㈤槄] 璁惧{}鐨勭洰褰曡闃呬互瀛樺湪", device.getDeviceId());
- return false;
+ // 瀛樺湪鍒欏仠姝㈢幇鏈夌殑锛屽紑鍚柊鐨�
+ dynamicTask.stop(device.getDeviceId());
}
logger.info("[娣诲姞鐩綍璁㈤槄] 璁惧{}", device.getDeviceId());
// 娣诲姞鐩綍璁㈤槄
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 600dad8..d369587 100644
--- a/src/main/java/com/genersoft/iot/vmp/service/impl/MediaServerServiceImpl.java
+++ b/src/main/java/com/genersoft/iot/vmp/service/impl/MediaServerServiceImpl.java
@@ -513,6 +513,14 @@
param.put("hook.on_server_keepalive",String.format("%s/on_server_keepalive", hookPrex));
param.put("hook.timeoutSec","20");
param.put("general.streamNoneReaderDelayMS",mediaServerItem.getStreamNoneReaderDelayMS()==-1?"3600000":mediaServerItem.getStreamNoneReaderDelayMS() );
+ // 鎺ㄦ祦鏂紑鍚庡彲浠ュ湪瓒呮椂鏃堕棿鍐呴噸鏂拌繛鎺ヤ笂缁х画鎺ㄦ祦锛岃繖鏍锋挱鏀惧櫒浼氭帴鐫�鎾斁銆�
+ // 缃�0鍏抽棴姝ょ壒鎬�(鎺ㄦ祦鏂紑浼氬鑷寸珛鍗虫柇寮�鎾斁鍣�)
+ // 姝ゅ弬鏁颁笉搴斿ぇ浜庢挱鏀惧櫒瓒呮椂鏃堕棿
+ // 浼樺寲姝ゆ秷鎭互鏇村揩鐨勬敹鍒版祦娉ㄩ攢浜嬩欢
+ param.put("general.continue_push_ms", "3000" );
+ // 鏈�澶氱瓑寰呮湭鍒濆鍖栫殑Track鏃堕棿锛屽崟浣嶆绉掞紝瓒呮椂涔嬪悗浼氬拷鐣ユ湭鍒濆鍖栫殑Track, 璁剧疆姝ら�夐」浼樺寲閭d簺闊抽閿欒鐨勪笉瑙勮寖娴侊紝
+ // 绛墇lm鏀寔缁欐瘡涓猺tpServer璁剧疆鍏抽棴闊抽鐨勬椂鍊欏彲浠ヤ笉璁剧疆姝ら�夐」
+ param.put("general.wait_track_ready_ms", "3000" );
JSONObject responseJSON = zlmresTfulUtils.setServerConfig(mediaServerItem, param);
@@ -620,6 +628,8 @@
public void updateMediaServerKeepalive(String mediaServerId, JSONObject data) {
MediaServerItem mediaServerItem = getOne(mediaServerId);
if (mediaServerItem == null) {
+ // zlm杩炴帴閲嶈瘯
+
logger.warn("[鏇存柊ZLM 淇濇椿淇℃伅]澶辫触锛屾湭鎵惧埌娴佸獟浣撲俊鎭�");
return;
}
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 39d37c5..e59a090 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
@@ -1,14 +1,12 @@
package com.genersoft.iot.vmp.service.impl;
import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.TypeReference;
import com.genersoft.iot.vmp.common.StreamInfo;
import com.genersoft.iot.vmp.conf.UserSetup;
-import com.genersoft.iot.vmp.gb28181.bean.DeviceChannel;
-import com.genersoft.iot.vmp.gb28181.bean.GbStream;
-import com.genersoft.iot.vmp.gb28181.bean.ParentPlatform;
-import com.genersoft.iot.vmp.gb28181.bean.PlatformCatalog;
+import com.genersoft.iot.vmp.gb28181.bean.*;
import com.genersoft.iot.vmp.gb28181.event.EventPublisher;
import com.genersoft.iot.vmp.gb28181.event.subscribe.catalog.CatalogEvent;
import com.genersoft.iot.vmp.media.zlm.ZLMHttpHookSubscribe;
@@ -23,6 +21,8 @@
import com.genersoft.iot.vmp.vmanager.bean.StreamPushExcelDto;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils;
@@ -32,6 +32,8 @@
@Service
public class StreamPushServiceImpl implements IStreamPushService {
+
+ private final static Logger logger = LoggerFactory.getLogger(StreamPushServiceImpl.class);
@Autowired
private GbStreamMapper gbStreamMapper;
@@ -158,12 +160,17 @@
public boolean removeFromGB(GbStream stream) {
// 鍒ゆ柇鏄惁闇�瑕佸彂閫佷簨浠�
gbStreamService.sendCatalogMsg(stream, CatalogEvent.DEL);
- int del = gbStreamMapper.del(stream.getApp(), stream.getStream());
platformGbStreamMapper.delByAppAndStream(stream.getApp(), stream.getStream());
+ int del = gbStreamMapper.del(stream.getApp(), stream.getStream());
MediaServerItem mediaInfo = mediaServerService.getOne(stream.getMediaServerId());
JSONObject mediaList = zlmresTfulUtils.getMediaList(mediaInfo, stream.getApp(), stream.getStream());
- if (mediaList == null) {
- streamPushMapper.del(stream.getApp(), stream.getStream());
+ if (mediaList != null) {
+ if (mediaList.getInteger("code") == 0) {
+ JSONArray data = mediaList.getJSONArray("data");
+ if (data == null) {
+ streamPushMapper.del(stream.getApp(), stream.getStream());
+ }
+ }
}
return del > 0;
}
@@ -180,9 +187,9 @@
StreamPushItem streamPushItem = streamPushMapper.selectOne(app, streamId);
gbStreamService.sendCatalogMsg(streamPushItem, CatalogEvent.DEL);
- int delStream = streamPushMapper.del(app, streamId);
- gbStreamMapper.del(app, streamId);
platformGbStreamMapper.delByAppAndStream(app, streamId);
+ gbStreamMapper.del(app, streamId);
+ int delStream = streamPushMapper.del(app, streamId);
if (delStream > 0) {
MediaServerItem mediaServerItem = mediaServerService.getOne(streamPushItem.getMediaServerId());
zlmresTfulUtils.closeStreams(mediaServerItem,app, streamId);
@@ -376,6 +383,29 @@
.collect(Collectors.toList());
if (streamPushItemsForPlatform.size() > 0) {
+ // 鑾峰彇鎵�鏈夊钩鍙帮紝骞冲彴鍜岀洰褰曚俊鎭竴鑸笉浼氱壒鍒ぇ閲忋��
+ List<ParentPlatform> parentPlatformList = parentPlatformMapper.getParentPlatformList();
+ Map<String, Map<String, PlatformCatalog>> platformInfoMap = new HashMap<>();
+ if (parentPlatformList.size() == 0) {
+ return;
+ }
+ for (ParentPlatform platform : parentPlatformList) {
+ Map<String, PlatformCatalog> catalogMap = new HashMap<>();
+
+ // 鍒涘缓鏍硅妭鐐�
+ PlatformCatalog platformCatalog = new PlatformCatalog();
+ platformCatalog.setId(platform.getServerGBId());
+ catalogMap.put(platform.getServerGBId(), platformCatalog);
+
+ // 鏌ヨ鎵�鏈夎妭鐐逛俊鎭�
+ List<PlatformCatalog> platformCatalogs = platformCatalogMapper.selectByPlatForm(platform.getServerGBId());
+ if (platformCatalogs.size() > 0) {
+ for (PlatformCatalog catalog : platformCatalogs) {
+ catalogMap.put(catalog.getId(), catalog);
+ }
+ }
+ platformInfoMap.put(platform.getServerGBId(), catalogMap);
+ }
List<StreamPushItem> streamPushItemListFroPlatform = new ArrayList<>();
Map<String, List<GbStream>> platformForEvent = new HashMap<>();
// 閬嶅巻瀛樺偍缁撴灉锛屾煡鎵綼pp+Stream->platformId+catalogId鐨勫搴斿叧绯伙紝鐒跺悗鎵ц鎵归噺鍐欏叆
@@ -388,6 +418,12 @@
streamPushItemForPlatform.setGbStreamId(streamPushItem.getGbStreamId());
if (platFormInfoArray.length > 0) {
// 鏁扮粍 platFormInfoArray 0 涓哄钩鍙癐D銆� 1涓虹洰褰旾D
+ // 涓嶅瓨鍦ㄨ繖涓钩鍙帮紝鍒欏拷鐣ュ鍏ユ鍏宠仈鍏崇郴
+ if (platformInfoMap.get(platFormInfoArray[0]) == null
+ || platformInfoMap.get(platFormInfoArray[0]).get(platFormInfoArray[1]) == null) {
+ logger.info("瀵煎叆鏁版嵁鏃朵笉瀛樺湪骞冲彴鎴栫洰褰晎}/{},宸插鍏ユ湭鍒嗛厤", platFormInfoArray[0], platFormInfoArray[1] );
+ continue;
+ }
streamPushItemForPlatform.setPlatformId(platFormInfoArray[0]);
List<GbStream> gbStreamList = platformForEvent.get(streamPushItem.getPlatformId());
@@ -406,8 +442,6 @@
streamPushItemForPlatform.setCatalogId(platFormInfoArray[1]);
}
streamPushItemListFroPlatform.add(streamPushItemForPlatform);
-
-
}
}
@@ -432,9 +466,9 @@
}
gbStreamService.sendCatalogMsgs(gbStreams, CatalogEvent.DEL);
- int delStream = streamPushMapper.delAllForGbStream(gbStreams);
- gbStreamMapper.batchDelForGbStream(gbStreams);
platformGbStreamMapper.delByGbStreams(gbStreams);
+ gbStreamMapper.batchDelForGbStream(gbStreams);
+ int delStream = streamPushMapper.delAllForGbStream(gbStreams);
if (delStream > 0) {
for (GbStream gbStream : gbStreams) {
MediaServerItem mediaServerItem = mediaServerService.getOne(gbStream.getMediaServerId());
--
Gitblit v1.8.0