From 2bac0b3c222734aeb9087fee443af198bd67f06c Mon Sep 17 00:00:00 2001
From: 648540858 <456PANlinlin>
Date: 星期四, 02 十二月 2021 23:01:06 +0800
Subject: [PATCH] 存储所有流信息到redis

---
 src/main/java/com/genersoft/iot/vmp/media/zlm/dto/OriginType.java            |   22 +++++++++++
 src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMHttpHookListener.java       |   24 ++++++------
 src/main/java/com/genersoft/iot/vmp/storager/impl/RedisCatchStorageImpl.java |   17 ++++++--
 src/main/java/com/genersoft/iot/vmp/storager/IRedisCatchStorage.java         |    4 +-
 src/main/java/com/genersoft/iot/vmp/common/VideoManagerConstants.java        |    2 
 5 files changed, 49 insertions(+), 20 deletions(-)

diff --git a/src/main/java/com/genersoft/iot/vmp/common/VideoManagerConstants.java b/src/main/java/com/genersoft/iot/vmp/common/VideoManagerConstants.java
index b400271..03b003b 100644
--- a/src/main/java/com/genersoft/iot/vmp/common/VideoManagerConstants.java
+++ b/src/main/java/com/genersoft/iot/vmp/common/VideoManagerConstants.java
@@ -10,7 +10,7 @@
 	
 	public static final String WVP_SERVER_PREFIX = "VMP_SIGNALLING_SERVER_INFO_";
 
-	public static final String WVP_SERVER_STREAM_PUSH_PREFIX = "VMP_SIGNALLING_STREAM_PUSH_";
+	public static final String WVP_SERVER_STREAM_PUSH_PREFIX = "VMP_SIGNALLING_STREAM_";
 
 	public static final String MEDIA_SERVER_PREFIX = "VMP_MEDIA_SERVER_";
 
diff --git a/src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMHttpHookListener.java b/src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMHttpHookListener.java
index 233416a..f211fd6 100644
--- a/src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMHttpHookListener.java
+++ b/src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMHttpHookListener.java
@@ -11,6 +11,7 @@
 import com.genersoft.iot.vmp.gb28181.bean.Device;
 import com.genersoft.iot.vmp.media.zlm.dto.MediaItem;
 import com.genersoft.iot.vmp.media.zlm.dto.MediaServerItem;
+import com.genersoft.iot.vmp.media.zlm.dto.OriginType;
 import com.genersoft.iot.vmp.media.zlm.dto.StreamProxyItem;
 import com.genersoft.iot.vmp.service.IMediaServerService;
 import com.genersoft.iot.vmp.service.IMediaService;
@@ -315,24 +316,23 @@
 			}else {
 				if (!"rtp".equals(app)){
 
-					boolean pushChange = false;
-
 					MediaServerItem mediaServerItem = mediaServerService.getOne(mediaServerId);
 					if (regist) {
-						if ((item.getOriginType() == 1 || item.getOriginType() == 2 || item.getOriginType() == 8)) {
-							pushChange = true;
+						StreamInfo streamInfo = mediaService.getStreamInfoByAppAndStream(mediaServerItem, app, streamId, tracks);
+						redisCatchStorage.addStream(mediaServerItem, OriginType.values()[item.getOriginType()].getType(), app, streamId, streamInfo);
+						if (item.getOriginType() == OriginType.RTSP_PUSH.ordinal()
+								|| item.getOriginType() == OriginType.RTMP_PUSH.ordinal()
+								|| item.getOriginType() == OriginType.RTC_PUSH.ordinal() ) {
 							zlmMediaListManager.addMedia(item);
-							StreamInfo streamInfo = mediaService.getStreamInfoByAppAndStream(mediaServerItem, app, streamId, tracks);
-							redisCatchStorage.addPushStream(mediaServerItem, app, streamId, streamInfo);
 						}
 					}else {
-						int result = zlmMediaListManager.removeMedia( app, streamId);
-						redisCatchStorage.removePushStream(mediaServerItem, app, streamId);
-						if (result > 0) {
-							pushChange = true;
-						}
+						zlmMediaListManager.removeMedia( app, streamId);
+						redisCatchStorage.removeStream(mediaServerItem, OriginType.values()[item.getOriginType()].getType(), app, streamId);
+
 					}
-					if(pushChange) {
+					if (item.getOriginType() == OriginType.RTSP_PUSH.ordinal()
+							|| item.getOriginType() == OriginType.RTMP_PUSH.ordinal()
+							|| item.getOriginType() == OriginType.RTC_PUSH.ordinal() ) {
 						// 鍙戦�佹祦鍙樺寲redis娑堟伅
 						JSONObject jsonObject = new JSONObject();
 						jsonObject.put("serverId", userSetup.getServerId());
diff --git a/src/main/java/com/genersoft/iot/vmp/media/zlm/dto/OriginType.java b/src/main/java/com/genersoft/iot/vmp/media/zlm/dto/OriginType.java
new file mode 100644
index 0000000..cb41c9a
--- /dev/null
+++ b/src/main/java/com/genersoft/iot/vmp/media/zlm/dto/OriginType.java
@@ -0,0 +1,22 @@
+package com.genersoft.iot.vmp.media.zlm.dto;
+
+public enum OriginType {
+    UNKNOWN("UNKNOWN"),
+    RTMP_PUSH("PUSH"),
+    RTSP_PUSH("PUSH"),
+    RTP_PUSH("RTP"),
+    RTC_PUSH("PUSH"),
+    PULL("PULL"),
+    FFMPEG_PULL("PULL"),
+    MP4_VOD("MP4_VOD"),
+    DEVICE_CHN("DEVICE_CHN");
+
+    private final String type;
+    OriginType(String type) {
+        this.type = type;
+    }
+
+    public String getType() {
+        return type;
+    }
+}
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 5878339..543f932 100644
--- a/src/main/java/com/genersoft/iot/vmp/storager/IRedisCatchStorage.java
+++ b/src/main/java/com/genersoft/iot/vmp/storager/IRedisCatchStorage.java
@@ -135,7 +135,7 @@
      * @param app
      * @param streamId
      */
-    void addPushStream(MediaServerItem mediaServerItem, String app, String streamId, StreamInfo streamInfo);
+    void addStream(MediaServerItem mediaServerItem, String type, String app, String streamId, StreamInfo streamInfo);
 
     /**
      * 绉婚櫎娴佷俊鎭粠redis
@@ -143,7 +143,7 @@
      * @param app
      * @param streamId
      */
-    void removePushStream(MediaServerItem mediaServerItem, String app, String streamId);
+    void removeStream(MediaServerItem mediaServerItem, String type, String app, String streamId);
 
     /**
      * 寮�濮嬩笅杞藉綍鍍忔椂瀛樺叆
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 e98d8fa..dd58118 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
@@ -3,6 +3,7 @@
 import com.alibaba.fastjson.JSONObject;
 import com.genersoft.iot.vmp.common.StreamInfo;
 import com.genersoft.iot.vmp.common.VideoManagerConstants;
+import com.genersoft.iot.vmp.conf.UserSetup;
 import com.genersoft.iot.vmp.gb28181.bean.*;
 import com.genersoft.iot.vmp.media.zlm.dto.MediaServerItem;
 import com.genersoft.iot.vmp.storager.IRedisCatchStorage;
@@ -23,6 +24,9 @@
 
     @Autowired
     private DeviceChannelMapper deviceChannelMapper;
+
+    @Autowired
+    private UserSetup userSetup;
 
     private SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
 
@@ -313,15 +317,18 @@
     }
 
     @Override
-    public void addPushStream(MediaServerItem mediaServerItem, String app, String streamId, StreamInfo streamInfo) {
-        String key = VideoManagerConstants.WVP_SERVER_STREAM_PUSH_PREFIX + app + "_" + streamId + "_" + mediaServerItem.getId();
+    public void addStream(MediaServerItem mediaServerItem, String type, String app, String streamId, StreamInfo streamInfo) {
+        String key = VideoManagerConstants.WVP_SERVER_STREAM_PUSH_PREFIX  + userSetup.getServerId() + "_" + type + "_" + app + "_" + streamId + "_" + mediaServerItem.getId();
         redis.set(key, streamInfo);
     }
 
     @Override
-    public void removePushStream(MediaServerItem mediaServerItem, String app, String streamId) {
-        String key = VideoManagerConstants.WVP_SERVER_STREAM_PUSH_PREFIX + app + "_" + streamId + "_" + mediaServerItem.getId();
-        redis.del(key);
+    public void removeStream(MediaServerItem mediaServerItem, String type, String app, String streamId) {
+        String key = VideoManagerConstants.WVP_SERVER_STREAM_PUSH_PREFIX + userSetup.getServerId() + "_*_"  + app + "_" + streamId + "_" + mediaServerItem.getId();
+        List<Object> streams = redis.scan(key);
+        for (Object stream : streams) {
+            redis.del((String) stream);
+        }
     }
 
     @Override

--
Gitblit v1.8.0