From 8c4922cbe14b126c5c04a23b0c1968676e597eb7 Mon Sep 17 00:00:00 2001
From: 648540858 <648540858@qq.com>
Date: 星期六, 08 四月 2023 15:29:15 +0800
Subject: [PATCH] Merge branch '2.6.7' into wvp-28181-2.0
---
src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/InviteRequestProcessor.java | 13 +-
/dev/null | 8 -
src/main/java/com/genersoft/iot/vmp/conf/security/JwtAuthenticationFilter.java | 1
src/main/java/com/genersoft/iot/vmp/conf/redis/RedisTemplateConfig.java | 28 ++++
src/main/java/com/genersoft/iot/vmp/service/impl/PlayServiceImpl.java | 12 +
src/main/java/com/genersoft/iot/vmp/service/impl/DeviceChannelServiceImpl.java | 2
src/main/java/com/genersoft/iot/vmp/gb28181/session/SSRCFactory.java | 132 ++++++++++++++++++++++
src/main/java/com/genersoft/iot/vmp/service/impl/MediaServerServiceImpl.java | 89 +++++---------
src/main/java/com/genersoft/iot/vmp/conf/redis/RedisConfig.java | 3
src/main/java/com/genersoft/iot/vmp/media/zlm/dto/MediaServerItem.java | 20 +--
10 files changed, 217 insertions(+), 91 deletions(-)
diff --git a/src/main/java/com/genersoft/iot/vmp/conf/redis/RedisConfig.java b/src/main/java/com/genersoft/iot/vmp/conf/redis/RedisConfig.java
index b660c83..0035248 100644
--- a/src/main/java/com/genersoft/iot/vmp/conf/redis/RedisConfig.java
+++ b/src/main/java/com/genersoft/iot/vmp/conf/redis/RedisConfig.java
@@ -9,6 +9,9 @@
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.StringRedisSerializer;
+import org.springframework.data.redis.listener.PatternTopic;
+import org.springframework.data.redis.listener.RedisMessageListenerContainer;
+
/**
* Redis涓棿浠堕厤缃被锛屼娇鐢╯pring-data-redis闆嗘垚锛岃嚜鍔ㄤ粠application.yml涓姞杞絩edis閰嶇疆
diff --git a/src/main/java/com/genersoft/iot/vmp/conf/redis/RedisTemplateConfig.java b/src/main/java/com/genersoft/iot/vmp/conf/redis/RedisTemplateConfig.java
new file mode 100644
index 0000000..1868a5d
--- /dev/null
+++ b/src/main/java/com/genersoft/iot/vmp/conf/redis/RedisTemplateConfig.java
@@ -0,0 +1,28 @@
+package com.genersoft.iot.vmp.conf.redis;
+
+import com.genersoft.iot.vmp.utils.redis.FastJsonRedisSerializer;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.data.redis.connection.RedisConnectionFactory;
+import org.springframework.data.redis.core.RedisTemplate;
+import org.springframework.data.redis.serializer.StringRedisSerializer;
+
+@Configuration
+public class RedisTemplateConfig {
+
+ @Bean
+ public RedisTemplate<Object, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) {
+ RedisTemplate<Object, Object> redisTemplate = new RedisTemplate<>();
+ // 浣跨敤fastJson搴忓垪鍖�
+ FastJsonRedisSerializer fastJsonRedisSerializer = new FastJsonRedisSerializer(Object.class);
+ // value鍊肩殑搴忓垪鍖栭噰鐢╢astJsonRedisSerializer
+ redisTemplate.setValueSerializer(fastJsonRedisSerializer);
+ redisTemplate.setHashValueSerializer(fastJsonRedisSerializer);
+
+ // key鐨勫簭鍒楀寲閲囩敤StringRedisSerializer
+ redisTemplate.setKeySerializer(new StringRedisSerializer());
+ redisTemplate.setHashKeySerializer(new StringRedisSerializer());
+ redisTemplate.setConnectionFactory(redisConnectionFactory);
+ return redisTemplate;
+ }
+}
diff --git a/src/main/java/com/genersoft/iot/vmp/conf/security/JwtAuthenticationFilter.java b/src/main/java/com/genersoft/iot/vmp/conf/security/JwtAuthenticationFilter.java
index e50a8b0..27151ee 100644
--- a/src/main/java/com/genersoft/iot/vmp/conf/security/JwtAuthenticationFilter.java
+++ b/src/main/java/com/genersoft/iot/vmp/conf/security/JwtAuthenticationFilter.java
@@ -38,7 +38,6 @@
return;
}
if (!userSetting.isInterfaceAuthentication()) {
- // 鏋勫缓UsernamePasswordAuthenticationToken,杩欓噷瀵嗙爜涓簄ull锛屾槸鍥犱负鎻愪緵浜嗘纭殑JWT,瀹炵幇鑷姩鐧诲綍
UsernamePasswordAuthenticationToken token = new UsernamePasswordAuthenticationToken(null, null, new ArrayList<>() );
SecurityContextHolder.getContext().setAuthentication(token);
chain.doFilter(request, response);
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/session/SSRCFactory.java b/src/main/java/com/genersoft/iot/vmp/gb28181/session/SSRCFactory.java
new file mode 100644
index 0000000..ec8e0ba
--- /dev/null
+++ b/src/main/java/com/genersoft/iot/vmp/gb28181/session/SSRCFactory.java
@@ -0,0 +1,132 @@
+package com.genersoft.iot.vmp.gb28181.session;
+
+import com.genersoft.iot.vmp.conf.SipConfig;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.redis.core.StringRedisTemplate;
+import org.springframework.stereotype.Component;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Set;
+
+/**
+ * ssrc浣跨敤
+ */
+@Component
+public class SSRCFactory {
+
+ /**
+ * 鎾祦鏈�澶у苟鍙戜釜鏁�
+ */
+ private static final Integer MAX_STREAM_COUNT = 10000;
+
+ /**
+ * 鎾祦鏈�澶у苟鍙戜釜鏁�
+ */
+ private static final String SSRC_INFO_KEY = "VMP_SSRC_INFO_";
+
+ @Autowired
+ private StringRedisTemplate redisTemplate;
+
+ @Autowired
+ private SipConfig sipConfig;
+
+
+ public void initMediaServerSSRC(String mediaServerId, Set<String> usedSet) {
+ String ssrcPrefix = sipConfig.getDomain().substring(3, 8);
+ String redisKey = SSRC_INFO_KEY + mediaServerId;
+ List<String> ssrcList = new ArrayList<>();
+ for (int i = 1; i < MAX_STREAM_COUNT; i++) {
+ String ssrc = String.format("%s%04d", ssrcPrefix, i);
+
+ if (null == usedSet || !usedSet.contains(ssrc)) {
+ ssrcList.add(ssrc);
+
+ }
+ }
+ if (redisTemplate.opsForSet().size(redisKey) != null) {
+ redisTemplate.delete(redisKey);
+ }
+ redisTemplate.opsForSet().add(redisKey, ssrcList.toArray(new String[0]));
+ }
+
+
+ /**
+ * 鑾峰彇瑙嗛棰勮鐨凷SRC鍊�,绗竴浣嶅浐瀹氫负0
+ *
+ * @return ssrc
+ */
+ public String getPlaySsrc(String mediaServerId) {
+ return "0" + getSN(mediaServerId);
+ }
+
+ /**
+ * 鑾峰彇褰曞儚鍥炴斁鐨凷SRC鍊�,绗竴浣嶅浐瀹氫负1
+ */
+ public String getPlayBackSsrc(String mediaServerId) {
+ return "1" + getSN(mediaServerId);
+ }
+
+ /**
+ * 閲婃斁ssrc锛屼富瑕佺敤瀹岀殑ssrc涓�瀹氳閲婃斁锛屽惁鍒欎細鑰楀敖
+ *
+ * @param ssrc 闇�瑕侀噸缃殑ssrc
+ */
+ public void releaseSsrc(String mediaServerId, String ssrc) {
+ if (ssrc == null) {
+ return;
+ }
+ String sn = ssrc.substring(1);
+ String redisKey = SSRC_INFO_KEY + mediaServerId;
+ redisTemplate.opsForSet().add(redisKey, sn);
+ }
+
+ /**
+ * 鑾峰彇鍚庡洓浣嶆暟SN,闅忔満鏁�
+ */
+ private String getSN(String mediaServerId) {
+ String sn = null;
+ String redisKey = SSRC_INFO_KEY + mediaServerId;
+ Long size = redisTemplate.opsForSet().size(redisKey);
+ if (size == null || size == 0) {
+ throw new RuntimeException("ssrc宸茬粡鐢ㄥ畬");
+ } else {
+ // 鍦ㄩ泦鍚堜腑绉婚櫎骞惰繑鍥炰竴涓殢鏈烘垚鍛樸��
+ sn = (String) redisTemplate.opsForSet().pop(redisKey);
+ redisTemplate.opsForSet().remove(redisKey, sn);
+ }
+ return sn;
+ }
+
+ /**
+ * 閲嶇疆涓�涓祦濯掍綋鏈嶅姟鐨勬墍鏈塻src
+ *
+ * @param mediaServerId 娴佸獟浣撴湇鍔D
+ */
+ public void reset(String mediaServerId) {
+ this.initMediaServerSSRC(mediaServerId, null);
+ }
+
+ /**
+ * 鏄惁宸茬粡瀛樺湪浜嗘煇涓狹ediaServer鐨凷SRC淇℃伅
+ *
+ * @param mediaServerId 娴佸獟浣撴湇鍔D
+ */
+ public boolean hasMediaServerSSRC(String mediaServerId) {
+ String redisKey = SSRC_INFO_KEY + mediaServerId;
+ return redisTemplate.opsForSet().members(redisKey) != null;
+ }
+
+ /**
+ * 鏌ヨssrc鏄惁鍙敤
+ *
+ * @param mediaServerId
+ * @param ssrc
+ * @return
+ */
+ public boolean checkSsrc(String mediaServerId, String ssrc) {
+ String sn = ssrc.substring(1);
+ String redisKey = SSRC_INFO_KEY + mediaServerId;
+ return redisTemplate.opsForSet().isMember(redisKey, sn) != null;
+ }
+}
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/session/SsrcConfig.java b/src/main/java/com/genersoft/iot/vmp/gb28181/session/SsrcConfig.java
deleted file mode 100644
index cc303c8..0000000
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/session/SsrcConfig.java
+++ /dev/null
@@ -1,150 +0,0 @@
-package com.genersoft.iot.vmp.gb28181.session;
-
-import com.genersoft.iot.vmp.utils.ConfigConst;
-import io.swagger.v3.oas.annotations.media.Schema;
-
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Random;
-import java.util.Set;
-
-@Schema(description = "ssrc淇℃伅")
-public class SsrcConfig {
-
- /**
- * zlm娴佸獟浣撴湇鍔″櫒Id
- */
- @Schema(description = "娴佸獟浣撴湇鍔″櫒Id")
- private String mediaServerId;
-
- @Schema(description = "SSRC鍓嶇紑")
- private String ssrcPrefix;
-
- /**
- * zlm娴佸獟浣撴湇鍔″櫒宸茬敤浼氳瘽鍙ユ焺
- */
- @Schema(description = "zlm娴佸獟浣撴湇鍔″櫒宸茬敤浼氳瘽鍙ユ焺")
- private List<String> isUsed;
-
- /**
- * zlm娴佸獟浣撴湇鍔″櫒鍙敤浼氳瘽鍙ユ焺
- */
- @Schema(description = "zlm娴佸獟浣撴湇鍔″櫒鍙敤浼氳瘽鍙ユ焺")
- private List<String> notUsed;
-
- public SsrcConfig() {
- }
-
- public SsrcConfig(String mediaServerId, Set<String> usedSet, String sipDomain) {
- this.mediaServerId = mediaServerId;
- this.isUsed = new ArrayList<>();
- this.ssrcPrefix = sipDomain.substring(3, 8);
- this.notUsed = new ArrayList<>();
- for (int i = 1; i < ConfigConst.MAX_STRTEAM_COUNT; i++) {
- String ssrc;
- if (i < 10) {
- ssrc = "000" + i;
- } else if (i < 100) {
- ssrc = "00" + i;
- } else if (i < 1000) {
- ssrc = "0" + i;
- } else {
- ssrc = String.valueOf(i);
- }
- if (null == usedSet || !usedSet.contains(ssrc)) {
- this.notUsed.add(ssrc);
- } else {
- this.isUsed.add(ssrc);
- }
- }
- }
-
-
- /**
- * 鑾峰彇瑙嗛棰勮鐨凷SRC鍊�,绗竴浣嶅浐瀹氫负0
- * @return ssrc
- */
- public String getPlaySsrc() {
- return "0" + getSsrcPrefix() + getSN();
- }
-
- /**
- * 鑾峰彇褰曞儚鍥炴斁鐨凷SRC鍊�,绗竴浣嶅浐瀹氫负1
- *
- */
- public String getPlayBackSsrc() {
- return "1" + getSsrcPrefix() + getSN();
- }
-
- /**
- * 閲婃斁ssrc锛屼富瑕佺敤瀹岀殑ssrc涓�瀹氳閲婃斁锛屽惁鍒欎細鑰楀敖
- * @param ssrc 闇�瑕侀噸缃殑ssrc
- */
- public void releaseSsrc(String ssrc) {
- if (ssrc == null) {
- return;
- }
- String sn = ssrc.substring(6);
- try {
- isUsed.remove(sn);
- notUsed.add(sn);
- }catch (NullPointerException e){
- }
- }
-
- /**
- * 鑾峰彇鍚庡洓浣嶆暟SN,闅忔満鏁�
- *
- */
- private String getSN() {
- String sn = null;
- int index = 0;
- if (notUsed.size() == 0) {
- throw new RuntimeException("ssrc宸茬粡鐢ㄥ畬");
- } else if (notUsed.size() == 1) {
- sn = notUsed.get(0);
- } else {
- index = new Random().nextInt(notUsed.size() - 1);
- sn = notUsed.get(index);
- }
- notUsed.remove(index);
- isUsed.add(sn);
- return sn;
- }
-
- public String getSsrcPrefix() {
- return ssrcPrefix;
- }
-
- public String getMediaServerId() {
- return mediaServerId;
- }
-
- public void setMediaServerId(String mediaServerId) {
- this.mediaServerId = mediaServerId;
- }
-
- public void setSsrcPrefix(String ssrcPrefix) {
- this.ssrcPrefix = ssrcPrefix;
- }
-
- public List<String> getIsUsed() {
- return isUsed;
- }
-
- public void setIsUsed(List<String> isUsed) {
- this.isUsed = isUsed;
- }
-
- public List<String> getNotUsed() {
- return notUsed;
- }
-
- public void setNotUsed(List<String> notUsed) {
- this.notUsed = notUsed;
- }
-
- public boolean checkSsrc(String ssrcInResponse) {
- return !isUsed.contains(ssrcInResponse);
- }
-}
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/InviteRequestProcessor.java b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/InviteRequestProcessor.java
index 1a6358b..8073417 100644
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/InviteRequestProcessor.java
+++ b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/InviteRequestProcessor.java
@@ -5,7 +5,7 @@
import com.genersoft.iot.vmp.conf.UserSetting;
import com.genersoft.iot.vmp.gb28181.bean.*;
import com.genersoft.iot.vmp.gb28181.event.SipSubscribe;
-import com.genersoft.iot.vmp.gb28181.session.SsrcConfig;
+import com.genersoft.iot.vmp.gb28181.session.SSRCFactory;
import com.genersoft.iot.vmp.gb28181.session.VideoStreamSessionManager;
import com.genersoft.iot.vmp.gb28181.transmit.SIPProcessorObserver;
import com.genersoft.iot.vmp.gb28181.transmit.SIPSender;
@@ -73,6 +73,9 @@
@Autowired
private IRedisCatchStorage redisCatchStorage;
+
+ @Autowired
+ private SSRCFactory ssrcFactory;
@Autowired
private DynamicTask dynamicTask;
@@ -491,12 +494,8 @@
} else if (gbStream != null) {
if(ssrc.equals(ssrcDefault))
{
- SsrcConfig ssrcConfig = mediaServerItem.getSsrcConfig();
- if(ssrcConfig != null)
- {
- ssrc = ssrcConfig.getPlaySsrc();
- ssrcConfig.releaseSsrc(ssrc);
- }
+ ssrc = ssrcFactory.getPlaySsrc(mediaServerItem.getId());
+ ssrcFactory.releaseSsrc(mediaServerItem.getId(), ssrc);
}
if("push".equals(gbStream.getStreamType())) {
if (streamPushItem != null && streamPushItem.isPushIng()) {
diff --git a/src/main/java/com/genersoft/iot/vmp/media/zlm/dto/MediaServerItem.java b/src/main/java/com/genersoft/iot/vmp/media/zlm/dto/MediaServerItem.java
index f3eb3d6..ea248fd 100644
--- a/src/main/java/com/genersoft/iot/vmp/media/zlm/dto/MediaServerItem.java
+++ b/src/main/java/com/genersoft/iot/vmp/media/zlm/dto/MediaServerItem.java
@@ -1,7 +1,7 @@
package com.genersoft.iot.vmp.media.zlm.dto;
-import com.genersoft.iot.vmp.gb28181.session.SsrcConfig;
+import com.genersoft.iot.vmp.gb28181.session.SSRCFactory;
import com.genersoft.iot.vmp.media.zlm.ZLMServerConfig;
import io.swagger.v3.oas.annotations.media.Schema;
import org.springframework.util.ObjectUtils;
@@ -80,8 +80,8 @@
@Schema(description = "鏄惁鏄粯璁LM")
private boolean defaultServer;
- @Schema(description = "SSRC淇℃伅")
- private SsrcConfig ssrcConfig;
+// @Schema(description = "SSRC淇℃伅")
+// private SsrcConfig ssrcConfig;
@Schema(description = "褰撳墠浣跨敤鍒扮殑绔彛")
private int currentPort;
@@ -92,7 +92,7 @@
* 鍦ˋpplicationCheckRunner閲屽mediaServerSsrcMap杩涜鍒濆鍖�
*/
@Schema(description = "ID")
- private HashMap<String, SsrcConfig> mediaServerSsrcMap;
+ private HashMap<String, SSRCFactory> mediaServerSsrcMap;
public MediaServerItem() {
}
@@ -279,20 +279,12 @@
this.updateTime = updateTime;
}
- public HashMap<String, SsrcConfig> getMediaServerSsrcMap() {
+ public HashMap<String, SSRCFactory> getMediaServerSsrcMap() {
return mediaServerSsrcMap;
}
- public void setMediaServerSsrcMap(HashMap<String, SsrcConfig> mediaServerSsrcMap) {
+ public void setMediaServerSsrcMap(HashMap<String, SSRCFactory> mediaServerSsrcMap) {
this.mediaServerSsrcMap = mediaServerSsrcMap;
- }
-
- public SsrcConfig getSsrcConfig() {
- return ssrcConfig;
- }
-
- public void setSsrcConfig(SsrcConfig ssrcConfig) {
- this.ssrcConfig = ssrcConfig;
}
public int getCurrentPort() {
diff --git a/src/main/java/com/genersoft/iot/vmp/service/impl/DeviceChannelServiceImpl.java b/src/main/java/com/genersoft/iot/vmp/service/impl/DeviceChannelServiceImpl.java
index 336082f..9223ced 100644
--- a/src/main/java/com/genersoft/iot/vmp/service/impl/DeviceChannelServiceImpl.java
+++ b/src/main/java/com/genersoft/iot/vmp/service/impl/DeviceChannelServiceImpl.java
@@ -45,6 +45,8 @@
device = deviceMapper.getDeviceByDeviceId(deviceChannel.getDeviceId());
}
+
+
if ("WGS84".equals(device.getGeoCoordSys())) {
deviceChannel.setLongitudeWgs84(deviceChannel.getLongitude());
deviceChannel.setLatitudeWgs84(deviceChannel.getLatitude());
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 208fa9d..07177f0 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
@@ -9,6 +9,8 @@
import com.genersoft.iot.vmp.conf.UserSetting;
import com.genersoft.iot.vmp.conf.exception.ControllerException;
import com.genersoft.iot.vmp.gb28181.event.EventPublisher;
+import com.genersoft.iot.vmp.gb28181.session.SSRCFactory;
+import com.genersoft.iot.vmp.gb28181.session.VideoStreamSessionManager;
import com.genersoft.iot.vmp.gb28181.session.SsrcConfig;
import com.genersoft.iot.vmp.media.zlm.AssistRESTfulUtils;
import com.genersoft.iot.vmp.media.zlm.ZLMRESTfulUtils;
@@ -56,6 +58,9 @@
@Autowired
private SipConfig sipConfig;
+ @Autowired
+ private SSRCFactory ssrcFactory;
+
@Value("${server.ssl.enabled:false}")
private boolean sslEnabled;
@@ -96,6 +101,7 @@
@Autowired
private RedisTemplate<Object, Object> redisTemplate;
+
/**
* 鍒濆鍖�
*/
@@ -107,10 +113,8 @@
continue;
}
// 鏇存柊
- if (mediaServerItem.getSsrcConfig() == null) {
- SsrcConfig ssrcConfig = new SsrcConfig(mediaServerItem.getId(), null, sipConfig.getDomain());
- mediaServerItem.setSsrcConfig(ssrcConfig);
- redisTemplate.opsForValue().set(VideoManagerConstants.MEDIA_SERVER_PREFIX + userSetting.getServerId() + "_" + mediaServerItem.getId(), mediaServerItem);
+ if (ssrcFactory.hasMediaServerSSRC(mediaServerItem.getId())) {
+ ssrcFactory.initMediaServerSSRC(mediaServerItem.getId(), null);
}
// 鏌ヨredis鏄惁瀛樺湪姝ediaServer
String key = VideoManagerConstants.MEDIA_SERVER_PREFIX + userSetting.getServerId() + "_" + mediaServerItem.getId();
@@ -134,36 +138,27 @@
return null;
}
// 鑾峰彇mediaServer鍙敤鐨剆src
- String key = VideoManagerConstants.MEDIA_SERVER_PREFIX + userSetting.getServerId() + "_" + mediaServerItem.getId();
-
- SsrcConfig ssrcConfig = mediaServerItem.getSsrcConfig();
- if (ssrcConfig == null) {
- logger.info("media server [ {} ] ssrcConfig is null", mediaServerItem.getId());
- return null;
+ String ssrc;
+ if (presetSsrc != null) {
+ ssrc = presetSsrc;
}else {
- String ssrc;
- if (presetSsrc != null) {
- ssrc = presetSsrc;
+ if (isPlayback) {
+ ssrc = ssrcFactory.getPlayBackSsrc(mediaServerItem.getId());
}else {
- if (isPlayback) {
- ssrc = ssrcConfig.getPlayBackSsrc();
- }else {
- ssrc = ssrcConfig.getPlaySsrc();
- }
+ ssrc = ssrcFactory.getPlaySsrc(mediaServerItem.getId());
}
-
- if (streamId == null) {
- streamId = String.format("%08x", Integer.parseInt(ssrc)).toUpperCase();
- }
- int rtpServerPort;
- if (mediaServerItem.isRtpEnable()) {
- rtpServerPort = zlmrtpServerFactory.createRTPServer(mediaServerItem, streamId, ssrcCheck?Integer.parseInt(ssrc):0, port);
- } else {
- rtpServerPort = mediaServerItem.getRtpProxyPort();
- }
- redisTemplate.opsForValue().set(key, mediaServerItem);
- return new SSRCInfo(rtpServerPort, ssrc, streamId);
}
+
+ if (streamId == null) {
+ streamId = String.format("%08x", Integer.parseInt(ssrc)).toUpperCase();
+ }
+ int rtpServerPort;
+ if (mediaServerItem.isRtpEnable()) {
+ rtpServerPort = zlmrtpServerFactory.createRTPServer(mediaServerItem, streamId, ssrcCheck?Integer.parseInt(ssrc):0, port);
+ } else {
+ rtpServerPort = mediaServerItem.getRtpProxyPort();
+ }
+ return new SSRCInfo(rtpServerPort, ssrc, streamId);
}
@Override
@@ -191,11 +186,7 @@
if (mediaServerItem == null || ssrc == null) {
return;
}
- SsrcConfig ssrcConfig = mediaServerItem.getSsrcConfig();
- ssrcConfig.releaseSsrc(ssrc);
- mediaServerItem.setSsrcConfig(ssrcConfig);
- String key = VideoManagerConstants.MEDIA_SERVER_PREFIX + userSetting.getServerId() + "_" + mediaServerItem.getId();
- redisTemplate.opsForValue().set(key, mediaServerItem);
+ ssrcFactory.releaseSsrc(mediaServerItemId, ssrc);
}
/**
@@ -203,8 +194,7 @@
*/
@Override
public void clearRTPServer(MediaServerItem mediaServerItem) {
- mediaServerItem.setSsrcConfig(new SsrcConfig(mediaServerItem.getId(), null, sipConfig.getDomain()));
- redisTemplate.opsForZSet().add(VideoManagerConstants.MEDIA_SERVERS_ONLINE_PREFIX + userSetting.getServerId(), mediaServerItem.getId(), 0);
+ ssrcFactory.reset(mediaServerItem.getId());
}
@@ -214,16 +204,8 @@
mediaServerMapper.update(mediaSerItem);
MediaServerItem mediaServerItemInRedis = getOne(mediaSerItem.getId());
MediaServerItem mediaServerItemInDataBase = mediaServerMapper.queryOne(mediaSerItem.getId());
- if (mediaServerItemInRedis != null && mediaServerItemInRedis.getSsrcConfig() != null) {
- mediaServerItemInDataBase.setSsrcConfig(mediaServerItemInRedis.getSsrcConfig());
- }else {
- mediaServerItemInDataBase.setSsrcConfig(
- new SsrcConfig(
- mediaServerItemInDataBase.getId(),
- null,
- sipConfig.getDomain()
- )
- );
+ if (mediaServerItemInRedis == null || ssrcFactory.hasMediaServerSSRC(mediaSerItem.getId())) {
+ ssrcFactory.initMediaServerSSRC(mediaServerItemInDataBase.getId(),null);
}
String key = VideoManagerConstants.MEDIA_SERVER_PREFIX + userSetting.getServerId() + "_" + mediaServerItemInDataBase.getId();
redisTemplate.opsForValue().set(key, mediaServerItemInDataBase);
@@ -404,14 +386,8 @@
}
mediaServerMapper.update(serverItem);
String key = VideoManagerConstants.MEDIA_SERVER_PREFIX + userSetting.getServerId() + "_" + zlmServerConfig.getGeneralMediaServerId();
- if (redisTemplate.opsForValue().get(key) == null) {
- SsrcConfig ssrcConfig = new SsrcConfig(zlmServerConfig.getGeneralMediaServerId(), null, sipConfig.getDomain());
- serverItem.setSsrcConfig(ssrcConfig);
- }else {
- MediaServerItem mediaServerItemInRedis = JsonUtil.redisJsonToObject(redisTemplate, key, MediaServerItem.class);
- if (Objects.nonNull(mediaServerItemInRedis)) {
- serverItem.setSsrcConfig(mediaServerItemInRedis.getSsrcConfig());
- }
+ if (ssrcFactory.hasMediaServerSSRC(serverItem.getId())) {
+ ssrcFactory.initMediaServerSSRC(zlmServerConfig.getGeneralMediaServerId(), null);
}
redisTemplate.opsForValue().set(key, serverItem);
resetOnlineServerItem(serverItem);
@@ -709,8 +685,7 @@
}
// zlm杩炴帴閲嶈瘯
logger.warn("[鏇存柊ZLM 淇濇椿淇℃伅]灏濊瘯閾炬帴zml id {}", mediaServerId);
- SsrcConfig ssrcConfig = new SsrcConfig(mediaServerItem.getId(), null, sipConfig.getDomain());
- mediaServerItem.setSsrcConfig(ssrcConfig);
+ ssrcFactory.initMediaServerSSRC(mediaServerItem.getId(), null);
String key = VideoManagerConstants.MEDIA_SERVER_PREFIX + userSetting.getServerId() + "_" + mediaServerItem.getId();
redisTemplate.opsForValue().set(key, mediaServerItem);
clearRTPServer(mediaServerItem);
diff --git a/src/main/java/com/genersoft/iot/vmp/service/impl/PlayServiceImpl.java b/src/main/java/com/genersoft/iot/vmp/service/impl/PlayServiceImpl.java
index 91f9bae..f143a15 100644
--- a/src/main/java/com/genersoft/iot/vmp/service/impl/PlayServiceImpl.java
+++ b/src/main/java/com/genersoft/iot/vmp/service/impl/PlayServiceImpl.java
@@ -11,6 +11,7 @@
import com.genersoft.iot.vmp.conf.exception.SsrcTransactionNotFoundException;
import com.genersoft.iot.vmp.gb28181.bean.*;
import com.genersoft.iot.vmp.gb28181.event.SipSubscribe;
+import com.genersoft.iot.vmp.gb28181.session.SSRCFactory;
import com.genersoft.iot.vmp.gb28181.session.VideoStreamSessionManager;
import com.genersoft.iot.vmp.gb28181.transmit.callback.DeferredResultHolder;
import com.genersoft.iot.vmp.gb28181.transmit.callback.RequestMessage;
@@ -99,6 +100,9 @@
@Autowired
private ZlmHttpHookSubscribe subscribe;
+
+ @Autowired
+ private SSRCFactory ssrcFactory;
@Autowired
private RedisTemplate<Object, Object> redisTemplate;
@@ -298,10 +302,10 @@
if (!mediaServerItem.isRtpEnable() || device.isSsrcCheck()) {
logger.info("[鐐规挱娑堟伅] SSRC淇 {}->{}", ssrcInfo.getSsrc(), ssrcInResponse);
- if (!mediaServerItem.getSsrcConfig().checkSsrc(ssrcInResponse)) {
+ if (!ssrcFactory.checkSsrc(mediaServerItem.getId(),ssrcInResponse)) {
// ssrc 涓嶅彲鐢�
// 閲婃斁ssrc
- mediaServerService.releaseSsrc(mediaServerItem.getId(), ssrcInfo.getSsrc());
+ ssrcFactory.releaseSsrc(mediaServerItem.getId(), ssrcInfo.getSsrc());
streamSession.remove(device.getDeviceId(), channelId, ssrcInfo.getStream());
event.msg = "涓嬬骇鑷畾涔変簡ssrc,浣嗘槸姝src涓嶅彲鐢�";
event.statusCode = 400;
@@ -539,7 +543,7 @@
if (!mediaServerItem.isRtpEnable() || device.isSsrcCheck()) {
logger.info("[鍥炴斁娑堟伅] SSRC淇 {}->{}", ssrcInfo.getSsrc(), ssrcInResponse);
- if (!mediaServerItem.getSsrcConfig().checkSsrc(ssrcInResponse)) {
+ if (!ssrcFactory.checkSsrc(mediaServerItem.getId(),ssrcInResponse)) {
// ssrc 涓嶅彲鐢�
// 閲婃斁ssrc
mediaServerService.releaseSsrc(mediaServerItem.getId(), ssrcInfo.getSsrc());
@@ -678,7 +682,7 @@
if (!mediaServerItem.isRtpEnable() || device.isSsrcCheck()) {
logger.info("[鍥炴斁娑堟伅] SSRC淇 {}->{}", ssrcInfo.getSsrc(), ssrcInResponse);
- if (!mediaServerItem.getSsrcConfig().checkSsrc(ssrcInResponse)) {
+ if (!ssrcFactory.checkSsrc(mediaServerItem.getId(),ssrcInResponse)) {
// ssrc 涓嶅彲鐢�
// 閲婃斁ssrc
mediaServerService.releaseSsrc(mediaServerItem.getId(), ssrcInfo.getSsrc());
diff --git a/src/main/java/com/genersoft/iot/vmp/utils/ConfigConst.java b/src/main/java/com/genersoft/iot/vmp/utils/ConfigConst.java
deleted file mode 100644
index 125d818..0000000
--- a/src/main/java/com/genersoft/iot/vmp/utils/ConfigConst.java
+++ /dev/null
@@ -1,8 +0,0 @@
-package com.genersoft.iot.vmp.utils;
-
-public class ConfigConst {
- /**
- * 鎾祦鏈�澶у苟鍙戜釜鏁�
- */
- public static final Integer MAX_STRTEAM_COUNT = 10000;
-}
--
Gitblit v1.8.0