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) {