|  | @@ -9,9 +9,12 @@ import com.genersoft.iot.vmp.common.StreamInfo;
 | 
	
		
			
				|  |  |  import com.genersoft.iot.vmp.conf.MediaConfig;
 | 
	
		
			
				|  |  |  import com.genersoft.iot.vmp.conf.UserSetup;
 | 
	
		
			
				|  |  |  import com.genersoft.iot.vmp.gb28181.bean.Device;
 | 
	
		
			
				|  |  | +import com.genersoft.iot.vmp.gb28181.bean.DeviceChannel;
 | 
	
		
			
				|  |  |  import com.genersoft.iot.vmp.gb28181.bean.GbStream;
 | 
	
		
			
				|  |  | +import com.genersoft.iot.vmp.gb28181.bean.SsrcTransaction;
 | 
	
		
			
				|  |  |  import com.genersoft.iot.vmp.gb28181.event.EventPublisher;
 | 
	
		
			
				|  |  |  import com.genersoft.iot.vmp.gb28181.event.subscribe.catalog.CatalogEvent;
 | 
	
		
			
				|  |  | +import com.genersoft.iot.vmp.gb28181.session.VideoStreamSessionManager;
 | 
	
		
			
				|  |  |  import com.genersoft.iot.vmp.media.zlm.dto.*;
 | 
	
		
			
				|  |  |  import com.genersoft.iot.vmp.service.*;
 | 
	
		
			
				|  |  |  import com.genersoft.iot.vmp.service.bean.SSRCInfo;
 | 
	
	
		
			
				|  | @@ -81,7 +84,7 @@ public class ZLMHttpHookListener {
 | 
	
		
			
				|  |  |  	private UserSetup userSetup;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  	@Autowired
 | 
	
		
			
				|  |  | -	private MediaConfig mediaConfig;
 | 
	
		
			
				|  |  | +	private VideoStreamSessionManager sessionManager;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  	/**
 | 
	
		
			
				|  |  |  	 * 服务器定时上报时间,上报间隔可配置,默认10s上报一次
 | 
	
	
		
			
				|  | @@ -204,15 +207,15 @@ public class ZLMHttpHookListener {
 | 
	
		
			
				|  |  |  		}else {
 | 
	
		
			
				|  |  |  			ret.put("enableMP4", userSetup.isRecordPushLive());
 | 
	
		
			
				|  |  |  		}
 | 
	
		
			
				|  |  | -		StreamInfo streamInfo = redisCatchStorage.queryPlaybackByStreamId(stream);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -		// 录像回放时不进行录像下载
 | 
	
		
			
				|  |  | -		if (streamInfo != null) {
 | 
	
		
			
				|  |  | -			ret.put("enableMP4", false);
 | 
	
		
			
				|  |  | -		}else {
 | 
	
		
			
				|  |  | -			ret.put("enableMP4", userSetup.isRecordPushLive());
 | 
	
		
			
				|  |  | +		List<SsrcTransaction> ssrcTransactionForAll = sessionManager.getSsrcTransactionForAll(null, null, null, stream);
 | 
	
		
			
				|  |  | +		if (ssrcTransactionForAll != null && ssrcTransactionForAll.size() == 1) {
 | 
	
		
			
				|  |  | +			String deviceId = ssrcTransactionForAll.get(0).getDeviceId();
 | 
	
		
			
				|  |  | +			String channelId = ssrcTransactionForAll.get(0).getChannelId();
 | 
	
		
			
				|  |  | +			DeviceChannel deviceChannel = storager.queryChannel(deviceId, channelId);
 | 
	
		
			
				|  |  | +			if (deviceChannel != null) {
 | 
	
		
			
				|  |  | +				ret.put("enable_audio", deviceChannel.isHasAudio());
 | 
	
		
			
				|  |  | +			}
 | 
	
		
			
				|  |  |  		}
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  |  		return new ResponseEntity<String>(ret.toString(), HttpStatus.OK);
 | 
	
		
			
				|  |  |  	}
 | 
	
		
			
				|  |  |  	
 | 
	
	
		
			
				|  | @@ -347,8 +350,12 @@ public class ZLMHttpHookListener {
 | 
	
		
			
				|  |  |  					redisCatchStorage.stopPlay(streamInfo);
 | 
	
		
			
				|  |  |  					storager.stopPlay(streamInfo.getDeviceID(), streamInfo.getChannelId());
 | 
	
		
			
				|  |  |  				}else{
 | 
	
		
			
				|  |  | -					streamInfo = redisCatchStorage.queryPlaybackByStreamId(streamId);
 | 
	
		
			
				|  |  | -					redisCatchStorage.stopPlayback(streamInfo);
 | 
	
		
			
				|  |  | +					streamInfo = redisCatchStorage.queryPlayback(null, null, streamId, null);
 | 
	
		
			
				|  |  | +					if (streamInfo != null) {
 | 
	
		
			
				|  |  | +						redisCatchStorage.stopPlayback(streamInfo.getDeviceID(), streamInfo.getChannelId(),
 | 
	
		
			
				|  |  | +								streamInfo.getStream(), null);
 | 
	
		
			
				|  |  | +					}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |  				}
 | 
	
		
			
				|  |  |  			}else {
 | 
	
		
			
				|  |  |  				if (!"rtp".equals(app)){
 | 
	
	
		
			
				|  | @@ -440,18 +447,19 @@ public class ZLMHttpHookListener {
 | 
	
		
			
				|  |  |  					ret.put("close", false);
 | 
	
		
			
				|  |  |  				} else {
 | 
	
		
			
				|  |  |  					cmder.streamByeCmd(streamInfoForPlayCatch.getDeviceID(), streamInfoForPlayCatch.getChannelId(),
 | 
	
		
			
				|  |  | -							streamInfoForPlayCatch.getStream());
 | 
	
		
			
				|  |  | +							streamInfoForPlayCatch.getStream(), null);
 | 
	
		
			
				|  |  |  					redisCatchStorage.stopPlay(streamInfoForPlayCatch);
 | 
	
		
			
				|  |  |  					storager.stopPlay(streamInfoForPlayCatch.getDeviceID(), streamInfoForPlayCatch.getChannelId());
 | 
	
		
			
				|  |  |  				}
 | 
	
		
			
				|  |  |  			}else{
 | 
	
		
			
				|  |  | -				StreamInfo streamInfoForPlayBackCatch = redisCatchStorage.queryPlaybackByStreamId(streamId);
 | 
	
		
			
				|  |  | +				StreamInfo streamInfoForPlayBackCatch = redisCatchStorage.queryPlayback(null, null, streamId, null);
 | 
	
		
			
				|  |  |  				if (streamInfoForPlayBackCatch != null) {
 | 
	
		
			
				|  |  |  					cmder.streamByeCmd(streamInfoForPlayBackCatch.getDeviceID(),
 | 
	
		
			
				|  |  | -							streamInfoForPlayBackCatch.getChannelId(), streamInfoForPlayBackCatch.getStream());
 | 
	
		
			
				|  |  | -					redisCatchStorage.stopPlayback(streamInfoForPlayBackCatch);
 | 
	
		
			
				|  |  | +							streamInfoForPlayBackCatch.getChannelId(), streamInfoForPlayBackCatch.getStream(), null);
 | 
	
		
			
				|  |  | +					redisCatchStorage.stopPlayback(streamInfoForPlayBackCatch.getDeviceID(),
 | 
	
		
			
				|  |  | +							streamInfoForPlayBackCatch.getChannelId(), streamInfoForPlayBackCatch.getStream(), null);
 | 
	
		
			
				|  |  |  				}else {
 | 
	
		
			
				|  |  | -					StreamInfo streamInfoForDownload = redisCatchStorage.queryDownloadByStreamId(streamId);
 | 
	
		
			
				|  |  | +					StreamInfo streamInfoForDownload = redisCatchStorage.queryDownload(null, null, streamId, null);
 | 
	
		
			
				|  |  |  					// 进行录像下载时无人观看不断流
 | 
	
		
			
				|  |  |  					if (streamInfoForDownload != null) {
 | 
	
		
			
				|  |  |  						ret.put("close", false);
 |