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