From 8f77d0c25cdd37d4cc96c923b46ae28607bae51d Mon Sep 17 00:00:00 2001
From: jiang <893224616@qq.com>
Date: 星期四, 18 八月 2022 16:17:23 +0800
Subject: [PATCH] 根据redis消息更新推流列表

---
 src/main/java/com/genersoft/iot/vmp/service/impl/MediaServerServiceImpl.java |   48 ++++++++++++++++++++++++++++++++++--------------
 1 files changed, 34 insertions(+), 14 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..df66bba 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;
@@ -35,7 +36,6 @@
 import com.genersoft.iot.vmp.service.bean.SSRCInfo;
 import com.genersoft.iot.vmp.storager.dao.MediaServerMapper;
 import com.genersoft.iot.vmp.utils.DateUtil;
-import com.genersoft.iot.vmp.utils.redis.JedisUtil;
 import com.genersoft.iot.vmp.utils.redis.RedisUtil;
 import com.genersoft.iot.vmp.vmanager.bean.WVPResult;
 
@@ -53,6 +53,9 @@
 
     @Autowired
     private SipConfig sipConfig;
+
+    @Autowired
+    private ZLMRunner zlmRunner;
 
     @Value("${server.ssl.enabled:false}")
     private boolean sslEnabled;
@@ -86,9 +89,6 @@
 
     @Autowired
     private EventPublisher publisher;
-
-    @Autowired
-    JedisUtil jedisUtil;
 
     /**
      * 鍒濆鍖�
@@ -277,11 +277,7 @@
             return null;
         }
         String key = VideoManagerConstants.MEDIA_SERVER_PREFIX + userSetting.getServerId() + "_" + mediaServerId;
-        MediaServerItem serverItem=(MediaServerItem)redisUtil.get(key);
-        if(null==serverItem){
-            serverItem=mediaServerMapper.queryOne(mediaServerId);
-        }
-        return serverItem;
+        return (MediaServerItem)redisUtil.get(key);
     }
 
     @Override
@@ -410,7 +406,6 @@
         }
         redisUtil.set(key, serverItem);
         resetOnlineServerItem(serverItem);
-        updateMediaServerKeepalive(serverItem.getId(), null);
         if (serverItem.isAutoConfig()) {
             setZLMConfig(serverItem, "0".equals(zlmServerConfig.getHookEnable()));
         }
@@ -474,8 +469,10 @@
         String key = VideoManagerConstants.MEDIA_SERVERS_ONLINE_PREFIX + userSetting.getServerId();
 
         if (redisUtil.zSize(key)  == null || redisUtil.zSize(key) == 0) {
-            logger.info("鑾峰彇璐熻浇鏈�浣庣殑鑺傜偣鏃舵棤鍦ㄧ嚎鑺傜偣");
-            return null;
+            if (redisUtil.zSize(key)  == null || redisUtil.zSize(key) == 0) {
+                logger.info("鑾峰彇璐熻浇鏈�浣庣殑鑺傜偣鏃舵棤鍦ㄧ嚎鑺傜偣");
+                return null;
+            }
         }
 
         // 鑾峰彇鍒嗘暟鏈�浣庣殑锛屽強骞跺彂鏈�浣庣殑
@@ -636,13 +633,28 @@
     public void updateMediaServerKeepalive(String mediaServerId, JSONObject data) {
         MediaServerItem mediaServerItem = getOne(mediaServerId);
         if (mediaServerItem == null) {
+            // 缂撳瓨涓嶅瓨鍦紝浠庢暟鎹簱鏌ヨ锛屽鏋滄暟鎹簱涓嶅瓨鍦ㄥ垯鏄敊璇殑
+            MediaServerItem mediaServerItemFromDatabase = getOneFromDatabase(mediaServerId);
+            if (mediaServerItemFromDatabase == null) {
+                return;
+            }
             // 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;
         redisUtil.set(key, data, hookAliveInterval);
+    }
+
+    private MediaServerItem getOneFromDatabase(String mediaServerId) {
+        return mediaServerMapper.queryOne(mediaServerId);
     }
 
     @Override
@@ -661,4 +673,12 @@
         }
     }
 
+    public void reloadZlm(){
+        try {
+            zlmRunner.run();
+            Thread.sleep(500);//寤惰繜0.5绉掔紦鍐叉椂闂�
+        } catch (Exception e) {
+            logger.warn("灏濊瘯閲嶈繛zlm澶辫触锛�",e);
+        }
+    }
 }

--
Gitblit v1.8.0