修复国标视频点播三种级联并发点播和录像下载的问题
This commit is contained in:
@@ -451,6 +451,11 @@ public class ZLMHttpHookListener {
|
||||
InviteInfo inviteInfo = inviteStreamService.getInviteInfoByStream(null, param.getStream());
|
||||
// 点播
|
||||
if (inviteInfo != null) {
|
||||
// 录像下载
|
||||
if (inviteInfo.getType() == InviteSessionType.DOWNLOAD) {
|
||||
ret.put("close", false);
|
||||
return ret;
|
||||
}
|
||||
// 收到无人观看说明流也没有在往上级推送
|
||||
if (redisCatchStorage.isChannelSendingRTP(inviteInfo.getChannelId())) {
|
||||
List<SendRtpItem> sendRtpItems = redisCatchStorage.querySendRTPServerByChnnelId(
|
||||
@@ -486,36 +491,6 @@ public class ZLMHttpHookListener {
|
||||
storager.stopPlay(inviteInfo.getDeviceId(), inviteInfo.getChannelId());
|
||||
return ret;
|
||||
}
|
||||
// 录像回放
|
||||
StreamInfo streamInfoForPlayBackCatch = redisCatchStorage.queryPlayback(null, null,
|
||||
param.getStream(), null);
|
||||
if (streamInfoForPlayBackCatch != null) {
|
||||
if (streamInfoForPlayBackCatch.isPause()) {
|
||||
ret.put("close", false);
|
||||
} else {
|
||||
Device device = deviceService.getDevice(streamInfoForPlayBackCatch.getDeviceID());
|
||||
if (device != null) {
|
||||
try {
|
||||
cmder.streamByeCmd(device, streamInfoForPlayBackCatch.getChannelId(),
|
||||
streamInfoForPlayBackCatch.getStream(), null);
|
||||
} catch (InvalidArgumentException | ParseException | SipException |
|
||||
SsrcTransactionNotFoundException e) {
|
||||
logger.error("[无人观看]回放, 发送BYE失败 {}", e.getMessage());
|
||||
}
|
||||
}
|
||||
redisCatchStorage.stopPlayback(streamInfoForPlayBackCatch.getDeviceID(),
|
||||
streamInfoForPlayBackCatch.getChannelId(), streamInfoForPlayBackCatch.getStream(), null);
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
// 录像下载
|
||||
StreamInfo streamInfoForDownload = redisCatchStorage.queryDownload(null, null,
|
||||
param.getStream(), null);
|
||||
// 进行录像下载时无人观看不断流
|
||||
if (streamInfoForDownload != null) {
|
||||
ret.put("close", false);
|
||||
return ret;
|
||||
}
|
||||
} else {
|
||||
// 非国标流 推流/拉流代理
|
||||
// 拉流代理
|
||||
|
||||
@@ -293,11 +293,14 @@ public class ZLMRTPServerFactory {
|
||||
if (jsonObject.getInteger("code") == 0) {
|
||||
localPort = jsonObject.getInteger("port");
|
||||
HookSubscribeForRtpServerTimeout hookSubscribeForRtpServerTimeout = HookSubscribeFactory.on_rtp_server_timeout(ssrc, null, serverItem.getId());
|
||||
// 订阅 zlm启动事件, 新的zlm也会从这里进入系统
|
||||
hookSubscribe.addSubscribe(hookSubscribeForRtpServerTimeout,
|
||||
(MediaServerItem mediaServerItem, JSONObject response)->{
|
||||
logger.info("[上级点播] {}->监听端口到期继续保持监听", ssrc);
|
||||
keepPort(serverItem, ssrc);
|
||||
int port = keepPort(serverItem, ssrc);
|
||||
if (port == 0) {
|
||||
logger.info("[上级点播] {}->监听端口失败,移除监听", ssrc);
|
||||
hookSubscribe.removeSubscribe(hookSubscribeForRtpServerTimeout);
|
||||
}
|
||||
});
|
||||
logger.info("[上级点播] {}->监听端口: {}", ssrc, localPort);
|
||||
}else {
|
||||
|
||||
Reference in New Issue
Block a user