Browse Source

Merge remote-tracking branch 'origin/wvp-28181-2.0' into wvp-28181-2.0

lin 2 years ago
parent
commit
375cd03575

+ 2 - 1
src/main/java/com/genersoft/iot/vmp/gb28181/session/VideoStreamSessionManager.java

@@ -4,6 +4,7 @@ import com.genersoft.iot.vmp.common.VideoManagerConstants;
 import com.genersoft.iot.vmp.conf.UserSetting;
 import com.genersoft.iot.vmp.gb28181.bean.SipTransactionInfo;
 import com.genersoft.iot.vmp.gb28181.bean.SsrcTransaction;
+import com.genersoft.iot.vmp.utils.JsonUtil;
 import com.genersoft.iot.vmp.utils.redis.RedisUtil;
 import gov.nist.javax.sip.message.SIPResponse;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -133,7 +134,7 @@ public class VideoStreamSessionManager {
 		List<SsrcTransaction> result= new ArrayList<>();
 		for (int i = 0; i < ssrcTransactionKeys.size(); i++) {
 			String key = (String)ssrcTransactionKeys.get(i);
-			SsrcTransaction ssrcTransaction = (SsrcTransaction)RedisUtil.get(key);
+			SsrcTransaction ssrcTransaction = JsonUtil.redisJsonToObject(key, SsrcTransaction.class);
 			result.add(ssrcTransaction);
 		}
 		return result;

+ 2 - 1
src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMRESTfulUtils.java

@@ -36,7 +36,7 @@ public class ZLMRESTfulUtils {
             // 设置连接超时时间
             httpClientBuilder.connectTimeout(5,TimeUnit.SECONDS);
             // 设置读取超时时间
-            httpClientBuilder.readTimeout(5,TimeUnit.SECONDS);
+            httpClientBuilder.readTimeout(10,TimeUnit.SECONDS);
             // 设置连接池
             httpClientBuilder.connectionPool(new ConnectionPool(16, 5, TimeUnit.MINUTES));
             if (logger.isDebugEnabled()) {
@@ -186,6 +186,7 @@ public class ZLMRESTfulUtils {
                     FileOutputStream outStream = new FileOutputStream(snapFile);
 
                     outStream.write(Objects.requireNonNull(response.body()).bytes());
+                    outStream.flush();
                     outStream.close();
                 } else {
                     logger.error(String.format("[ %s ]请求失败: %s %s", url, response.code(), response.message()));

+ 10 - 4
src/main/java/com/genersoft/iot/vmp/service/impl/MediaServerServiceImpl.java

@@ -22,6 +22,7 @@ import com.genersoft.iot.vmp.service.bean.SSRCInfo;
 import com.genersoft.iot.vmp.storager.IRedisCatchStorage;
 import com.genersoft.iot.vmp.storager.dao.MediaServerMapper;
 import com.genersoft.iot.vmp.utils.DateUtil;
+import com.genersoft.iot.vmp.utils.JsonUtil;
 import com.genersoft.iot.vmp.utils.redis.RedisUtil;
 import com.genersoft.iot.vmp.vmanager.bean.ErrorCode;
 import okhttp3.OkHttpClient;
@@ -228,7 +229,10 @@ public class MediaServerServiceImpl implements IMediaServerService {
         String onlineKey = VideoManagerConstants.MEDIA_SERVERS_ONLINE_PREFIX + userSetting.getServerId();
         for (Object mediaServerKey : mediaServerKeys) {
             String key = (String) mediaServerKey;
-            MediaServerItem mediaServerItem = (MediaServerItem) RedisUtil.get(key);
+            MediaServerItem mediaServerItem = JsonUtil.redisJsonToObject(key, MediaServerItem.class);
+            if (Objects.isNull(mediaServerItem)) {
+                continue;
+            }
             // 检查状态
             Double aDouble = RedisUtil.zScore(onlineKey, mediaServerItem.getId());
             if (aDouble != null) {
@@ -280,7 +284,7 @@ public class MediaServerServiceImpl implements IMediaServerService {
             return null;
         }
         String key = VideoManagerConstants.MEDIA_SERVER_PREFIX + userSetting.getServerId() + "_" + mediaServerId;
-        return (MediaServerItem)RedisUtil.get(key);
+        return JsonUtil.redisJsonToObject(key, MediaServerItem.class);
     }
 
     @Override
@@ -396,8 +400,10 @@ public class MediaServerServiceImpl implements IMediaServerService {
             SsrcConfig ssrcConfig = new SsrcConfig(zlmServerConfig.getGeneralMediaServerId(), null, sipConfig.getDomain());
             serverItem.setSsrcConfig(ssrcConfig);
         }else {
-            MediaServerItem mediaServerItemInRedis = (MediaServerItem)RedisUtil.get(key);
-            serverItem.setSsrcConfig(mediaServerItemInRedis.getSsrcConfig());
+            MediaServerItem mediaServerItemInRedis = JsonUtil.redisJsonToObject(key, MediaServerItem.class);
+            if (Objects.nonNull(mediaServerItemInRedis)) {
+                serverItem.setSsrcConfig(mediaServerItemInRedis.getSsrcConfig());
+            }
         }
         RedisUtil.set(key, serverItem);
         resetOnlineServerItem(serverItem);

+ 14 - 11
src/main/java/com/genersoft/iot/vmp/storager/impl/RedisCatchStorageImpl.java

@@ -17,6 +17,7 @@ import com.genersoft.iot.vmp.storager.IRedisCatchStorage;
 import com.genersoft.iot.vmp.storager.dao.DeviceChannelMapper;
 import com.genersoft.iot.vmp.storager.dao.dto.PlatformRegisterInfo;
 import com.genersoft.iot.vmp.utils.DateUtil;
+import com.genersoft.iot.vmp.utils.JsonUtil;
 import com.genersoft.iot.vmp.utils.SystemInfoUtils;
 import com.genersoft.iot.vmp.utils.redis.RedisUtil;
 import org.slf4j.Logger;
@@ -157,7 +158,10 @@ public class RedisCatchStorageImpl implements IRedisCatchStorage {
         }
         for (Object player : players) {
             String key = (String) player;
-            StreamInfo streamInfo = (StreamInfo) RedisUtil.get(key);
+            StreamInfo streamInfo = JsonUtil.redisJsonToObject(key, StreamInfo.class);
+            if (Objects.isNull(streamInfo)) {
+                continue;
+            }
             streamInfos.put(streamInfo.getDeviceID() + "_" + streamInfo.getChannelId(), streamInfo);
         }
         return streamInfos;
@@ -624,8 +628,7 @@ public class RedisCatchStorageImpl implements IRedisCatchStorage {
     @Override
     public ThirdPartyGB queryMemberNoGBId(String queryKey) {
         String key = VideoManagerConstants.WVP_STREAM_GB_ID_PREFIX + queryKey;
-        JSONObject jsonObject = (JSONObject)RedisUtil.get(key);
-        return  jsonObject.to(ThirdPartyGB.class);
+        return JsonUtil.redisJsonToObject(key, ThirdPartyGB.class);
     }
 
     @Override
@@ -664,7 +667,7 @@ public class RedisCatchStorageImpl implements IRedisCatchStorage {
     @Override
     public Device getDevice(String deviceId) {
         String key = VideoManagerConstants.DEVICE_PREFIX + userSetting.getServerId() + "_" + deviceId;
-        return (Device)RedisUtil.get(key);
+        return JsonUtil.redisJsonToObject(key, Device.class);
     }
 
     @Override
@@ -676,7 +679,7 @@ public class RedisCatchStorageImpl implements IRedisCatchStorage {
     @Override
     public GPSMsgInfo getGpsMsgInfo(String gbId) {
         String key = VideoManagerConstants.WVP_STREAM_GPS_MSG_PREFIX + userSetting.getServerId() + "_" + gbId;
-        return (GPSMsgInfo)RedisUtil.get(key);
+        return JsonUtil.redisJsonToObject(key, GPSMsgInfo.class);
     }
 
     @Override
@@ -686,9 +689,9 @@ public class RedisCatchStorageImpl implements IRedisCatchStorage {
         List<Object> keys = RedisUtil.scan(scanKey);
         for (Object o : keys) {
             String key = (String) o;
-            GPSMsgInfo gpsMsgInfo = (GPSMsgInfo) RedisUtil.get(key);
-            if (!gpsMsgInfo.isStored()) { // 只取没有存过得
-                result.add((GPSMsgInfo) RedisUtil.get(key));
+            GPSMsgInfo gpsMsgInfo = JsonUtil.redisJsonToObject(key, GPSMsgInfo.class);
+            if (Objects.nonNull(gpsMsgInfo) && !gpsMsgInfo.isStored()) { // 只取没有存过得
+                result.add(JsonUtil.redisJsonToObject(key, GPSMsgInfo.class));
             }
         }
 
@@ -710,7 +713,7 @@ public class RedisCatchStorageImpl implements IRedisCatchStorage {
     @Override
     public StreamAuthorityInfo getStreamAuthorityInfo(String app, String stream) {
         String key = VideoManagerConstants.MEDIA_STREAM_AUTHORITY + userSetting.getServerId() + "_" + app+ "_" + stream ;
-        return (StreamAuthorityInfo) RedisUtil.get(key);
+        return JsonUtil.redisJsonToObject(key, StreamAuthorityInfo.class);
 
     }
 
@@ -721,7 +724,7 @@ public class RedisCatchStorageImpl implements IRedisCatchStorage {
         List<Object> keys = RedisUtil.scan(scanKey);
         for (Object o : keys) {
             String key = (String) o;
-            result.add((StreamAuthorityInfo) RedisUtil.get(key));
+            result.add(JsonUtil.redisJsonToObject(key, StreamAuthorityInfo.class));
         }
         return result;
     }
@@ -735,7 +738,7 @@ public class RedisCatchStorageImpl implements IRedisCatchStorage {
         List<Object> keys = RedisUtil.scan(scanKey);
         if (keys.size() > 0) {
             String key = (String) keys.get(0);
-            result = (OnStreamChangedHookParam)RedisUtil.get(key);
+            result = JsonUtil.redisJsonToObject(key, OnStreamChangedHookParam.class);
         }
 
         return result;

+ 36 - 0
src/main/java/com/genersoft/iot/vmp/utils/JsonUtil.java

@@ -0,0 +1,36 @@
+package com.genersoft.iot.vmp.utils;
+
+import com.alibaba.fastjson2.JSON;
+import com.alibaba.fastjson2.JSONObject;
+import com.genersoft.iot.vmp.utils.redis.RedisUtil;
+
+import java.util.Objects;
+
+/**
+ * JsonUtil
+ *
+ * @author KunLong-Luo
+ * @version 1.0.0
+ * @since 2023/2/2 15:24
+ */
+public final class JsonUtil {
+
+    private JsonUtil() {
+    }
+
+    /**
+     * safe json type conversion
+     *
+     * @param key   redis key
+     * @param clazz cast type
+     * @param <T>
+     * @return result type
+     */
+    public static <T> T redisJsonToObject(String key, Class<T> clazz) {
+        Object jsonObject = RedisUtil.get(key);
+        if (Objects.isNull(jsonObject)) {
+            return null;
+        }
+        return clazz.cast(jsonObject);
+    }
+}