From 7ecc86b33d37df8ecda167ca390e932df1442171 Mon Sep 17 00:00:00 2001
From: wym <421132955@qq.com>
Date: 星期一, 08 八月 2022 08:31:12 +0800
Subject: [PATCH] zlm关闭一段时间后,重启后信令服务不重连zlm
---
src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/media/MediaController.java | 29 +++++++++++++-
src/main/java/com/genersoft/iot/vmp/service/impl/MediaServerServiceImpl.java | 35 +++++++++++++++--
2 files changed, 57 insertions(+), 7 deletions(-)
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 8da6df8..5974918 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
@@ -8,6 +8,7 @@
import java.util.Map;
import java.util.Set;
+import com.genersoft.iot.vmp.media.zlm.ZLMRunner;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
@@ -53,6 +54,9 @@
@Autowired
private SipConfig sipConfig;
+
+ @Autowired
+ private ZLMRunner zlmRunner;
@Value("${server.ssl.enabled:false}")
private boolean sslEnabled;
@@ -279,7 +283,9 @@
String key = VideoManagerConstants.MEDIA_SERVER_PREFIX + userSetting.getServerId() + "_" + mediaServerId;
MediaServerItem serverItem=(MediaServerItem)redisUtil.get(key);
if(null==serverItem){
- serverItem=mediaServerMapper.queryOne(mediaServerId);
+ //zlm鏈嶅姟涓嶅湪绾匡紝鍚姩閲嶈繛
+ reloadZlm();
+ serverItem=(MediaServerItem)redisUtil.get(key);
}
return serverItem;
}
@@ -474,8 +480,13 @@
String key = VideoManagerConstants.MEDIA_SERVERS_ONLINE_PREFIX + userSetting.getServerId();
if (redisUtil.zSize(key) == null || redisUtil.zSize(key) == 0) {
- logger.info("鑾峰彇璐熻浇鏈�浣庣殑鑺傜偣鏃舵棤鍦ㄧ嚎鑺傜偣");
- return null;
+ logger.info("鑾峰彇璐熻浇鏈�浣庣殑鑺傜偣鏃舵棤鍦ㄧ嚎鑺傜偣锛屽惎鍔ㄩ噸杩炴満鍒�");
+ //鍚姩閲嶈繛
+ reloadZlm();
+ if (redisUtil.zSize(key) == null || redisUtil.zSize(key) == 0) {
+ logger.info("鑾峰彇璐熻浇鏈�浣庣殑鑺傜偣鏃舵棤鍦ㄧ嚎鑺傜偣");
+ return null;
+ }
}
// 鑾峰彇鍒嗘暟鏈�浣庣殑锛屽強骞跺彂鏈�浣庣殑
@@ -637,8 +648,14 @@
MediaServerItem mediaServerItem = getOne(mediaServerId);
if (mediaServerItem == null) {
// zlm杩炴帴閲嶈瘯
- logger.warn("[鏇存柊ZLM 淇濇椿淇℃伅]澶辫触锛屾湭鎵惧埌娴佸獟浣撲俊鎭�");
- return;
+ logger.warn("[鏇存柊ZLM 淇濇椿淇℃伅]澶辫触锛屾湭鎵惧埌娴佸獟浣撲俊鎭�,灏濊瘯閲嶈繛zlm");
+ reloadZlm();
+ mediaServerItem = getOne(mediaServerId);
+ if (mediaServerItem == null) {
+ // zlm杩炴帴閲嶈瘯
+ logger.warn("[鏇存柊ZLM 淇濇椿淇℃伅]澶辫触锛屾湭鎵惧埌娴佸獟浣撲俊鎭�");
+ return;
+ }
}
String key = VideoManagerConstants.MEDIA_SERVER_KEEPALIVE_PREFIX + userSetting.getServerId() + "_" + mediaServerId;
int hookAliveInterval = mediaServerItem.getHookAliveInterval() + 2;
@@ -661,4 +678,12 @@
}
}
+ public void reloadZlm(){
+ try {
+ zlmRunner.run();
+ Thread.sleep(500);//寤惰繜0.5绉掔紦鍐叉椂闂�
+ } catch (Exception e) {
+ logger.warn("灏濊瘯閲嶈繛zlm澶辫触锛�",e);
+ }
+ }
}
diff --git a/src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/media/MediaController.java b/src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/media/MediaController.java
index 94fe8df..48973f9 100644
--- a/src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/media/MediaController.java
+++ b/src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/media/MediaController.java
@@ -6,6 +6,7 @@
import com.genersoft.iot.vmp.media.zlm.dto.OnPublishHookParam;
import com.genersoft.iot.vmp.media.zlm.dto.StreamAuthorityInfo;
import com.genersoft.iot.vmp.service.IMediaServerService;
+import com.genersoft.iot.vmp.service.IStreamProxyService;
import com.genersoft.iot.vmp.service.IStreamPushService;
import com.genersoft.iot.vmp.service.IMediaService;
import com.genersoft.iot.vmp.storager.IRedisCatchStorage;
@@ -37,6 +38,8 @@
@Autowired
private IMediaService mediaService;
+ @Autowired
+ private IStreamProxyService streamProxyService;
/**
@@ -95,8 +98,30 @@
result.setMsg("scccess");
result.setData(streamInfo);
}else {
- result.setCode(-1);
- result.setMsg("fail");
+ //鑾峰彇娴佸け璐ワ紝閲嶅惎鎷夋祦鍚庨噸璇曚竴娆�
+ streamProxyService.stop(app,stream);
+ boolean start = streamProxyService.start(app, stream);
+ try {
+ Thread.sleep(1000);
+ } catch (InterruptedException e) {
+ e.printStackTrace();
+ }
+ if (useSourceIpAsStreamIp != null && useSourceIpAsStreamIp) {
+ String host = request.getHeader("Host");
+ String localAddr = host.split(":")[0];
+ logger.info("浣跨敤{}浣滀负杩斿洖娴佺殑ip", localAddr);
+ streamInfo = mediaService.getStreamInfoByAppAndStreamWithCheck(app, stream, mediaServerId, localAddr, authority);
+ }else {
+ streamInfo = mediaService.getStreamInfoByAppAndStreamWithCheck(app, stream, mediaServerId, authority);
+ }
+ if (streamInfo != null){
+ result.setCode(0);
+ result.setMsg("scccess");
+ result.setData(streamInfo);
+ }else {
+ result.setCode(-1);
+ result.setMsg("fail");
+ }
}
return result;
}
--
Gitblit v1.8.0