From a8c424e49db9213e879bf6c44cebccdfddaa1808 Mon Sep 17 00:00:00 2001 From: BradyXu <brady_xu@outlook.com> Date: 星期日, 12 五月 2024 02:00:55 +0800 Subject: [PATCH] 修复sip绑定监听多网卡IP时,新增上级平台新增失败的问题,本地IP改成从配置的多IP下拉选择 --- 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