限制单个设备/通道 回放数

This commit is contained in:
zxb 2023-10-13 16:52:41 +08:00
parent 45b3aa1368
commit 20db882bf6

View File

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