From 8f2ce95165f90e51d41b083610d00ae346f3a852 Mon Sep 17 00:00:00 2001
From: kunlong-luo <kunlong_luo@163.com>
Date: 星期四, 02 二月 2023 14:36:19 +0800
Subject: [PATCH] fix: 修复空指针和类型转换问题

---
 src/main/java/com/genersoft/iot/vmp/service/impl/MediaServerServiceImpl.java |   35 ++++++++++++++++++++++++++++++-----
 1 files changed, 30 insertions(+), 5 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 d9f922a..c005e64 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
@@ -169,7 +169,6 @@
             return;
         }
         zlmrtpServerFactory.closeRtpServer(mediaServerItem, streamId);
-        releaseSsrc(mediaServerItem.getId(), streamId);
     }
 
     @Override
@@ -229,7 +228,11 @@
         String onlineKey = VideoManagerConstants.MEDIA_SERVERS_ONLINE_PREFIX + userSetting.getServerId();
         for (Object mediaServerKey : mediaServerKeys) {
             String key = (String) mediaServerKey;
-            MediaServerItem mediaServerItem = (MediaServerItem) RedisUtil.get(key);
+            JSONObject jsonObject = (JSONObject) RedisUtil.get(key);
+            if (Objects.isNull(jsonObject)) {
+                continue;
+            }
+            MediaServerItem mediaServerItem = JSON.parseObject(jsonObject.toJSONString(), MediaServerItem.class);
             // 妫�鏌ョ姸鎬�
             Double aDouble = RedisUtil.zScore(onlineKey, mediaServerItem.getId());
             if (aDouble != null) {
@@ -488,7 +491,7 @@
      * @return MediaServerItem
      */
     @Override
-    public MediaServerItem getMediaServerForMinimumLoad() {
+    public MediaServerItem getMediaServerForMinimumLoad(Boolean hasAssist) {
         String key = VideoManagerConstants.MEDIA_SERVERS_ONLINE_PREFIX + userSetting.getServerId();
 
         if (RedisUtil.zSize(key)  == null || RedisUtil.zSize(key) == 0) {
@@ -501,9 +504,31 @@
         // 鑾峰彇鍒嗘暟鏈�浣庣殑锛屽強骞跺彂鏈�浣庣殑
         Set<Object> objects = RedisUtil.zRange(key, 0, -1);
         ArrayList<Object> mediaServerObjectS = new ArrayList<>(objects);
+        MediaServerItem mediaServerItem = null;
+        if (hasAssist == null) {
+            String mediaServerId = (String)mediaServerObjectS.get(0);
+            mediaServerItem = getOne(mediaServerId);
+        }else if (hasAssist) {
+            for (Object mediaServerObject : mediaServerObjectS) {
+                String mediaServerId = (String)mediaServerObject;
+                MediaServerItem serverItem = getOne(mediaServerId);
+                if (serverItem.getRecordAssistPort() > 0) {
+                    mediaServerItem = serverItem;
+                    break;
+                }
+            }
+        }else if (!hasAssist) {
+            for (Object mediaServerObject : mediaServerObjectS) {
+                String mediaServerId = (String)mediaServerObject;
+                MediaServerItem serverItem = getOne(mediaServerId);
+                if (serverItem.getRecordAssistPort() == 0) {
+                    mediaServerItem = serverItem;
+                    break;
+                }
+            }
+        }
 
-        String mediaServerId = (String)mediaServerObjectS.get(0);
-        return getOne(mediaServerId);
+        return mediaServerItem;
     }
 
     /**

--
Gitblit v1.8.0