From 20db882bf697b3933a3027f141810e21386106d8 Mon Sep 17 00:00:00 2001 From: zxb <919411476@qq.com> Date: Fri, 13 Oct 2023 16:52:41 +0800 Subject: [PATCH] =?UTF-8?q?=E9=99=90=E5=88=B6=E5=8D=95=E4=B8=AA=E8=AE=BE?= =?UTF-8?q?=E5=A4=87/=E9=80=9A=E9=81=93=20=E5=9B=9E=E6=94=BE=E6=95=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../request/impl/InviteRequestProcessor.java | 20 +++++++++++++++++++ 1 file changed, 20 insertions(+) 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 34f917fd..e4b1c38a 100755 --- 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 @@ -2,13 +2,17 @@ package com.genersoft.iot.vmp.gb28181.transmit.event.request.impl; import com.alibaba.fastjson2.JSON; import com.alibaba.fastjson2.JSONObject; +import com.genersoft.iot.vmp.common.InviteInfo; +import com.genersoft.iot.vmp.common.InviteSessionType; import com.genersoft.iot.vmp.common.StreamInfo; import com.genersoft.iot.vmp.conf.DynamicTask; import com.genersoft.iot.vmp.conf.UserSetting; +import com.genersoft.iot.vmp.conf.exception.SsrcTransactionNotFoundException; import com.genersoft.iot.vmp.gb28181.bean.*; import com.genersoft.iot.vmp.gb28181.session.SSRCFactory; import com.genersoft.iot.vmp.gb28181.transmit.SIPProcessorObserver; import com.genersoft.iot.vmp.gb28181.transmit.SIPSender; +import com.genersoft.iot.vmp.gb28181.transmit.cmd.impl.SIPCommander; import com.genersoft.iot.vmp.gb28181.transmit.cmd.impl.SIPCommanderFroPlatform; import com.genersoft.iot.vmp.gb28181.transmit.event.request.ISIPRequestProcessor; import com.genersoft.iot.vmp.gb28181.transmit.event.request.SIPRequestProcessorParent; @@ -39,6 +43,7 @@ import org.springframework.beans.factory.InitializingBean; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; +import javax.annotation.PreDestroy; import javax.sdp.*; import javax.sip.InvalidArgumentException; import javax.sip.RequestEvent; @@ -117,6 +122,8 @@ public class InviteRequestProcessor extends SIPRequestProcessorParent implements @Autowired private RedisGbPlayMsgListener redisGbPlayMsgListener; + @Autowired + private SIPCommander cmder; @Override public void afterPropertiesSet() throws Exception { @@ -339,6 +346,19 @@ public class InviteRequestProcessor extends SIPRequestProcessorParent implements }else { ssrc = gb28181Sdp.getSsrc(); } + + // 限制同时只能存在一个回放流, 如果已有回放流就关闭 + if(!"Play".equalsIgnoreCase(sessionName)){ + InviteInfo inviteInfo = inviteStreamService.getInviteInfoByDeviceAndChannel(InviteSessionType.PLAYBACK, device.getDeviceId(), channelId); + try { + if(inviteInfo != null){ + logger.info("已存在回放流, 关闭已有回放流 {}", inviteInfo); + inviteStreamService.removeInviteInfo(inviteInfo); + cmder.streamByeCmd(device, inviteInfo.getChannelId(), + inviteInfo.getStream(), null); + } + } catch (Exception ignore) {} + } String streamTypeStr = null; if (mediaTransmissionTCP) { if (tcpActive) {