648540858
2023-06-29 c014a90cc6a294dfc2aac740be87e75f44193a29
src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/ByeRequestProcessor.java
@@ -5,14 +5,21 @@
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.AudioBroadcastManager;
import com.genersoft.iot.vmp.gb28181.bean.*;
import com.genersoft.iot.vmp.gb28181.session.SSRCFactory;
import com.genersoft.iot.vmp.gb28181.session.VideoStreamSessionManager;
import com.genersoft.iot.vmp.gb28181.transmit.SIPProcessorObserver;
import com.genersoft.iot.vmp.gb28181.transmit.cmd.ISIPCommander;
import com.genersoft.iot.vmp.gb28181.transmit.cmd.ISIPCommanderForPlatform;
import com.genersoft.iot.vmp.gb28181.transmit.event.request.ISIPRequestProcessor;
import com.genersoft.iot.vmp.gb28181.transmit.event.request.SIPRequestProcessorParent;
import com.genersoft.iot.vmp.media.zlm.ZLMRTPServerFactory;
import com.genersoft.iot.vmp.media.zlm.dto.MediaServerItem;
import com.genersoft.iot.vmp.service.IDeviceService;
import com.genersoft.iot.vmp.service.IInviteStreamService;
import com.genersoft.iot.vmp.service.IMediaServerService;
import com.genersoft.iot.vmp.service.IPlayService;
import com.genersoft.iot.vmp.service.*;
import com.genersoft.iot.vmp.service.bean.MessageForPushChannel;
import com.genersoft.iot.vmp.storager.IRedisCatchStorage;
@@ -31,6 +38,7 @@
import javax.sip.message.Response;
import java.text.ParseException;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
@@ -46,6 +54,9 @@
   private ISIPCommander cmder;
   @Autowired
   private ISIPCommanderForPlatform commanderForPlatform;
   @Autowired
   private IRedisCatchStorage redisCatchStorage;
   @Autowired
@@ -56,6 +67,9 @@
   @Autowired
   private IDeviceService deviceService;
   @Autowired
   private AudioBroadcastManager audioBroadcastManager;
   @Autowired
   private IDeviceChannelService channelService;
@@ -79,6 +93,9 @@
   private VideoStreamSessionManager streamSession;
   @Autowired
   private IPlayService playService;
   @Autowired
   private UserSetting userSetting;
   @Override
@@ -100,12 +117,11 @@
         logger.error("[回复BYE信息失败],{}", e.getMessage());
      }
      CallIdHeader callIdHeader = (CallIdHeader)evt.getRequest().getHeader(CallIdHeader.NAME);
      SendRtpItem sendRtpItem =  redisCatchStorage.querySendRTPServer(null, null, null, callIdHeader.getCallId());
      if (sendRtpItem != null){
         logger.info("[收到bye] 来自平台{}, 停止通道:{}", sendRtpItem.getPlatformId(), sendRtpItem.getChannelId());
         String streamId = sendRtpItem.getStreamId();
         String streamId = sendRtpItem.getStream();
         Map<String, Object> param = new HashMap<>();
         param.put("vhost","__defaultVhost__");
         param.put("app",sendRtpItem.getApp());
@@ -120,7 +136,7 @@
            ParentPlatform platform = platformService.queryPlatformByServerGBId(sendRtpItem.getPlatformId());
            if (platform != null) {
               MessageForPushChannel messageForPushChannel = MessageForPushChannel.getInstance(0,
                     sendRtpItem.getApp(), sendRtpItem.getStreamId(), sendRtpItem.getChannelId(),
                     sendRtpItem.getApp(), sendRtpItem.getStream(), sendRtpItem.getChannelId(),
                     sendRtpItem.getPlatformId(), platform.getName(), userSetting.getServerId(), sendRtpItem.getMediaServerId());
               messageForPushChannel.setPlatFormIndex(platform.getId());
               redisCatchStorage.sendPlatformStopPlayMsg(messageForPushChannel);
@@ -146,7 +162,9 @@
               }
            }
         }
      }else {
      }
         // 可能是设备发送的停止
         SsrcTransaction ssrcTransaction = streamSession.getSsrcTransaction(null, null, callIdHeader.getCallId(), null);
@@ -181,6 +199,18 @@
            mediaServerService.releaseSsrc(mediaServerItem.getId(), ssrcTransaction.getSsrc());
         }
         streamSession.remove(device.getDeviceId(), channel.getChannelId(), ssrcTransaction.getStream());
      }
         if (ssrcTransaction.getType() == InviteSessionType.BROADCAST) {
            // 查找来源的对讲设备,发送停止
            Device sourceDevice = storager.queryVideoDeviceByPlatformIdAndChannelId(ssrcTransaction.getDeviceId(), ssrcTransaction.getChannelId());
            if (sourceDevice != null) {
               playService.stopAudioBroadcast(sourceDevice.getDeviceId(), channel.getChannelId());
            }
         }
         AudioBroadcastCatch audioBroadcastCatch = audioBroadcastManager.get(ssrcTransaction.getDeviceId(), channel.getChannelId());
         if (audioBroadcastCatch != null) {
            // 来自上级平台的停止对讲
            logger.info("[停止对讲] 来自上级,平台:{}, 通道:{}", ssrcTransaction.getDeviceId(), channel.getChannelId());
            audioBroadcastManager.del(ssrcTransaction.getDeviceId(), channel.getChannelId());
         }
   }
}