From 688e222dcccb809cf314e175db944ad25cb9bc1e Mon Sep 17 00:00:00 2001 From: 648540858 <648540858@qq.com> Date: 星期二, 18 十月 2022 17:35:32 +0800 Subject: [PATCH] 优化按需拉流配置,拉流代理支持按需拉流 --- src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMHttpHookListener.java | 93 ++++++++++++++++++++++++++++------------------ 1 files changed, 56 insertions(+), 37 deletions(-) diff --git a/src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMHttpHookListener.java b/src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMHttpHookListener.java index e1689c9..bde4f82 100644 --- a/src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMHttpHookListener.java +++ b/src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMHttpHookListener.java @@ -558,9 +558,12 @@ String app = json.getString("app"); JSONObject ret = new JSONObject(); ret.put("code", 0); + // 褰曞儚涓嬭浇 + ret.put("close", userSetting.getStreamOnDemand()); if ("rtp".equals(app)){ - ret.put("close", true); + // 鍥芥爣娴侊紝 鐐规挱/褰曞儚鍥炴斁/褰曞儚涓嬭浇 StreamInfo streamInfoForPlayCatch = redisCatchStorage.queryPlayByStreamId(streamId); + // 鐐规挱 if (streamInfoForPlayCatch != null) { // 鏀跺埌鏃犱汉瑙傜湅璇存槑娴佷篃娌℃湁鍦ㄥ線涓婄骇鎺ㄩ�� if (redisCatchStorage.isChannelSendingRTP(streamInfoForPlayCatch.getChannelId())) { @@ -590,40 +593,39 @@ redisCatchStorage.stopPlay(streamInfoForPlayCatch); storager.stopPlay(streamInfoForPlayCatch.getDeviceID(), streamInfoForPlayCatch.getChannelId()); - }else{ - StreamInfo streamInfoForPlayBackCatch = redisCatchStorage.queryPlayback(null, null, streamId, null); - if (streamInfoForPlayBackCatch != null ) { - if (streamInfoForPlayBackCatch.isPause()) { - ret.put("close", false); - }else { - Device device = deviceService.queryDevice(streamInfoForPlayBackCatch.getDeviceID()); - if (device != null) { - try { - cmder.streamByeCmd(device,streamInfoForPlayBackCatch.getChannelId(), - streamInfoForPlayBackCatch.getStream(), null); - } catch (InvalidArgumentException | ParseException | SipException | - SsrcTransactionNotFoundException e) { - logger.error("[鏃犱汉瑙傜湅]鍥炴斁锛� 鍙戦�丅YE澶辫触 {}", e.getMessage()); - } - } - redisCatchStorage.stopPlayback(streamInfoForPlayBackCatch.getDeviceID(), - streamInfoForPlayBackCatch.getChannelId(), streamInfoForPlayBackCatch.getStream(), null); - } - + return ret; + } + // 褰曞儚鍥炴斁 + StreamInfo streamInfoForPlayBackCatch = redisCatchStorage.queryPlayback(null, null, streamId, null); + if (streamInfoForPlayBackCatch != null ) { + if (streamInfoForPlayBackCatch.isPause()) { + ret.put("close", false); }else { - StreamInfo streamInfoForDownload = redisCatchStorage.queryDownload(null, null, streamId, null); - // 杩涜褰曞儚涓嬭浇鏃舵棤浜鸿鐪嬩笉鏂祦 - if (streamInfoForDownload != null) { - ret.put("close", false); + Device device = deviceService.queryDevice(streamInfoForPlayBackCatch.getDeviceID()); + if (device != null) { + try { + cmder.streamByeCmd(device,streamInfoForPlayBackCatch.getChannelId(), + streamInfoForPlayBackCatch.getStream(), null); + } catch (InvalidArgumentException | ParseException | SipException | + SsrcTransactionNotFoundException e) { + logger.error("[鏃犱汉瑙傜湅]鍥炴斁锛� 鍙戦�丅YE澶辫触 {}", e.getMessage()); + } } + redisCatchStorage.stopPlayback(streamInfoForPlayBackCatch.getDeviceID(), + streamInfoForPlayBackCatch.getChannelId(), streamInfoForPlayBackCatch.getStream(), null); } + return ret; } - MediaServerItem mediaServerItem = mediaServerService.getOne(mediaServerId); - if (mediaServerItem != null && mediaServerItem.getStreamNoneReaderDelayMS() == -1) { + // 褰曞儚涓嬭浇 + StreamInfo streamInfoForDownload = redisCatchStorage.queryDownload(null, null, streamId, null); + // 杩涜褰曞儚涓嬭浇鏃舵棤浜鸿鐪嬩笉鏂祦 + if (streamInfoForDownload != null) { ret.put("close", false); + return ret; } - return ret; }else { + // 闈炲浗鏍囨祦 鎺ㄦ祦/鎷夋祦浠g悊 + // 鎷夋祦浠g悊 StreamProxyItem streamProxyItem = streamProxyService.getStreamProxyByAppAndStream(app, streamId); if (streamProxyItem != null ) { if (streamProxyItem.isEnable_remove_none_reader()) { @@ -635,12 +637,21 @@ }else if (streamProxyItem.isEnable_disable_none_reader()) { // 鏃犱汉瑙傜湅鍋滅敤 ret.put("close", true); + // 淇敼鏁版嵁 + streamProxyService.stop(app, streamId); }else { ret.put("close", false); } + return ret; } - return ret; + // 鎺ㄦ祦鍏锋湁涓诲姩鎬э紝鏆傛椂涓嶅仛澶勭悊 +// StreamPushItem streamPushItem = streamPushService.getPush(app, streamId); +// if (streamPushItem != null) { +// // TODO 鍙戦�佸仠姝� +// +// } } + return ret; } /** @@ -655,19 +666,27 @@ } String mediaServerId = json.getString("mediaServerId"); MediaServerItem mediaInfo = mediaServerService.getOne(mediaServerId); - if (userSetting.isAutoApplyPlay() && mediaInfo != null && mediaInfo.isRtpEnable()) { + if (userSetting.isAutoApplyPlay() && mediaInfo != null) { String app = json.getString("app"); String streamId = json.getString("stream"); if ("rtp".equals(app)) { - String[] s = streamId.split("_"); - if (s.length == 2) { - String deviceId = s[0]; - String channelId = s[1]; - Device device = redisCatchStorage.getDevice(deviceId); - if (device != null) { - playService.play(mediaInfo,deviceId, channelId, null, null, null); + if (mediaInfo.isRtpEnable()) { + String[] s = streamId.split("_"); + if (s.length == 2) { + String deviceId = s[0]; + String channelId = s[1]; + Device device = redisCatchStorage.getDevice(deviceId); + if (device != null) { + playService.play(mediaInfo,deviceId, channelId, null, null, null); + } } } + }else { + // 鎷夋祦浠g悊 + StreamProxyItem streamProxyByAppAndStream = streamProxyService.getStreamProxyByAppAndStream(app, streamId); + if (streamProxyByAppAndStream != null && streamProxyByAppAndStream.isEnable_disable_none_reader()) { + streamProxyService.start(app, streamId); + } } } -- Gitblit v1.8.0