|  | @@ -2,15 +2,10 @@ package com.genersoft.iot.vmp.gb28181.transmit.event.request.impl;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  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.UserSetting;
 | 
	
		
			
				|  |  |  import com.genersoft.iot.vmp.conf.exception.SsrcTransactionNotFoundException;
 | 
	
		
			
				|  |  | -import com.genersoft.iot.vmp.gb28181.bean.Device;
 | 
	
		
			
				|  |  | -import com.genersoft.iot.vmp.gb28181.bean.InviteStreamType;
 | 
	
		
			
				|  |  | -import com.genersoft.iot.vmp.gb28181.bean.SendRtpItem;
 | 
	
		
			
				|  |  | -import com.genersoft.iot.vmp.gb28181.bean.SsrcTransaction;
 | 
	
		
			
				|  |  | -import com.genersoft.iot.vmp.gb28181.session.SSRCFactory;
 | 
	
		
			
				|  |  |  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;
 | 
	
	
		
			
				|  | @@ -18,11 +13,7 @@ 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.IDeviceChannelService;
 | 
	
		
			
				|  |  | -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.IPlatformService;
 | 
	
		
			
				|  |  | +import com.genersoft.iot.vmp.service.*;
 | 
	
		
			
				|  |  |  import com.genersoft.iot.vmp.service.bean.MessageForPushChannel;
 | 
	
		
			
				|  |  |  import com.genersoft.iot.vmp.storager.IRedisCatchStorage;
 | 
	
		
			
				|  |  |  import com.genersoft.iot.vmp.storager.IVideoManagerStorage;
 | 
	
	
		
			
				|  | @@ -33,10 +24,6 @@ import org.springframework.beans.factory.InitializingBean;
 | 
	
		
			
				|  |  |  import org.springframework.beans.factory.annotation.Autowired;
 | 
	
		
			
				|  |  |  import org.springframework.stereotype.Component;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -import javax.sip.InvalidArgumentException;
 | 
	
		
			
				|  |  | -import javax.sip.RequestEvent;
 | 
	
		
			
				|  |  | -import javax.sip.SipException;
 | 
	
		
			
				|  |  | -import javax.sip.address.SipURI;
 | 
	
		
			
				|  |  |  import javax.sip.InvalidArgumentException;
 | 
	
		
			
				|  |  |  import javax.sip.RequestEvent;
 | 
	
		
			
				|  |  |  import javax.sip.SipException;
 | 
	
	
		
			
				|  | @@ -160,6 +147,7 @@ public class ByeRequestProcessor extends SIPRequestProcessorParent implements In
 | 
	
		
			
				|  |  |  				}
 | 
	
		
			
				|  |  |  			}
 | 
	
		
			
				|  |  |  		}else {
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |  			// 可能是设备发送的停止
 | 
	
		
			
				|  |  |  			SsrcTransaction ssrcTransaction = streamSession.getSsrcTransaction(null, null, callIdHeader.getCallId(), null);
 | 
	
		
			
				|  |  |  			if (ssrcTransaction == null) {
 | 
	
	
		
			
				|  | @@ -180,10 +168,12 @@ public class ByeRequestProcessor extends SIPRequestProcessorParent implements In
 | 
	
		
			
				|  |  |  				return;
 | 
	
		
			
				|  |  |  			}
 | 
	
		
			
				|  |  |  			storager.stopPlay(device.getDeviceId(), channel.getChannelId());
 | 
	
		
			
				|  |  | -			StreamInfo streamInfo = redisCatchStorage.queryPlayByDevice(device.getDeviceId(), channel.getChannelId());
 | 
	
		
			
				|  |  | -			if (streamInfo != null) {
 | 
	
		
			
				|  |  | -				redisCatchStorage.stopPlay(streamInfo);
 | 
	
		
			
				|  |  | -				mediaServerService.closeRTPServer(streamInfo.getMediaServerId(), streamInfo.getStream());
 | 
	
		
			
				|  |  | +			InviteInfo inviteInfo = inviteStreamService.getInviteInfoByDeviceAndChannel(InviteSessionType.PLAY, device.getDeviceId(), channel.getChannelId());
 | 
	
		
			
				|  |  | +			if (inviteInfo != null) {
 | 
	
		
			
				|  |  | +				inviteStreamService.removeInviteInfo(inviteInfo);
 | 
	
		
			
				|  |  | +				if (inviteInfo.getStreamInfo() != null) {
 | 
	
		
			
				|  |  | +					mediaServerService.closeRTPServer(inviteInfo.getStreamInfo().getMediaServerId(), inviteInfo.getStreamInfo().getStream());
 | 
	
		
			
				|  |  | +				}
 | 
	
		
			
				|  |  |  			}
 | 
	
		
			
				|  |  |  			// 释放ssrc
 | 
	
		
			
				|  |  |  			MediaServerItem mediaServerItem = mediaServerService.getOne(ssrcTransaction.getMediaServerId());
 |