From 74431b1e983b2f9c22d31eef596b2412f8f81641 Mon Sep 17 00:00:00 2001
From: 648540858 <648540858@qq.com>
Date: 星期五, 02 六月 2023 15:46:07 +0800
Subject: [PATCH] 优化点播流程中ssrc的释放
---
src/main/java/com/genersoft/iot/vmp/service/impl/PlayServiceImpl.java | 52 ++++++++------------------
src/main/java/com/genersoft/iot/vmp/gb28181/session/SSRCFactory.java | 24 ++++--------
2 files changed, 24 insertions(+), 52 deletions(-)
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
index ec8e0ba..657bb2f 100644
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/session/SSRCFactory.java
+++ b/src/main/java/com/genersoft/iot/vmp/gb28181/session/SSRCFactory.java
@@ -1,6 +1,7 @@
package com.genersoft.iot.vmp.gb28181.session;
import com.genersoft.iot.vmp.conf.SipConfig;
+import com.genersoft.iot.vmp.conf.UserSetting;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.stereotype.Component;
@@ -31,10 +32,13 @@
@Autowired
private SipConfig sipConfig;
+ @Autowired
+ private UserSetting userSetting;
+
public void initMediaServerSSRC(String mediaServerId, Set<String> usedSet) {
String ssrcPrefix = sipConfig.getDomain().substring(3, 8);
- String redisKey = SSRC_INFO_KEY + mediaServerId;
+ String redisKey = SSRC_INFO_KEY + userSetting.getServerId() + "_" + mediaServerId;
List<String> ssrcList = new ArrayList<>();
for (int i = 1; i < MAX_STREAM_COUNT; i++) {
String ssrc = String.format("%s%04d", ssrcPrefix, i);
@@ -77,7 +81,7 @@
return;
}
String sn = ssrc.substring(1);
- String redisKey = SSRC_INFO_KEY + mediaServerId;
+ String redisKey = SSRC_INFO_KEY + userSetting.getServerId() + "_" + mediaServerId;
redisTemplate.opsForSet().add(redisKey, sn);
}
@@ -86,7 +90,7 @@
*/
private String getSN(String mediaServerId) {
String sn = null;
- String redisKey = SSRC_INFO_KEY + mediaServerId;
+ String redisKey = SSRC_INFO_KEY + userSetting.getServerId() + "_" + mediaServerId;
Long size = redisTemplate.opsForSet().size(redisKey);
if (size == null || size == 0) {
throw new RuntimeException("ssrc宸茬粡鐢ㄥ畬");
@@ -113,20 +117,8 @@
* @param mediaServerId 娴佸獟浣撴湇鍔D
*/
public boolean hasMediaServerSSRC(String mediaServerId) {
- String redisKey = SSRC_INFO_KEY + mediaServerId;
+ String redisKey = SSRC_INFO_KEY + userSetting.getServerId() + "_" + 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/service/impl/PlayServiceImpl.java b/src/main/java/com/genersoft/iot/vmp/service/impl/PlayServiceImpl.java
index 5157439..2fbe6bb 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
@@ -228,7 +228,14 @@
ZlmHttpHookSubscribe.Event hookEvent, SipSubscribe.Event errorEvent,
InviteTimeOutCallback timeoutCallback) {
- logger.info("[鐐规挱寮�濮媇 deviceId: {}, channelId: {},鏀舵祦绔彛锛� {}, 鏀舵祦妯″紡锛歿}, SSRC: {}, SSRC鏍¢獙锛歿}", device.getDeviceId(), channelId, ssrcInfo.getPort(), device.getStreamMode(), ssrcInfo.getSsrc(), device.isSsrcCheck());
+ logger.info("\r\n" +
+ "[鐐规挱寮�濮媇 \r\n" +
+ "deviceId : {}, \r\n" +
+ "channelId : {},\r\n" +
+ "鏀舵祦绔彛 锛歿}, \r\n" +
+ "鏀舵祦妯″紡 锛歿}, \r\n" +
+ "SSRC : {}, \r\n" +
+ "SSRC鏍¢獙 锛歿} ", device.getDeviceId(), channelId, ssrcInfo.getPort(), device.getStreamMode(), ssrcInfo.getSsrc(), device.isSsrcCheck());
// 瓒呮椂澶勭悊
String timeOutTaskKey = UUID.randomUUID().toString();
dynamicTask.startDelay(timeOutTaskKey, () -> {
@@ -254,7 +261,7 @@
}, userSetting.getPlayTimeout());
//绔彛鑾峰彇澶辫触鐨剆srcInfo 娌℃湁蹇呰鍙戦�佺偣鎾寚浠�
if (ssrcInfo.getPort() <= 0) {
- logger.info("[鐐规挱绔彛鍒嗛厤寮傚父]锛宒eviceId={},channelId={},ssrcInfo={}", device.getDeviceId(), channelId, ssrcInfo);
+ logger.info("[鐐规挱绔彛鍒嗛厤寮傚父]锛宒eviceId={},channelId={},ssrcInfo={}", device.getDeviceId(), channelId, JSON.toJSONString(ssrcInfo));
dynamicTask.stop(timeOutTaskKey);
// 閲婃斁ssrc
mediaServerService.releaseSsrc(mediaServerItem.getId(), ssrcInfo.getSsrc());
@@ -327,17 +334,8 @@
if (!mediaServerItem.isRtpEnable() || device.isSsrcCheck()) {
logger.info("[鐐规挱娑堟伅] SSRC淇 {}->{}", ssrcInfo.getSsrc(), ssrcInResponse);
- if (!ssrcFactory.checkSsrc(mediaServerItem.getId(),ssrcInResponse)) {
- // ssrc 涓嶅彲鐢�
- // 閲婃斁ssrc
- ssrcFactory.releaseSsrc(mediaServerItem.getId(), ssrcInfo.getSsrc());
- streamSession.remove(device.getDeviceId(), channelId, ssrcInfo.getStream());
- event.msg = "涓嬬骇鑷畾涔変簡ssrc,浣嗘槸姝src涓嶅彲鐢�";
- event.statusCode = 400;
- errorEvent.response(event);
- return;
- }
-
+ // 閲婃斁涓嶈浣跨敤鐨剆src
+ mediaServerService.releaseSsrc(mediaServerItem.getId(), ssrcInfo.getSsrc());
// 鍗曠鍙fā寮弒treamId涔熸湁鍙樺寲锛岄渶瑕侀噸鏂拌缃洃鍚�
if (!mediaServerItem.isRtpEnable()) {
// 娣诲姞璁㈤槄
@@ -352,6 +350,7 @@
hookEvent.response(mediaServerItemInUse, response);
});
}
+
// 鍏抽棴rtp server
mediaServerService.closeRTPServer(mediaServerItem, ssrcInfo.getStream(), result->{
if (result) {
@@ -367,8 +366,6 @@
}
dynamicTask.stop(timeOutTaskKey);
- // 閲婃斁ssrc
- mediaServerService.releaseSsrc(mediaServerItem.getId(), ssrcInfo.getSsrc());
streamSession.remove(device.getDeviceId(), channelId, ssrcInfo.getStream());
event.msg = "涓嬬骇鑷畾涔変簡ssrc,閲嶆柊璁剧疆鏀舵祦淇℃伅澶辫触";
@@ -590,17 +587,8 @@
if (!mediaServerItem.isRtpEnable() || device.isSsrcCheck()) {
logger.info("[鍥炴斁娑堟伅] SSRC淇 {}->{}", ssrcInfo.getSsrc(), ssrcInResponse);
- if (!ssrcFactory.checkSsrc(mediaServerItem.getId(),ssrcInResponse)) {
- // ssrc 涓嶅彲鐢�
- // 閲婃斁ssrc
- dynamicTask.stop(playBackTimeOutTaskKey);
- mediaServerService.releaseSsrc(mediaServerItem.getId(), ssrcInfo.getSsrc());
- streamSession.remove(device.getDeviceId(), channelId, ssrcInfo.getStream());
- eventResult.msg = "涓嬬骇鑷畾涔変簡ssrc,浣嗘槸姝src涓嶅彲鐢�";
- eventResult.statusCode = 400;
- errorEvent.response(eventResult);
- return;
- }
+ // 閲婃斁涓嶈浣跨敤鐨剆src
+ mediaServerService.releaseSsrc(mediaServerItem.getId(), ssrcInfo.getSsrc());
// 鍗曠鍙fā寮弒treamId涔熸湁鍙樺寲锛岄渶瑕侀噸鏂拌缃洃鍚�
if (!mediaServerItem.isRtpEnable()) {
@@ -752,16 +740,8 @@
if (!mediaServerItem.isRtpEnable() || device.isSsrcCheck()) {
logger.info("[褰曞儚涓嬭浇] SSRC淇 {}->{}", ssrcInfo.getSsrc(), ssrcInResponse);
- if (!ssrcFactory.checkSsrc(mediaServerItem.getId(),ssrcInResponse)) {
- // ssrc 涓嶅彲鐢�
- // 閲婃斁ssrc
- mediaServerService.releaseSsrc(mediaServerItem.getId(), ssrcInfo.getSsrc());
- streamSession.remove(device.getDeviceId(), channelId, ssrcInfo.getStream());
- eventResult.msg = "涓嬬骇鑷畾涔変簡ssrc,浣嗘槸姝src涓嶅彲鐢�";
- eventResult.statusCode = 400;
- errorEvent.response(eventResult);
- return;
- }
+ // 閲婃斁涓嶈浣跨敤鐨剆src
+ mediaServerService.releaseSsrc(mediaServerItem.getId(), ssrcInfo.getSsrc());
// 鍗曠鍙fā寮弒treamId涔熸湁鍙樺寲锛岄渶瑕侀噸鏂拌缃洃鍚�
if (!mediaServerItem.isRtpEnable()) {
--
Gitblit v1.8.0