Jelajahi Sumber

清理过期的推流鉴权信息

648540858 3 tahun lalu
induk
melakukan
5f7c53823a

+ 15 - 0
src/main/java/com/genersoft/iot/vmp/service/impl/StreamPushServiceImpl.java

@@ -221,6 +221,12 @@ public class StreamPushServiceImpl implements IStreamPushService {
                 streamInfoPushItemMap.put(onStreamChangedHookParam.getApp() + onStreamChangedHookParam.getStream(), onStreamChangedHookParam);
             }
         }
+        // 获取所有推流鉴权信息,清理过期的
+        List<StreamAuthorityInfo> allStreamAuthorityInfo = redisCatchStorage.getAllStreamAuthorityInfo();
+        Map<String, StreamAuthorityInfo> streamAuthorityInfoInfoMap = new HashMap<>();
+        for (StreamAuthorityInfo streamAuthorityInfo : allStreamAuthorityInfo) {
+            streamAuthorityInfoInfoMap.put(streamAuthorityInfo.getApp() + streamAuthorityInfo.getStream(), streamAuthorityInfo);
+        }
         zlmresTfulUtils.getMediaList(mediaServerItem, (mediaList ->{
             if (mediaList == null) {
                 return;
@@ -239,6 +245,7 @@ public class StreamPushServiceImpl implements IStreamPushService {
                 for (StreamPushItem streamPushItem : streamPushItems) {
                     pushItemMap.remove(streamPushItem.getApp() + streamPushItem.getStream());
                     streamInfoPushItemMap.remove(streamPushItem.getApp() + streamPushItem.getStream());
+                    streamAuthorityInfoInfoMap.remove(streamPushItem.getApp() + streamPushItem.getStream());
                 }
             }
             List<StreamPushItem> offlinePushItems = new ArrayList<>(pushItemMap.values());
@@ -274,6 +281,14 @@ public class StreamPushServiceImpl implements IStreamPushService {
                     redisCatchStorage.removeStream(mediaServerItem.getId(), "PUSH", offlineOnStreamChangedHookParam.getApp(), offlineOnStreamChangedHookParam.getStream());
                 }
             }
+
+            Collection<StreamAuthorityInfo> streamAuthorityInfos = streamAuthorityInfoInfoMap.values();
+            if (streamAuthorityInfos.size() > 0) {
+                for (StreamAuthorityInfo streamAuthorityInfo : streamAuthorityInfos) {
+                    // 移除redis内流的信息
+                    redisCatchStorage.removeStreamAuthorityInfo(streamAuthorityInfo.getApp(), streamAuthorityInfo.getStream());
+                }
+            }
         }));
     }
 

+ 2 - 0
src/main/java/com/genersoft/iot/vmp/storager/IRedisCatchStorage.java

@@ -233,6 +233,8 @@ public interface IRedisCatchStorage {
      */
     StreamAuthorityInfo getStreamAuthorityInfo(String app, String stream);
 
+    List<StreamAuthorityInfo> getAllStreamAuthorityInfo();
+
     /**
      * 发送redis消息 查询所有推流设备的状态
      */

+ 12 - 0
src/main/java/com/genersoft/iot/vmp/storager/impl/RedisCatchStorageImpl.java

@@ -714,6 +714,18 @@ public class RedisCatchStorageImpl implements IRedisCatchStorage {
 
     }
 
+    @Override
+    public List<StreamAuthorityInfo> getAllStreamAuthorityInfo() {
+        String scanKey = VideoManagerConstants.MEDIA_STREAM_AUTHORITY + userSetting.getServerId() + "_*_*" ;
+        List<StreamAuthorityInfo> result = new ArrayList<>();
+        List<Object> keys = RedisUtil.scan(scanKey);
+        for (Object o : keys) {
+            String key = (String) o;
+            result.add((StreamAuthorityInfo) RedisUtil.get(key));
+        }
+        return result;
+    }
+
 
     @Override
     public OnStreamChangedHookParam getStreamInfo(String app, String streamId, String mediaServerId) {