From 39078225f1104eeaed21b24a024457b892fa7f7a Mon Sep 17 00:00:00 2001
From: panlinlin <648540858@qq.com>
Date: 星期一, 26 四月 2021 18:38:57 +0800
Subject: [PATCH] 优化级联时的异常处理
---
src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMRTPServerFactory.java | 26 +++--
src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMRESTfulUtils.java | 10 ++
src/main/java/com/genersoft/iot/vmp/conf/SipPlatformRunner.java | 8 +
src/main/java/com/genersoft/iot/vmp/storager/dao/DeviceMapper.java | 3
src/main/java/com/genersoft/iot/vmp/gb28181/event/offline/KeepliveTimeoutListener.java | 2
src/main/java/com/genersoft/iot/vmp/conf/security/WebSecurityConfig.java | 2
src/main/java/com/genersoft/iot/vmp/storager/impl/RedisCatchStorageImpl.java | 14 ++
src/main/java/com/genersoft/iot/vmp/gb28181/transmit/callback/CheckForAllRecordsThread.java | 2
src/main/java/com/genersoft/iot/vmp/gb28181/transmit/request/impl/RegisterRequestProcessor.java | 2
src/main/java/com/genersoft/iot/vmp/storager/IRedisCatchStorage.java | 3
src/main/java/com/genersoft/iot/vmp/gb28181/event/offline/KeepaliveTimeoutListenerForPlatform.java | 5
src/main/resources/application-dev.yml | 8
src/main/java/com/genersoft/iot/vmp/gb28181/transmit/response/impl/RegisterResponseProcessor.java | 5
src/main/java/com/genersoft/iot/vmp/conf/SipDeviceRunner.java | 33 ++++++
src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMRunner.java | 4
src/main/java/com/genersoft/iot/vmp/gb28181/event/platformKeepaliveExpire/PlatformKeepaliveExpireEventLister.java | 1
src/main/java/com/genersoft/iot/vmp/gb28181/transmit/request/impl/ByeRequestProcessor.java | 1
src/main/java/com/genersoft/iot/vmp/gb28181/event/platformNotRegister/PlatformNotRegisterEventLister.java | 41 +++++++
src/main/java/com/genersoft/iot/vmp/storager/dao/ParentPlatformMapper.java | 5
src/main/java/com/genersoft/iot/vmp/storager/impl/VideoManagerStoragerImpl.java | 17 +++
src/main/java/com/genersoft/iot/vmp/conf/ApplicationCheckRunner.java | 2
src/main/java/com/genersoft/iot/vmp/storager/IVideoManagerStorager.java | 13 ++
src/main/java/com/genersoft/iot/vmp/gb28181/transmit/request/impl/InviteRequestProcessor.java | 11 ++
src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMMediaListManager.java | 32 ++++++
src/main/java/com/genersoft/iot/vmp/gb28181/transmit/request/impl/MessageRequestProcessor.java | 7 +
25 files changed, 226 insertions(+), 31 deletions(-)
diff --git a/src/main/java/com/genersoft/iot/vmp/conf/ApplicationCheckRunner.java b/src/main/java/com/genersoft/iot/vmp/conf/ApplicationCheckRunner.java
index faa9ef1..108b434 100644
--- a/src/main/java/com/genersoft/iot/vmp/conf/ApplicationCheckRunner.java
+++ b/src/main/java/com/genersoft/iot/vmp/conf/ApplicationCheckRunner.java
@@ -55,7 +55,7 @@
System.exit(1);
}
- if (mediaIp.equals("localhost") || mediaIp.equals("127.0.0.1")) {
+ if (mediaIp.equals("localhost") || (mediaIp.equals("127.0.0.1") && mediaWanIp == null)) {
logger.warn("mediaIp.ip浣跨敤 {} ,灏嗘棤娉曟敹鍒扮綉缁滃唴鍏朵粬璁惧鐨勬帹娴�!!!", mediaIp );
}
diff --git a/src/main/java/com/genersoft/iot/vmp/conf/SipDeviceRunner.java b/src/main/java/com/genersoft/iot/vmp/conf/SipDeviceRunner.java
new file mode 100644
index 0000000..fbe07c7
--- /dev/null
+++ b/src/main/java/com/genersoft/iot/vmp/conf/SipDeviceRunner.java
@@ -0,0 +1,33 @@
+package com.genersoft.iot.vmp.conf;
+
+import com.genersoft.iot.vmp.gb28181.bean.ParentPlatform;
+import com.genersoft.iot.vmp.gb28181.bean.ParentPlatformCatch;
+import com.genersoft.iot.vmp.gb28181.event.EventPublisher;
+import com.genersoft.iot.vmp.storager.IRedisCatchStorage;
+import com.genersoft.iot.vmp.storager.IVideoManagerStorager;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.CommandLineRunner;
+import org.springframework.core.annotation.Order;
+import org.springframework.stereotype.Component;
+
+import java.util.List;
+
+/**
+ * 绯荤粺鍚姩鏃舵帶鍒惰澶囩绾�
+ */
+@Component
+@Order(value=4)
+public class SipDeviceRunner implements CommandLineRunner {
+
+ @Autowired
+ private IVideoManagerStorager storager;
+
+ @Autowired
+ private IRedisCatchStorage redisCatchStorage;
+
+ @Override
+ public void run(String... args) throws Exception {
+ // 璁剧疆鎵�鏈夎澶囩绾�
+ storager.outlineForAll();
+ }
+}
diff --git a/src/main/java/com/genersoft/iot/vmp/conf/SipPlatformRunner.java b/src/main/java/com/genersoft/iot/vmp/conf/SipPlatformRunner.java
index 3586207..41b68cc 100644
--- a/src/main/java/com/genersoft/iot/vmp/conf/SipPlatformRunner.java
+++ b/src/main/java/com/genersoft/iot/vmp/conf/SipPlatformRunner.java
@@ -3,6 +3,7 @@
import com.genersoft.iot.vmp.gb28181.bean.ParentPlatform;
import com.genersoft.iot.vmp.gb28181.bean.ParentPlatformCatch;
import com.genersoft.iot.vmp.gb28181.event.EventPublisher;
+import com.genersoft.iot.vmp.media.zlm.ZLMRTPServerFactory;
import com.genersoft.iot.vmp.storager.IRedisCatchStorage;
import com.genersoft.iot.vmp.storager.IVideoManagerStorager;
import org.springframework.beans.factory.annotation.Autowired;
@@ -28,6 +29,10 @@
@Autowired
private EventPublisher publisher;
+ @Autowired
+ private ZLMRTPServerFactory zlmrtpServerFactory;
+
+
@Override
public void run(String... args) throws Exception {
// 璁剧疆鎵�鏈夊钩鍙扮绾�
@@ -36,6 +41,9 @@
// 娓呯悊鎵�鏈夊钩鍙版敞鍐岀紦瀛�
redisCatchStorage.cleanPlatformRegisterInfos();
+ // 鍋滄鎵�鏈夋帹娴�
+// zlmrtpServerFactory.closeAllSendRtpStream();
+
List<ParentPlatform> parentPlatforms = storager.queryEnableParentPlatformList(true);
for (ParentPlatform parentPlatform : parentPlatforms) {
diff --git a/src/main/java/com/genersoft/iot/vmp/conf/security/WebSecurityConfig.java b/src/main/java/com/genersoft/iot/vmp/conf/security/WebSecurityConfig.java
index aa642c6..c6e77ca 100644
--- a/src/main/java/com/genersoft/iot/vmp/conf/security/WebSecurityConfig.java
+++ b/src/main/java/com/genersoft/iot/vmp/conf/security/WebSecurityConfig.java
@@ -111,7 +111,7 @@
http.headers().contentTypeOptions().disable();
http.authorizeRequests()
// 鏀捐鎺ュ彛
- .antMatchers("/api/user/login","/index/hook/**").permitAll()
+ .antMatchers("/#/**", "/api/user/login","/index/hook/**").permitAll()
// 闄や笂闈㈠鐨勬墍鏈夎姹傚叏閮ㄩ渶瑕侀壌鏉冭璇�
.anyRequest().authenticated()
// 寮傚父澶勭悊(鏉冮檺鎷掔粷銆佺櫥褰曞け鏁堢瓑)
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 13ed98a..0999736 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
@@ -39,8 +39,8 @@
// 鑾峰彇澶辨晥鐨刱ey
String expiredKey = message.toString();
logger.info(expiredKey);
- if(!expiredKey.startsWith(VideoManagerConstants.PLATFORM_PREFIX)){
- logger.info("鏀跺埌redis杩囨湡鐩戝惉锛屼絾寮�澶翠笉鏄�"+VideoManagerConstants.PLATFORM_PREFIX+"锛屽拷鐣�");
+ if(!expiredKey.startsWith(VideoManagerConstants.PLATFORM_KEEPLIVEKEY_PREFIX)){
+ logger.debug("鏀跺埌redis杩囨湡鐩戝惉锛屼絾寮�澶翠笉鏄�"+VideoManagerConstants.PLATFORM_KEEPLIVEKEY_PREFIX+"锛屽拷鐣�");
return;
}
// 骞冲彴蹇冭烦鍒版湡,闇�瑕侀噸鍙�, 鍒ゆ柇鏄惁宸茬粡澶氭鏈敹鍒板績璺冲洖澶�, 澶氭鏈敹鍒�,鍒欓噸鏂板彂璧锋敞鍐�, 娉ㄥ唽灏濊瘯澶氭鏈緱鍒板洖澶�,鍒欒涓哄钩鍙扮绾�
@@ -49,7 +49,6 @@
publisher.platformKeepaliveExpireEventPublish(platformGBId);
}else if (expiredKey.startsWith(VideoManagerConstants.PLATFORM_REGISTER_PREFIX)) {
- logger.info("11111111111111");
String platformGBId = expiredKey.substring(VideoManagerConstants.PLATFORM_REGISTER_PREFIX.length(),expiredKey.length());
publisher.platformNotRegisterEventPublish(platformGBId);
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 27ced6c..cc871ef 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
@@ -38,7 +38,7 @@
// 鑾峰彇澶辨晥鐨刱ey
String expiredKey = message.toString();
if(!expiredKey.startsWith(VideoManagerConstants.KEEPLIVEKEY_PREFIX)){
- logger.info("鏀跺埌redis杩囨湡鐩戝惉锛屼絾寮�澶翠笉鏄�"+VideoManagerConstants.KEEPLIVEKEY_PREFIX+"锛屽拷鐣�");
+ logger.debug("鏀跺埌redis杩囨湡鐩戝惉锛屼絾寮�澶翠笉鏄�"+VideoManagerConstants.KEEPLIVEKEY_PREFIX+"锛屽拷鐣�");
return;
}
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/event/platformKeepaliveExpire/PlatformKeepaliveExpireEventLister.java b/src/main/java/com/genersoft/iot/vmp/gb28181/event/platformKeepaliveExpire/PlatformKeepaliveExpireEventLister.java
index 4e2561c..480ed1d 100644
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/event/platformKeepaliveExpire/PlatformKeepaliveExpireEventLister.java
+++ b/src/main/java/com/genersoft/iot/vmp/gb28181/event/platformKeepaliveExpire/PlatformKeepaliveExpireEventLister.java
@@ -63,6 +63,7 @@
if (parentPlatformCatch.getKeepAliveReply() >= 3) {
// 鏈�3娆℃湭鏀跺埌蹇冭烦鍥炲, 璁剧疆骞冲彴鐘舵�佷负绂荤嚎, 寮�濮嬮噸鏂版敞鍐�
logger.warn("鏈�3娆℃湭鏀跺埌蹇冭烦鍥炲,鏍囪璁剧疆骞冲彴鐘舵�佷负绂荤嚎, 骞堕噸鏂版敞鍐� 骞冲彴鍥芥爣ID锛�" + event.getPlatformGbID());
+ storager.updateParentPlatformStatus(event.getPlatformGbID(), false);
publisher.platformNotRegisterEventPublish(event.getPlatformGbID());
parentPlatformCatch.setKeepAliveReply(0);
}else {
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 b9b0089..a53583b 100644
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/event/platformNotRegister/PlatformNotRegisterEventLister.java
+++ b/src/main/java/com/genersoft/iot/vmp/gb28181/event/platformNotRegister/PlatformNotRegisterEventLister.java
@@ -1,13 +1,20 @@
package com.genersoft.iot.vmp.gb28181.event.platformNotRegister;
import com.genersoft.iot.vmp.gb28181.bean.ParentPlatform;
+import com.genersoft.iot.vmp.gb28181.bean.SendRtpItem;
import com.genersoft.iot.vmp.gb28181.transmit.cmd.impl.SIPCommanderFroPlatform;
+import com.genersoft.iot.vmp.media.zlm.ZLMRTPServerFactory;
+import com.genersoft.iot.vmp.storager.IRedisCatchStorage;
import com.genersoft.iot.vmp.storager.IVideoManagerStorager;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationListener;
import org.springframework.stereotype.Component;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
/**
* @Description: 骞冲彴鏈敞鍐屼簨浠�,鏉ユ簮鏈変簩:
@@ -23,9 +30,14 @@
@Autowired
private IVideoManagerStorager storager;
+ @Autowired
+ private IRedisCatchStorage redisCatchStorage;
@Autowired
private SIPCommanderFroPlatform sipCommanderFroPlatform;
+
+ @Autowired
+ private ZLMRTPServerFactory zlmrtpServerFactory;
// @Autowired
// private RedisUtil redis;
@@ -33,13 +45,38 @@
@Override
public void onApplicationEvent(PlatformNotRegisterEvent event) {
- logger.debug("骞冲彴鏈敞鍐屼簨浠惰Е鍙戯紝骞冲彴鍥芥爣ID锛�" + event.getPlatformGbID());
+ logger.info("骞冲彴鏈敞鍐屼簨浠惰Е鍙戯紝骞冲彴鍥芥爣ID锛�" + event.getPlatformGbID());
ParentPlatform parentPlatform = storager.queryParentPlatByServerGBId(event.getPlatformGbID());
if (parentPlatform == null) {
- logger.debug("骞冲彴鏈敞鍐屼簨浠惰Е鍙戯紝浣嗗钩鍙板凡缁忓垹闄�!!! 骞冲彴鍥芥爣ID锛�" + event.getPlatformGbID());
+ logger.info("骞冲彴鏈敞鍐屼簨浠惰Е鍙戯紝浣嗗钩鍙板凡缁忓垹闄�!!! 骞冲彴鍥芥爣ID锛�" + event.getPlatformGbID());
return;
}
+ // 鏌ヨ鏄惁鏈夋帹娴侊紝 濡傛灉鏈夊垯閮藉仠姝�
+ List<SendRtpItem> sendRtpItems = redisCatchStorage.querySendRTPServer(event.getPlatformGbID());
+ logger.info("鍋滄[ {} ]鐨勬墍鏈夋帹娴乻ize", sendRtpItems.size());
+ if (sendRtpItems != null && sendRtpItems.size() > 0) {
+ logger.info("鍋滄[ {} ]鐨勬墍鏈夋帹娴�", event.getPlatformGbID());
+ StringBuilder app = new StringBuilder();
+ StringBuilder stream = new StringBuilder();
+ for (int i = 0; i < sendRtpItems.size(); i++) {
+ if (app.length() != 0) {
+ app.append(",");
+ }
+ app.append(sendRtpItems.get(i).getApp());
+ if (stream.length() != 0) {
+ stream.append(",");
+ }
+ stream.append(sendRtpItems.get(i).getStreamId());
+ redisCatchStorage.deleteSendRTPServer(event.getPlatformGbID(), sendRtpItems.get(i).getChannelId());
+ }
+ Map<String, Object> param = new HashMap<>();
+ param.put("vhost","__defaultVhost__");
+ param.put("app", app.toString());
+ param.put("stream", stream.toString());
+ zlmrtpServerFactory.stopSendRtpStream(param);
+
+ }
sipCommanderFroPlatform.register(parentPlatform);
}
}
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/callback/CheckForAllRecordsThread.java b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/callback/CheckForAllRecordsThread.java
index 770edf0..b9f3f23 100644
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/callback/CheckForAllRecordsThread.java
+++ b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/callback/CheckForAllRecordsThread.java
@@ -43,7 +43,7 @@
if (totalRecordList.size() < this.recordInfo.getSumNum()) {
logger.info("宸茶幏鍙�" + totalRecordList.size() + "椤瑰綍鍍忔暟鎹紝鍏�" + this.recordInfo.getSumNum() + "椤�");
} else {
- logger.info("褰曞儚鏁版嵁宸插叏閮ㄨ幏鍙栵紝鍏�" + this.recordInfo.getSumNum() + "椤�");
+ logger.info("褰曞儚鏁版嵁宸插叏閮ㄨ幏鍙栵紝鍏� {} 椤�", this.recordInfo.getSumNum());
this.recordInfo.setRecordList(totalRecordList);
for (int i = 0; i < cacheKeys.size(); i++) {
redis.del(cacheKeys.get(i).toString());
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/request/impl/ByeRequestProcessor.java b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/request/impl/ByeRequestProcessor.java
index 17104ba..fdb7c0b 100644
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/request/impl/ByeRequestProcessor.java
+++ b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/request/impl/ByeRequestProcessor.java
@@ -58,6 +58,7 @@
param.put("vhost","__defaultVhost__");
param.put("app",sendRtpItem.getApp());
param.put("stream",streamId);
+ param.put("ssrc",sendRtpItem.getSsrc());
logger.info("鍋滄鍚戜笂绾ф帹娴侊細" + streamId);
zlmrtpServerFactory.stopSendRtpStream(param);
redisCatchStorage.deleteSendRTPServer(platformGbId, channelId);
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/request/impl/InviteRequestProcessor.java b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/request/impl/InviteRequestProcessor.java
index 91b6ecc..43be89d 100644
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/request/impl/InviteRequestProcessor.java
+++ b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/request/impl/InviteRequestProcessor.java
@@ -93,6 +93,11 @@
GbStream gbStream = storager.queryStreamInParentPlatform(requesterId, channelId);
// 涓嶆槸閫氶亾鍙兘鏄洿鎾祦
if (channel != null || gbStream != null ) {
+ if (channel.getStatus() == 0) {
+ logger.info("閫氶亾绂荤嚎锛岃繑鍥�400");
+ responseAck(evt, Response.BAD_REQUEST, "channel [" + channel.getChannelId() + "] offline");
+ return;
+ }
responseAck(evt, Response.CALL_IS_BEING_FORWARDED); // 閫氶亾瀛樺湪锛屽彂181锛屽懠鍙浆鎺ヤ腑
}else {
logger.info("閫氶亾涓嶅瓨鍦紝杩斿洖404");
@@ -367,6 +372,12 @@
getServerTransaction(evt).sendResponse(response);
}
+ private void responseAck(RequestEvent evt, int statusCode, String msg) throws SipException, InvalidArgumentException, ParseException {
+ Response response = getMessageFactory().createResponse(statusCode, evt.getRequest());
+ response.setReasonPhrase(msg);
+ getServerTransaction(evt).sendResponse(response);
+ }
+
/**
* 鍥炲甯dp鐨�200
* @param evt
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/request/impl/MessageRequestProcessor.java b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/request/impl/MessageRequestProcessor.java
index a21ce59..c2f624f 100644
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/request/impl/MessageRequestProcessor.java
+++ b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/request/impl/MessageRequestProcessor.java
@@ -770,14 +770,17 @@
try {
Element rootElement = getRootElement(evt);
String deviceId = XmlUtil.getText(rootElement, "DeviceID");
- // 妫�鏌ヨ澶囨槸鍚﹀瓨鍦紝 涓嶅瓨鍦ㄥ垯涓嶅洖澶�
- if (storager.exists(deviceId)) {
+ Device device = storager.queryVideoDevice(deviceId);
+ // 妫�鏌ヨ澶囨槸鍚﹀瓨鍦ㄥ苟鍦ㄧ嚎锛� 涓嶅瓨鍦ㄥ垯涓嶅洖澶�
+ if (device != null && device.getOnline() == 1) {
// 鍥炲200 OK
responseAck(evt);
if (offLineDetector.isOnline(deviceId)) {
publisher.onlineEventPublish(deviceId, VideoManagerConstants.EVENT_ONLINE_KEEPLIVE);
} else {
}
+ }else {
+ logger.warn("鏀跺埌[ "+deviceId+" ]蹇冭烦淇℃伅, 浣嗘槸璁惧" + (device == null? "涓嶅瓨鍦�":"绂荤嚎") + ", 蹇冭烦淇℃伅涓嶄簣浠ュ洖澶�");
}
} catch (ParseException | SipException | InvalidArgumentException | DocumentException e) {
e.printStackTrace();
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/request/impl/RegisterRequestProcessor.java b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/request/impl/RegisterRequestProcessor.java
index c288470..7ad18c1 100644
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/request/impl/RegisterRequestProcessor.java
+++ b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/request/impl/RegisterRequestProcessor.java
@@ -146,7 +146,7 @@
// 娉ㄥ唽鎴愬姛
// 淇濆瓨鍒皉edis
// 涓嬪彂catelog鏌ヨ鐩綍
- if (registerFlag == 1 && device != null) {
+ if (registerFlag == 1 ) {
logger.info("娉ㄥ唽鎴愬姛! deviceId:" + device.getDeviceId());
// boolean exists = storager.exists(device.getDeviceId());
device.setRegisterTimeMillis(System.currentTimeMillis());
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/response/impl/RegisterResponseProcessor.java b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/response/impl/RegisterResponseProcessor.java
index d6df26a..ba3003d 100644
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/response/impl/RegisterResponseProcessor.java
+++ b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/response/impl/RegisterResponseProcessor.java
@@ -80,12 +80,13 @@
// 娉ㄥ唽/娉ㄩ攢鎴愬姛
logger.info(String.format("%s %s鎴愬姛", platformGBId, action));
redisCatchStorage.delPlatformRegisterInfo(callId);
- parentPlatform.setStatus(true);
+ parentPlatform.setStatus("娉ㄥ唽".equals(action));
// 鍙栧洖Expires璁剧疆锛岄伩鍏嶆敞閿�杩囩▼涓缃负0
ParentPlatform parentPlatformTmp = storager.queryParentPlatByServerGBId(platformGBId);
String expires = parentPlatformTmp.getExpires();
parentPlatform.setExpires(expires);
- storager.updateParentPlatform(parentPlatform);
+ parentPlatform.setId(parentPlatformTmp.getId());
+ storager.updateParentPlatformStatus(platformGBId, "娉ㄥ唽".equals(action));
redisCatchStorage.updatePlatformRegister(parentPlatform);
diff --git a/src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMMediaListManager.java b/src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMMediaListManager.java
index 3b7428a..a50b170 100644
--- a/src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMMediaListManager.java
+++ b/src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMMediaListManager.java
@@ -1,6 +1,9 @@
package com.genersoft.iot.vmp.media.zlm;
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
+import com.genersoft.iot.vmp.conf.MediaServerConfig;
import com.genersoft.iot.vmp.media.zlm.dto.StreamProxyItem;
import com.genersoft.iot.vmp.media.zlm.dto.StreamPushItem;
import com.genersoft.iot.vmp.gb28181.bean.GbStream;
@@ -119,4 +122,33 @@
storager.mediaOutline(app, streamId);
}
}
+
+ public void clearAllSessions() {
+ logger.info("娓呯┖鎵�鏈夊浗鏍囩浉鍏崇殑session");
+ JSONObject allSessionJSON = zlmresTfulUtils.getAllSession();
+ MediaServerConfig mediaInfo = redisCatchStorage.getMediaInfo();
+ HashSet<String> allLocalPorts = new HashSet();
+ if (allSessionJSON.getInteger("code") == 0) {
+ JSONArray data = allSessionJSON.getJSONArray("data");
+ if (data.size() > 0) {
+ for (int i = 0; i < data.size(); i++) {
+ JSONObject sessionJOSN = data.getJSONObject(i);
+ Integer local_port = sessionJOSN.getInteger("local_port");
+ if (!local_port.equals(Integer.valueOf(mediaInfo.getHttpPort())) &&
+ !local_port.equals(Integer.valueOf(mediaInfo.getHttpSSLport())) &&
+ !local_port.equals(Integer.valueOf(mediaInfo.getRtmpPort())) &&
+ !local_port.equals(Integer.valueOf(mediaInfo.getRtspPort())) &&
+ !local_port.equals(Integer.valueOf(mediaInfo.getRtspSSlport())) &&
+ !local_port.equals(Integer.valueOf(mediaInfo.getHookOnFlowReport()))){
+ allLocalPorts.add(sessionJOSN.getInteger("local_port") + "");
+ }
+ }
+ }
+ }
+ if (allLocalPorts.size() > 0) {
+ List<String> result = new ArrayList<>(allLocalPorts);
+ String localPortSStr = String.join(",", result);
+ zlmresTfulUtils.kickSessions(localPortSStr);
+ }
+ }
}
diff --git a/src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMRESTfulUtils.java b/src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMRESTfulUtils.java
index 8ff9224..a864f3c 100644
--- a/src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMRESTfulUtils.java
+++ b/src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMRESTfulUtils.java
@@ -194,4 +194,14 @@
param.put("force", 1);
return sendPost("close_streams",param, null);
}
+
+ public JSONObject getAllSession() {
+ return sendPost("getAllSession",null, null);
+ }
+
+ public void kickSessions(String localPortSStr) {
+ Map<String, Object> param = new HashMap<>();
+ param.put("local_port", localPortSStr);
+ sendPost("kick_sessions",param, null);
+ }
}
diff --git a/src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMRTPServerFactory.java b/src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMRTPServerFactory.java
index ffe91d2..430c690 100644
--- a/src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMRTPServerFactory.java
+++ b/src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMRTPServerFactory.java
@@ -18,13 +18,13 @@
private Logger logger = LoggerFactory.getLogger("ZLMRTPServerFactory");
- @Value("${media.rtp.udpPortRange}")
- private String udpPortRange;
+ @Value("${media.rtp.portRange}")
+ private String portRange;
@Autowired
private ZLMRESTfulUtils zlmresTfulUtils;
- private int[] udpPortRangeArray = new int[2];
+ private int[] portRangeArray = new int[2];
private int currentPort = 0;
@@ -52,7 +52,7 @@
Map<String, Object> param = new HashMap<>();
int result = -1;
- int newPort = getPortFromUdpPortRange();
+ int newPort = getPortFromportRange();
param.put("port", newPort);
param.put("enable_tcp", 1);
param.put("stream_id", streamId);
@@ -101,16 +101,16 @@
return result;
}
- private int getPortFromUdpPortRange() {
+ private int getPortFromportRange() {
if (currentPort == 0) {
- String[] udpPortRangeStrArray = udpPortRange.split(",");
- udpPortRangeArray[0] = Integer.parseInt(udpPortRangeStrArray[0]);
- udpPortRangeArray[1] = Integer.parseInt(udpPortRangeStrArray[1]);
+ String[] portRangeStrArray = portRange.split(",");
+ portRangeArray[0] = Integer.parseInt(portRangeStrArray[0]);
+ portRangeArray[1] = Integer.parseInt(portRangeStrArray[1]);
}
- if (currentPort == 0 || currentPort++ > udpPortRangeArray[1]) {
- currentPort = udpPortRangeArray[0];
- return udpPortRangeArray[0];
+ if (currentPort == 0 || currentPort++ > portRangeArray[1]) {
+ currentPort = portRangeArray[0];
+ return portRangeArray[0];
} else {
if (currentPort % 2 == 1) {
currentPort++;
@@ -244,4 +244,8 @@
}
return result;
}
+
+ public void closeAllSendRtpStream() {
+
+ }
}
diff --git a/src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMRunner.java b/src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMRunner.java
index 0e6bfc0..2bbc1be 100644
--- a/src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMRunner.java
+++ b/src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMRunner.java
@@ -164,6 +164,10 @@
mediaServerConfig.setLocalIP(mediaIp);
mediaServerConfig.setWanIp(StringUtils.isEmpty(mediaWanIp)? mediaIp: mediaWanIp);
redisCatchStorage.updateMediaInfo(mediaServerConfig);
+
+ // 娓呯┖鎵�鏈塻ession
+// zlmMediaListManager.clearAllSessions();
+
// 鏇存柊娴佸垪琛�
zlmMediaListManager.updateMediaList();
// 鎭㈠娴佷唬鐞�
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 8b2c2bf..978ddc3 100644
--- a/src/main/java/com/genersoft/iot/vmp/storager/IRedisCatchStorage.java
+++ b/src/main/java/com/genersoft/iot/vmp/storager/IRedisCatchStorage.java
@@ -6,6 +6,7 @@
import com.genersoft.iot.vmp.gb28181.bean.ParentPlatformCatch;
import com.genersoft.iot.vmp.gb28181.bean.SendRtpItem;
+import java.util.List;
import java.util.Map;
public interface IRedisCatchStorage {
@@ -91,6 +92,8 @@
*/
SendRtpItem querySendRTPServer(String platformGbId, String channelId);
+ List<SendRtpItem> querySendRTPServer(String platformGbId);
+
/**
* 鍒犻櫎RTP鎺ㄩ�佷俊鎭紦瀛�
* @param platformGbId
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 3e001b0..5d838c5 100644
--- a/src/main/java/com/genersoft/iot/vmp/storager/IVideoManagerStorager.java
+++ b/src/main/java/com/genersoft/iot/vmp/storager/IVideoManagerStorager.java
@@ -135,6 +135,13 @@
*/
public boolean outline(String deviceId);
+ /**
+ * 鏇存柊鎵�鏈夎澶囩绾�
+ *
+ * @return true锛氭洿鏂版垚鍔� false锛氭洿鏂板け璐�
+ */
+ public boolean outlineForAll();
+
/**
* 鏌ヨ瀛愯澶�
@@ -352,4 +359,10 @@
* @param streamId
*/
void mediaOutline(String app, String streamId);
+
+ /**
+ * 璁剧疆骞冲彴鍦ㄧ嚎/绂荤嚎
+ * @param online
+ */
+ void updateParentPlatformStatus(String platformGbID, boolean online);
}
diff --git a/src/main/java/com/genersoft/iot/vmp/storager/dao/DeviceMapper.java b/src/main/java/com/genersoft/iot/vmp/storager/dao/DeviceMapper.java
index f6e328b..bcc33de 100644
--- a/src/main/java/com/genersoft/iot/vmp/storager/dao/DeviceMapper.java
+++ b/src/main/java/com/genersoft/iot/vmp/storager/dao/DeviceMapper.java
@@ -65,4 +65,7 @@
@Delete("DELETE FROM device WHERE deviceId=#{deviceId}")
int del(String deviceId);
+
+ @Update("UPDATE device SET online=0")
+ int outlineForAll();
}
diff --git a/src/main/java/com/genersoft/iot/vmp/storager/dao/ParentPlatformMapper.java b/src/main/java/com/genersoft/iot/vmp/storager/dao/ParentPlatformMapper.java
index c18c5c3..bb81171 100644
--- a/src/main/java/com/genersoft/iot/vmp/storager/dao/ParentPlatformMapper.java
+++ b/src/main/java/com/genersoft/iot/vmp/storager/dao/ParentPlatformMapper.java
@@ -66,5 +66,8 @@
ParentPlatform getParentPlatById(int id);
@Update("UPDATE parent_platform SET status=false" )
- void outlineForAllParentPlatform();
+ int outlineForAllParentPlatform();
+
+ @Update("UPDATE parent_platform SET status=#{online} WHERE serverGBId=#{platformGbID}" )
+ int updateParentPlatformStatus(String platformGbID, boolean online);
}
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 98795ef..74d6779 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
@@ -233,6 +233,20 @@
return (SendRtpItem)redis.get(key);
}
+ @Override
+ public List<SendRtpItem> querySendRTPServer(String platformGbId) {
+ String key = VideoManagerConstants.PLATFORM_SEND_RTP_INFO_PREFIX + platformGbId + "_*";
+ List<Object> queryResult = redis.scan(key);
+ List<SendRtpItem> result= new ArrayList<>();
+
+ for (int i = 0; i < queryResult.size(); i++) {
+ String keyItem = (String) queryResult.get(i);
+ result.add((SendRtpItem)redis.get(keyItem));
+ }
+
+ return result;
+ }
+
/**
* 鍒犻櫎RTP鎺ㄩ�佷俊鎭紦瀛�
* @param platformGbId
diff --git a/src/main/java/com/genersoft/iot/vmp/storager/impl/VideoManagerStoragerImpl.java b/src/main/java/com/genersoft/iot/vmp/storager/impl/VideoManagerStoragerImpl.java
index 7e206bf..cbaa404 100644
--- a/src/main/java/com/genersoft/iot/vmp/storager/impl/VideoManagerStoragerImpl.java
+++ b/src/main/java/com/genersoft/iot/vmp/storager/impl/VideoManagerStoragerImpl.java
@@ -257,6 +257,18 @@
}
/**
+ * 鏇存柊鎵�鏈夎澶囩绾�
+ *
+ * @return true锛氭洿鏂版垚鍔� false锛氭洿鏂板け璐�
+ */
+ @Override
+ public synchronized boolean outlineForAll() {
+ logger.info("鏇存柊鎵�鏈夎澶囩绾�");
+ int result = deviceMapper.outlineForAll();
+ return result > 0;
+ }
+
+ /**
* 娓呯┖閫氶亾
* @param deviceId
*/
@@ -575,5 +587,8 @@
gbStreamMapper.setStatus(app, streamId, false);
}
-
+ @Override
+ public void updateParentPlatformStatus(String platformGbID, boolean online) {
+ platformMapper.updateParentPlatformStatus(platformGbID, online);
+ }
}
diff --git a/src/main/resources/application-dev.yml b/src/main/resources/application-dev.yml
index e28925b..cdab711 100644
--- a/src/main/resources/application-dev.yml
+++ b/src/main/resources/application-dev.yml
@@ -78,12 +78,12 @@
autoApplyPlay: false
# [鍙�塢 閮ㄥ垎璁惧闇�瑕佹墿灞昐DP锛岄渶瑕佹墦寮�姝よ缃�
seniorSdp: false
- # 鍚敤udp澶氱鍙fā寮�
+ # 鍚敤澶氱鍙fā寮�, 澶氱鍙fā寮忎娇鐢ㄧ鍙e尯鍒嗘瘡璺祦锛屽吋瀹规�ф洿濂姐�� 鍗曠鍙d娇鐢ㄦ祦鐨剆src鍖哄垎锛� 鐐规挱瓒呮椂寤鸿浣跨敤澶氱鍙f祴璇�
rtp:
- # [鍙�塢 鏄惁鍚敤udp澶氱鍙fā寮�, 寮�鍚悗浼氬湪udpPortRange鑼冨洿鍐呴�夋嫨绔彛鐢ㄤ簬濯掍綋娴佷紶杈�
+ # [鍙�塢 鏄惁鍚敤澶氱鍙fā寮�, 寮�鍚悗浼氬湪portRange鑼冨洿鍐呴�夋嫨绔彛鐢ㄤ簬濯掍綋娴佷紶杈�
enable: true
- # [鍙�塢 鍦ㄦ鑼冨洿鍐呴�夋嫨绔彛鐢ㄤ簬濯掍綋娴佷紶杈�, 涓嶅彧鏄痷dp, 浣跨敤TCP琚姩浼犺緭妯″紡鏃�,涔熸槸浠庤繖涓寖鍥村唴閫夋嫨绔彛
- udpPortRange: 30000,30500 # 绔彛鑼冨洿
+ # [鍙�塢 鍦ㄦ鑼冨洿鍐呴�夋嫨绔彛鐢ㄤ簬濯掍綋娴佷紶杈�,
+ portRange: 30000,30500 # 绔彛鑼冨洿
# [鍙�塢 鏃ュ織閰嶇疆, 涓�鑸笉闇�瑕佹敼
logging:
--
Gitblit v1.8.0