From b6e604f2449bb65dfaafb0f0741ba54ff0d2f9c2 Mon Sep 17 00:00:00 2001
From: 648540858 <648540858@qq.com>
Date: 星期二, 30 四月 2024 15:20:03 +0800
Subject: [PATCH] 修改云端录像详情页使用直接访问zlm的方式播放录像
---
src/main/java/com/genersoft/iot/vmp/media/zlm/SendRtpPortManager.java | 45 +++++++++++++++++++++++++++++++++++----------
1 files changed, 35 insertions(+), 10 deletions(-)
diff --git a/src/main/java/com/genersoft/iot/vmp/media/zlm/SendRtpPortManager.java b/src/main/java/com/genersoft/iot/vmp/media/zlm/SendRtpPortManager.java
old mode 100644
new mode 100755
index f960c7d..7fffc10
--- a/src/main/java/com/genersoft/iot/vmp/media/zlm/SendRtpPortManager.java
+++ b/src/main/java/com/genersoft/iot/vmp/media/zlm/SendRtpPortManager.java
@@ -3,7 +3,7 @@
import com.genersoft.iot.vmp.common.VideoManagerConstants;
import com.genersoft.iot.vmp.conf.UserSetting;
import com.genersoft.iot.vmp.gb28181.bean.SendRtpItem;
-import com.genersoft.iot.vmp.media.zlm.dto.MediaServerItem;
+import com.genersoft.iot.vmp.media.bean.MediaServer;
import com.genersoft.iot.vmp.utils.redis.RedisUtil;
import org.apache.commons.lang3.math.NumberUtils;
import org.slf4j.Logger;
@@ -30,7 +30,7 @@
private final String KEY = "VM_MEDIA_SEND_RTP_PORT_";
- public int getNextPort(MediaServerItem mediaServer) {
+ public synchronized int getNextPort(MediaServer mediaServer) {
if (mediaServer == null) {
logger.warn("[鍙戦�佺鍙g鐞哴 鍙傛暟閿欒锛宮ediaServer涓篘ULL");
return -1;
@@ -50,17 +50,15 @@
String sendRtpPortRange = mediaServer.getSendRtpPortRange();
int startPort;
int endPort;
- if (sendRtpPortRange == null) {
- logger.warn("{}鏈缃彂閫佺鍙i粯璁ゅ�硷紝鑷姩浣跨敤40000-50000浣滀负绔彛鑼冨洿", mediaServer.getId());
+ if (sendRtpPortRange != null) {
String[] portArray = sendRtpPortRange.split(",");
if (portArray.length != 2 || !NumberUtils.isParsable(portArray[0]) || !NumberUtils.isParsable(portArray[1])) {
- logger.warn("{}鍙戦�佺鍙i厤缃牸寮忛敊璇紝鑷姩浣跨敤40000-50000浣滀负绔彛鑼冨洿", mediaServer.getId());
+ logger.warn("{}鍙戦�佺鍙i厤缃牸寮忛敊璇紝鑷姩浣跨敤50000-60000浣滀负绔彛鑼冨洿", mediaServer.getId());
startPort = 50000;
endPort = 60000;
}else {
-
if ( Integer.parseInt(portArray[1]) - Integer.parseInt(portArray[0]) < 1) {
- logger.warn("{}鍙戦�佺鍙i厤缃敊璇�,缁撴潫绔彛鑷冲皯姣斿紑濮嬬鍙eぇ涓�锛岃嚜鍔ㄤ娇鐢�40000-50000浣滀负绔彛鑼冨洿", mediaServer.getId());
+ logger.warn("{}鍙戦�佺鍙i厤缃敊璇�,缁撴潫绔彛鑷冲皯姣斿紑濮嬬鍙eぇ涓�锛岃嚜鍔ㄤ娇鐢�50000-60000浣滀负绔彛鑼冨洿", mediaServer.getId());
startPort = 50000;
endPort = 60000;
}else {
@@ -69,6 +67,7 @@
}
}
}else {
+ logger.warn("{}鏈缃彂閫佺鍙i粯璁ゅ�硷紝鑷姩浣跨敤50000-60000浣滀负绔彛鑼冨洿", mediaServer.getId());
startPort = 50000;
endPort = 60000;
}
@@ -76,10 +75,36 @@
logger.warn("{}鑾峰彇redis杩炴帴淇℃伅澶辫触", mediaServer.getId());
return -1;
}
+// RedisAtomicInteger redisAtomicInteger = new RedisAtomicInteger(sendIndexKey , redisTemplate.getConnectionFactory());
+// return redisAtomicInteger.getAndUpdate((current)->{
+// return getPort(current, startPort, endPort, checkPort-> !sendRtpItemMap.containsKey(checkPort));
+// });
+ return getSendPort(startPort, endPort, sendIndexKey, sendRtpItemMap);
+ }
+
+ private synchronized int getSendPort(int startPort, int endPort, String sendIndexKey, Map<Integer, SendRtpItem> sendRtpItemMap){
+ // TODO 杩欓噷鏀逛负鍙彇鍋舵暟绔彛
RedisAtomicInteger redisAtomicInteger = new RedisAtomicInteger(sendIndexKey , redisTemplate.getConnectionFactory());
- return redisAtomicInteger.getAndUpdate((current)->{
- return getPort(current, startPort, endPort, checkPort-> !sendRtpItemMap.containsKey(checkPort));
- });
+ if (redisAtomicInteger.get() < startPort) {
+ redisAtomicInteger.set(startPort);
+ return startPort;
+ }else {
+ int port = redisAtomicInteger.getAndIncrement();
+ if (port > endPort) {
+ redisAtomicInteger.set(startPort);
+ if (sendRtpItemMap.containsKey(startPort)) {
+ return getSendPort(startPort, endPort, sendIndexKey, sendRtpItemMap);
+ }else {
+ return startPort;
+ }
+ }
+ if (sendRtpItemMap.containsKey(port)) {
+ return getSendPort(startPort, endPort, sendIndexKey, sendRtpItemMap);
+ }else {
+ return port;
+ }
+ }
+
}
interface CheckPortCallback{
--
Gitblit v1.8.0