‘sxh’
2023-06-15 15df08964bb459d6d01ec5ef423eae094eac1c72
src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/ByeRequestProcessor.java
@@ -142,8 +142,13 @@
         // 可能是设备主动停止
         Device device = storager.queryVideoDeviceByChannelId(platformGbId);
         if (device != null) {
            storager.stopPlay(device.getDeviceId(), channelId);
            SsrcTransaction ssrcTransactionForPlay = streamSession.getSsrcTransaction(device.getDeviceId(), channelId, "play", null);
            SsrcTransaction ssrcTransactionForPlay = null;
            if (device.isSwitchPrimarySubStream() ) {
               ssrcTransactionForPlay = streamSession.getSsrcTransaction(device.getDeviceId(), channelId,  "switch-play", null);
            } else {
               storager.stopPlay(device.getDeviceId(), channelId);
               ssrcTransactionForPlay = streamSession.getSsrcTransaction(device.getDeviceId(), channelId, "play", null);
            }
            if (ssrcTransactionForPlay != null){
               if (ssrcTransactionForPlay.getCallId().equals(callIdHeader.getCallId())){
                  // 释放ssrc
@@ -153,10 +158,17 @@
                  }
                  streamSession.remove(device.getDeviceId(), channelId, ssrcTransactionForPlay.getStream());
               }
               InviteInfo inviteInfo = inviteStreamService.getInviteInfoByDeviceAndChannel(InviteSessionType.PLAY, device.getDeviceId(), channelId);
               if (inviteInfo != null) {
               InviteInfo inviteInfo = null;
               if (device.isSwitchPrimarySubStream() ) {
                  String streamType = ssrcTransactionForPlay.getStream().split("_")[0];
                  boolean isSubStream = "sub".equals(streamType);
                  inviteInfo = inviteStreamService.getInviteInfoByDeviceAndChannel(InviteSessionType.PLAY, device.getDeviceId(), channelId,isSubStream);
                  inviteStreamService.removeInviteInfo(inviteInfo.getType(),inviteInfo.getDeviceId(),inviteInfo.getChannelId(),isSubStream,inviteInfo.getStream());
               }else {
                  inviteInfo = inviteStreamService.getInviteInfoByDeviceAndChannel(InviteSessionType.PLAY, device.getDeviceId(), channelId);
                  inviteStreamService.removeInviteInfo(inviteInfo);
               }
               if (inviteInfo != null) {
                  if (inviteInfo.getStreamInfo() != null) {
                     mediaServerService.closeRTPServer(inviteInfo.getStreamInfo().getMediaServerId(), inviteInfo.getStream());
                  }