From a209d173904843eee90e689c7431eb97c6e7bac6 Mon Sep 17 00:00:00 2001
From: 648540858 <648540858@qq.com>
Date: 星期二, 14 二月 2023 11:29:44 +0800
Subject: [PATCH] Merge branch 'wvp-28181-2.0'
---
src/main/java/com/genersoft/iot/vmp/service/impl/MediaServerServiceImpl.java | 57 +++++++++++++++++++++++++++++++++++++++++++++++++--------
1 files changed, 49 insertions(+), 8 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..522879a 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
@@ -1,5 +1,16 @@
package com.genersoft.iot.vmp.service.impl;
+import java.time.LocalDateTime;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+import com.genersoft.iot.vmp.media.zlm.ZLMRunner;
+import com.genersoft.iot.vmp.service.IStreamProxyService;
+import com.genersoft.iot.vmp.storager.IVideoManagerStorage;
import com.alibaba.fastjson2.JSON;
import com.alibaba.fastjson2.JSONArray;
import com.alibaba.fastjson2.JSONObject;
@@ -22,11 +33,14 @@
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;
import okhttp3.Request;
import okhttp3.Response;
+import java.time.LocalDateTime;
+import java.util.*;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
@@ -169,7 +183,6 @@
return;
}
zlmrtpServerFactory.closeRtpServer(mediaServerItem, streamId);
- releaseSsrc(mediaServerItem.getId(), streamId);
}
@Override
@@ -229,7 +242,10 @@
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) {
@@ -281,8 +297,9 @@
return null;
}
String key = VideoManagerConstants.MEDIA_SERVER_PREFIX + userSetting.getServerId() + "_" + mediaServerId;
- return (MediaServerItem)RedisUtil.get(key);
+ return JsonUtil.redisJsonToObject(key, MediaServerItem.class);
}
+
@Override
public MediaServerItem getDefaultMediaServer() {
@@ -397,8 +414,10 @@
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);
@@ -488,7 +507,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 +520,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