From 2e98b20bea4463e4465e3c19059d0744a09aec06 Mon Sep 17 00:00:00 2001
From: zhongrj <646384940@qq.com>
Date: Tue, 27 Jun 2023 14:34:41 +0800
Subject: [PATCH] gb28181版本升级-补充
---
src/main/java/com/genersoft/iot/vmp/gb28181/session/SsrcConfig.java | 150 ++++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 150 insertions(+), 0 deletions(-)
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
new file mode 100644
index 0000000..cc303c8
--- /dev/null
+++ b/src/main/java/com/genersoft/iot/vmp/gb28181/session/SsrcConfig.java
@@ -0,0 +1,150 @@
+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);
+ }
+ }
+ }
+
+
+ /**
+ * 获取视频预览的SSRC值,第一位固定为0
+ * @return ssrc
+ */
+ public String getPlaySsrc() {
+ return "0" + getSsrcPrefix() + getSN();
+ }
+
+ /**
+ * 获取录像回放的SSRC值,第一位固定为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);
+ }
+}
--
Gitblit v1.9.3