From b1c92cf4e88447fc59a2b0b8b78c0e2c41282141 Mon Sep 17 00:00:00 2001
From: 648540858 <648540858@qq.com>
Date: 星期二, 23 十一月 2021 14:51:37 +0800
Subject: [PATCH] 在redis中添加wvp存活依据,添加推流变化消息

---
 src/main/java/com/genersoft/iot/vmp/web/gb28181/ApiControlController.java               |    2 
 src/main/java/com/genersoft/iot/vmp/conf/UserSetup.java                                 |   10 +++
 src/main/java/com/genersoft/iot/vmp/web/gb28181/ApiStreamController.java                |    2 
 src/main/java/com/genersoft/iot/vmp/gb28181/transmit/callback/DeferredResultHolder.java |    2 
 src/main/java/com/genersoft/iot/vmp/utils/redis/RedisUtil.java                          |    6 ++
 src/main/java/com/genersoft/iot/vmp/common/VideoManagerConstants.java                   |    7 ++
 /dev/null                                                                               |   25 --------
 src/main/java/com/genersoft/iot/vmp/web/gb28181/ApiController.java                      |    2 
 src/main/java/com/genersoft/iot/vmp/web/gb28181/ApiDeviceController.java                |    2 
 src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMHttpHookListener.java                  |   16 +++++
 src/main/java/com/genersoft/iot/vmp/storager/impl/RedisCatchStorageImpl.java            |   23 +++++++
 src/main/java/com/genersoft/iot/vmp/storager/IRedisCatchStorage.java                    |   25 ++++++++
 src/main/java/com/genersoft/iot/vmp/conf/WVPTimerTask.java                              |   24 ++++++--
 src/main/java/com/genersoft/iot/vmp/web/gb28181/ApiCompatibleController.java            |    2 
 src/main/java/com/genersoft/iot/vmp/service/impl/MediaServerServiceImpl.java            |    2 
 src/main/java/com/genersoft/iot/vmp/web/gb28181/AuthController.java                     |    2 
 16 files changed, 108 insertions(+), 44 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 5fd9c77..560d69a 100644
--- a/src/main/java/com/genersoft/iot/vmp/common/VideoManagerConstants.java
+++ b/src/main/java/com/genersoft/iot/vmp/common/VideoManagerConstants.java
@@ -8,7 +8,9 @@
  */
 public class VideoManagerConstants {
 	
-	public static final String WVP_SERVER_PREFIX = "VMP_wvp_server";
+	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 MEDIA_SERVER_PREFIX = "VMP_MEDIA_SERVER_";
 
@@ -51,4 +53,7 @@
 	public static final String MEDIA_SSRC_USED_PREFIX = "VMP_media_used_ssrc_";
 
 	public static final String MEDIA_TRANSACTION_USED_PREFIX = "VMP_media_transaction_";
+
+	//************************** redis 娑堟伅*********************************
+	public static final String WVP_MSG_STREAM_PUSH_CHANGE_PREFIX = "WVP_msg_stream_push_change";
 }
diff --git a/src/main/java/com/genersoft/iot/vmp/conf/UserSetup.java b/src/main/java/com/genersoft/iot/vmp/conf/UserSetup.java
index 8b1b5b0..13831b4 100644
--- a/src/main/java/com/genersoft/iot/vmp/conf/UserSetup.java
+++ b/src/main/java/com/genersoft/iot/vmp/conf/UserSetup.java
@@ -27,6 +27,8 @@
 
     private Boolean logInDatebase = Boolean.TRUE;
 
+    private String serverId = "000000";
+
     private List<String> interfaceAuthenticationExcludes = new ArrayList<>();
 
     public Boolean getSavePositionHistory() {
@@ -104,4 +106,12 @@
     public void setLogInDatebase(Boolean logInDatebase) {
         this.logInDatebase = logInDatebase;
     }
+
+    public String getServerId() {
+        return serverId;
+    }
+
+    public void setServerId(String serverId) {
+        this.serverId = serverId;
+    }
 }
diff --git a/src/main/java/com/genersoft/iot/vmp/conf/VManagerConfig.java b/src/main/java/com/genersoft/iot/vmp/conf/VManagerConfig.java
deleted file mode 100644
index 85c158c..0000000
--- a/src/main/java/com/genersoft/iot/vmp/conf/VManagerConfig.java
+++ /dev/null
@@ -1,25 +0,0 @@
-package com.genersoft.iot.vmp.conf;
-
-import org.springframework.beans.factory.annotation.Value;
-import org.springframework.context.annotation.Configuration;
-
-/**    
- * @description: 鑾峰彇鏁版嵁搴撻厤缃�   
- * @author: swwheihei
- * @date:   2020骞�5鏈�6鏃� 涓嬪崍2:46:00     
- */
-@Configuration("vmConfig")
-public class VManagerConfig {
-
-	@Value("${spring.application.database:redis}")
-    private String database;
-
-
-    public String getDatabase() {
-        return database;
-    }
-
-    public void setDatabase(String database) {
-        this.database = database;
-    }
-}
diff --git a/src/main/java/com/genersoft/iot/vmp/conf/WVPTimerTask.java b/src/main/java/com/genersoft/iot/vmp/conf/WVPTimerTask.java
index 72f0db6..3e72e29 100644
--- a/src/main/java/com/genersoft/iot/vmp/conf/WVPTimerTask.java
+++ b/src/main/java/com/genersoft/iot/vmp/conf/WVPTimerTask.java
@@ -1,7 +1,10 @@
 package com.genersoft.iot.vmp.conf;
 
+import com.alibaba.fastjson.JSONObject;
+import com.genersoft.iot.vmp.service.IMediaServerService;
 import com.genersoft.iot.vmp.storager.IRedisCatchStorage;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
 import org.springframework.scheduling.annotation.Scheduled;
 import org.springframework.stereotype.Component;
 
@@ -12,13 +15,22 @@
     private IRedisCatchStorage redisCatchStorage;
 
     @Autowired
-    private SipConfig sipConfig;
+    private IMediaServerService mediaServerService;
 
     @Autowired
-    private MediaConfig mediaConfig;
+    private UserSetup userSetup;
 
-//    @Scheduled(cron="0/2 * *  * * ? ")   //姣�3绉掓墽琛屼竴娆�
-//    public void execute(){
-////        redisCatchStorage.updateWVPInfo();
-//    }
+    @Value("${server.port}")
+    private int serverPort;
+
+    @Autowired
+    private SipConfig sipConfig;
+
+    @Scheduled(fixedRate = 2 * 1000)   //姣�3绉掓墽琛屼竴娆�
+    public void execute(){
+        JSONObject jsonObject = new JSONObject();
+        jsonObject.put("ip", sipConfig.getIp());
+        jsonObject.put("port", serverPort);
+        redisCatchStorage.updateWVPInfo(userSetup.getServerId(), jsonObject, 3);
+    }
 }
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/callback/DeferredResultHolder.java b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/callback/DeferredResultHolder.java
index 51d03b4..255ded1 100644
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/callback/DeferredResultHolder.java
+++ b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/callback/DeferredResultHolder.java
@@ -37,8 +37,6 @@
 
 	public static final String CALLBACK_CMD_STOP = "CALLBACK_STOP";
 
-	public static final String CALLBACK_ONVIF = "CALLBACK_ONVIF";
-
 	public static final String CALLBACK_CMD_MOBILEPOSITION = "CALLBACK_MOBILEPOSITION";
 
 	public static final String CALLBACK_CMD_PRESETQUERY = "CALLBACK_PRESETQUERY";
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 f74dcfa..e35f059 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
@@ -10,6 +10,7 @@
 import com.genersoft.iot.vmp.gb28181.bean.Device;
 import com.genersoft.iot.vmp.media.zlm.dto.MediaServerItem;
 import com.genersoft.iot.vmp.service.IMediaServerService;
+import com.genersoft.iot.vmp.service.IMediaService;
 import com.genersoft.iot.vmp.service.bean.SSRCInfo;
 import com.genersoft.iot.vmp.storager.IRedisCatchStorage;
 import com.genersoft.iot.vmp.storager.IVideoManagerStorager;
@@ -55,6 +56,9 @@
 
 	@Autowired
 	private IMediaServerService mediaServerService;
+
+	@Autowired
+	private IMediaService mediaService;
 
 	@Autowired
 	private ZLMRESTfulUtils zlmresTfulUtils;
@@ -295,11 +299,23 @@
 				}
 			}else {
 				if (!"rtp".equals(app) ){
+					// 鍙戦�佹祦鍙樺寲redis娑堟伅
+					JSONObject jsonObject = new JSONObject();
+					jsonObject.put("serverId", userSetup.getServerId());
+					jsonObject.put("app", app);
+					jsonObject.put("stream", streamId);
+					jsonObject.put("register", regist);
+					jsonObject.put("mediaServerId", mediaServerId);
+					redisCatchStorage.sendStreamChangeMsg(jsonObject);
+
 					MediaServerItem mediaServerItem = mediaServerService.getOne(mediaServerId);
 					if (regist) {
 						zlmMediaListManager.addMedia(mediaServerItem, app, streamId);
+						StreamInfo streamInfo = mediaService.getStreamInfoByAppAndStream(mediaServerItem, app, streamId, tracks);
+						redisCatchStorage.addStream(mediaServerItem, app, streamId, streamInfo);
 					}else {
 						zlmMediaListManager.removeMedia( app, streamId);
+						redisCatchStorage.removeStream(mediaServerItem, app, streamId);
 					}
 				}
 			}
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 1c2190a..51f99d9 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
@@ -47,7 +47,7 @@
     private boolean sslEnabled;
 
     @Value("${server.port}")
-    private String serverPort;
+    private Integer serverPort;
 
     @Autowired
     private MediaConfig mediaConfig;
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 e4313d9..69bcd84 100644
--- a/src/main/java/com/genersoft/iot/vmp/storager/IRedisCatchStorage.java
+++ b/src/main/java/com/genersoft/iot/vmp/storager/IRedisCatchStorage.java
@@ -5,6 +5,7 @@
 import com.genersoft.iot.vmp.gb28181.bean.ParentPlatform;
 import com.genersoft.iot.vmp.gb28181.bean.ParentPlatformCatch;
 import com.genersoft.iot.vmp.gb28181.bean.SendRtpItem;
+import com.genersoft.iot.vmp.media.zlm.dto.MediaServerItem;
 
 import java.util.List;
 import java.util.Map;
@@ -120,5 +121,27 @@
     /**
      * 鍦╮edis娣诲姞wvp鐨勪俊鎭�
      */
-    void updateWVPInfo(JSONObject jsonObject);
+    void updateWVPInfo(String id, JSONObject jsonObject, int time);
+
+    /**
+     * 鍙戦�佹帹娴佺敓鎴愪笌鎺ㄦ祦娑堝け娑堟伅
+     * @param jsonObject 娑堟伅鍐呭
+     */
+    void sendStreamChangeMsg(JSONObject jsonObject);
+
+    /**
+     * 娣诲姞娴佷俊鎭埌redis
+     * @param mediaServerItem
+     * @param app
+     * @param streamId
+     */
+    void addStream(MediaServerItem mediaServerItem, String app, String streamId, StreamInfo streamInfo);
+
+    /**
+     * 绉婚櫎娴佷俊鎭粠redis
+     * @param mediaServerItem
+     * @param app
+     * @param streamId
+     */
+    void removeStream(MediaServerItem mediaServerItem, 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 e5b1269..0d0ede7 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
@@ -4,6 +4,7 @@
 import com.genersoft.iot.vmp.common.StreamInfo;
 import com.genersoft.iot.vmp.common.VideoManagerConstants;
 import com.genersoft.iot.vmp.gb28181.bean.*;
+import com.genersoft.iot.vmp.media.zlm.dto.MediaServerItem;
 import com.genersoft.iot.vmp.storager.IRedisCatchStorage;
 import com.genersoft.iot.vmp.storager.dao.DeviceChannelMapper;
 import com.genersoft.iot.vmp.utils.redis.RedisUtil;
@@ -295,8 +296,26 @@
     }
 
     @Override
-    public void updateWVPInfo(JSONObject jsonObject) {
-
+    public void updateWVPInfo(String id, JSONObject jsonObject, int time) {
+        String key = VideoManagerConstants.WVP_SERVER_PREFIX + id;
+        redis.set(key, jsonObject, time);
     }
 
+    @Override
+    public void sendStreamChangeMsg(JSONObject jsonObject) {
+        String key = VideoManagerConstants.WVP_MSG_STREAM_PUSH_CHANGE_PREFIX;
+        redis.convertAndSend(key, jsonObject.toJSONString());
+    }
+
+    @Override
+    public void addStream(MediaServerItem mediaServerItem, String app, String streamId, StreamInfo streamInfo) {
+        String key = VideoManagerConstants.WVP_SERVER_STREAM_PUSH_PREFIX + app + "_" + streamId + "_" + mediaServerItem.getId();
+        redis.set(key, streamInfo);
+    }
+
+    @Override
+    public void removeStream(MediaServerItem mediaServerItem, String app, String streamId) {
+        String key = VideoManagerConstants.WVP_SERVER_STREAM_PUSH_PREFIX + app + "_" + streamId + "_" + mediaServerItem.getId();
+        redis.del(key);
+    }
 }
diff --git a/src/main/java/com/genersoft/iot/vmp/utils/redis/RedisUtil.java b/src/main/java/com/genersoft/iot/vmp/utils/redis/RedisUtil.java
index 35da678..f89b30d 100644
--- a/src/main/java/com/genersoft/iot/vmp/utils/redis/RedisUtil.java
+++ b/src/main/java/com/genersoft/iot/vmp/utils/redis/RedisUtil.java
@@ -729,4 +729,10 @@
         return new ArrayList<>(keys);
     }
 
+    //    ============================== 娑堟伅鍙戦�佷笌璁㈤槄 ==============================
+    public void convertAndSend(String channel, String msg) {
+        redisTemplate.convertAndSend(channel, msg);
+
+    }
+
 }
diff --git a/src/main/java/com/genersoft/iot/vmp/web/ApiCompatibleController.java b/src/main/java/com/genersoft/iot/vmp/web/gb28181/ApiCompatibleController.java
similarity index 96%
rename from src/main/java/com/genersoft/iot/vmp/web/ApiCompatibleController.java
rename to src/main/java/com/genersoft/iot/vmp/web/gb28181/ApiCompatibleController.java
index c2a26b1..5080bb0 100644
--- a/src/main/java/com/genersoft/iot/vmp/web/ApiCompatibleController.java
+++ b/src/main/java/com/genersoft/iot/vmp/web/gb28181/ApiCompatibleController.java
@@ -1,4 +1,4 @@
-package com.genersoft.iot.vmp.web;
+package com.genersoft.iot.vmp.web.gb28181;
 
 import com.genersoft.iot.vmp.common.StreamInfo;
 import com.genersoft.iot.vmp.service.IMediaService;
diff --git a/src/main/java/com/genersoft/iot/vmp/web/ApiControlController.java b/src/main/java/com/genersoft/iot/vmp/web/gb28181/ApiControlController.java
similarity index 98%
rename from src/main/java/com/genersoft/iot/vmp/web/ApiControlController.java
rename to src/main/java/com/genersoft/iot/vmp/web/gb28181/ApiControlController.java
index a8e0de4..f784d3e 100644
--- a/src/main/java/com/genersoft/iot/vmp/web/ApiControlController.java
+++ b/src/main/java/com/genersoft/iot/vmp/web/gb28181/ApiControlController.java
@@ -1,4 +1,4 @@
-package com.genersoft.iot.vmp.web;
+package com.genersoft.iot.vmp.web.gb28181;
 
 import com.alibaba.fastjson.JSONObject;
 import com.genersoft.iot.vmp.gb28181.bean.Device;
diff --git a/src/main/java/com/genersoft/iot/vmp/web/ApiController.java b/src/main/java/com/genersoft/iot/vmp/web/gb28181/ApiController.java
similarity index 98%
rename from src/main/java/com/genersoft/iot/vmp/web/ApiController.java
rename to src/main/java/com/genersoft/iot/vmp/web/gb28181/ApiController.java
index cafa40c..faf873e 100644
--- a/src/main/java/com/genersoft/iot/vmp/web/ApiController.java
+++ b/src/main/java/com/genersoft/iot/vmp/web/gb28181/ApiController.java
@@ -1,4 +1,4 @@
-package com.genersoft.iot.vmp.web;
+package com.genersoft.iot.vmp.web.gb28181;
 
 import com.alibaba.fastjson.JSONObject;
 import com.genersoft.iot.vmp.conf.SipConfig;
diff --git a/src/main/java/com/genersoft/iot/vmp/web/ApiDeviceController.java b/src/main/java/com/genersoft/iot/vmp/web/gb28181/ApiDeviceController.java
similarity index 99%
rename from src/main/java/com/genersoft/iot/vmp/web/ApiDeviceController.java
rename to src/main/java/com/genersoft/iot/vmp/web/gb28181/ApiDeviceController.java
index ef83976..3094283 100644
--- a/src/main/java/com/genersoft/iot/vmp/web/ApiDeviceController.java
+++ b/src/main/java/com/genersoft/iot/vmp/web/gb28181/ApiDeviceController.java
@@ -1,4 +1,4 @@
-package com.genersoft.iot.vmp.web;
+package com.genersoft.iot.vmp.web.gb28181;
 
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
diff --git a/src/main/java/com/genersoft/iot/vmp/web/ApiStreamController.java b/src/main/java/com/genersoft/iot/vmp/web/gb28181/ApiStreamController.java
similarity index 99%
rename from src/main/java/com/genersoft/iot/vmp/web/ApiStreamController.java
rename to src/main/java/com/genersoft/iot/vmp/web/gb28181/ApiStreamController.java
index ae7e921..8ebd8ed 100644
--- a/src/main/java/com/genersoft/iot/vmp/web/ApiStreamController.java
+++ b/src/main/java/com/genersoft/iot/vmp/web/gb28181/ApiStreamController.java
@@ -1,4 +1,4 @@
-package com.genersoft.iot.vmp.web;
+package com.genersoft.iot.vmp.web.gb28181;
 
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
diff --git a/src/main/java/com/genersoft/iot/vmp/web/AuthController.java b/src/main/java/com/genersoft/iot/vmp/web/gb28181/AuthController.java
similarity index 93%
rename from src/main/java/com/genersoft/iot/vmp/web/AuthController.java
rename to src/main/java/com/genersoft/iot/vmp/web/gb28181/AuthController.java
index f4a2af8..abefa42 100644
--- a/src/main/java/com/genersoft/iot/vmp/web/AuthController.java
+++ b/src/main/java/com/genersoft/iot/vmp/web/gb28181/AuthController.java
@@ -1,4 +1,4 @@
-package com.genersoft.iot.vmp.web;
+package com.genersoft.iot.vmp.web.gb28181;
 
 import com.genersoft.iot.vmp.service.IUserService;
 import com.genersoft.iot.vmp.storager.dao.dto.User;

--
Gitblit v1.8.0