From 534be3f5809f430cb46cb0fcbba99d3d425f2324 Mon Sep 17 00:00:00 2001 From: 648540858 <648540858@qq.com> Date: 星期三, 07 六月 2023 20:58:35 +0800 Subject: [PATCH] 支持redis消息强制关闭流 --- src/main/java/com/genersoft/iot/vmp/service/impl/StreamProxyServiceImpl.java | 74 ++++++++++++++++++++++++------------- 1 files changed, 48 insertions(+), 26 deletions(-) diff --git a/src/main/java/com/genersoft/iot/vmp/service/impl/StreamProxyServiceImpl.java b/src/main/java/com/genersoft/iot/vmp/service/impl/StreamProxyServiceImpl.java index ea0fd50..195f035 100644 --- a/src/main/java/com/genersoft/iot/vmp/service/impl/StreamProxyServiceImpl.java +++ b/src/main/java/com/genersoft/iot/vmp/service/impl/StreamProxyServiceImpl.java @@ -2,12 +2,16 @@ import com.alibaba.fastjson2.JSONArray; import com.alibaba.fastjson2.JSONObject; +import com.genersoft.iot.vmp.common.GeneralCallback; import com.genersoft.iot.vmp.common.StreamInfo; import com.genersoft.iot.vmp.conf.UserSetting; import com.genersoft.iot.vmp.conf.exception.ControllerException; import com.genersoft.iot.vmp.gb28181.event.EventPublisher; import com.genersoft.iot.vmp.gb28181.event.subscribe.catalog.CatalogEvent; import com.genersoft.iot.vmp.media.zlm.ZLMRESTfulUtils; +import com.genersoft.iot.vmp.media.zlm.ZlmHttpHookSubscribe; +import com.genersoft.iot.vmp.media.zlm.dto.HookSubscribeFactory; +import com.genersoft.iot.vmp.media.zlm.dto.HookSubscribeForStreamChange; import com.genersoft.iot.vmp.media.zlm.dto.MediaServerItem; import com.genersoft.iot.vmp.media.zlm.dto.StreamProxyItem; import com.genersoft.iot.vmp.media.zlm.dto.hook.OnStreamChangedHookParam; @@ -23,7 +27,7 @@ import com.genersoft.iot.vmp.storager.dao.StreamProxyMapper; import com.genersoft.iot.vmp.utils.DateUtil; import com.genersoft.iot.vmp.vmanager.bean.ErrorCode; -import com.genersoft.iot.vmp.vmanager.bean.ResourceBaceInfo; +import com.genersoft.iot.vmp.vmanager.bean.ResourceBaseInfo; import com.github.pagehelper.PageInfo; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -86,6 +90,9 @@ private IMediaServerService mediaServerService; @Autowired + private ZlmHttpHookSubscribe hookSubscribe; + + @Autowired DataSourceTransactionManager dataSourceTransactionManager; @Autowired @@ -93,7 +100,7 @@ @Override - public StreamInfo save(StreamProxyItem param) { + public void save(StreamProxyItem param, GeneralCallback<StreamInfo> callback) { MediaServerItem mediaInfo; if (ObjectUtils.isEmpty(param.getMediaServerId()) || "auto".equals(param.getMediaServerId())){ mediaInfo = mediaServerService.getMediaServerForMinimumLoad(null); @@ -106,8 +113,7 @@ } String dstUrl = String.format("rtmp://%s:%s/%s/%s", "127.0.0.1", mediaInfo.getRtmpPort(), param.getApp(), param.getStream() ); - param.setDst_url(dstUrl); - StringBuffer resultMsg = new StringBuffer(); + param.setDstUrl(dstUrl); param.setMediaServerId(mediaInfo.getId()); boolean saveResult; // 鏇存柊 @@ -117,29 +123,41 @@ saveResult = addStreamProxy(param); } if (!saveResult) { - throw new ControllerException(ErrorCode.ERROR100.getCode(),"淇濆瓨澶辫触"); + callback.run(ErrorCode.ERROR100.getCode(), "淇濆瓨澶辫触", null); + return; } - StreamInfo resultForStreamInfo = null; - resultMsg.append("淇濆瓨鎴愬姛"); + + HookSubscribeForStreamChange hookSubscribeForStreamChange = HookSubscribeFactory.on_stream_changed(param.getApp(), param.getStream(), true, "rtsp", mediaInfo.getId()); + hookSubscribe.addSubscribe(hookSubscribeForStreamChange, (mediaServerItem, response) -> { + StreamInfo streamInfo = mediaService.getStreamInfoByAppAndStream( + mediaInfo, param.getApp(), param.getStream(), null, null); + callback.run(ErrorCode.SUCCESS.getCode(), ErrorCode.SUCCESS.getMsg(), streamInfo); + }); + if (param.isEnable()) { JSONObject jsonObject = addStreamProxyToZlm(param); - if (jsonObject == null || jsonObject.getInteger("code") != 0) { - resultMsg.append(", 浣嗘槸鍚敤澶辫触锛岃妫�鏌ユ祦鍦板潃鏄惁鍙敤"); + if (jsonObject != null && jsonObject.getInteger("code") == 0) { + hookSubscribe.removeSubscribe(hookSubscribeForStreamChange); + StreamInfo streamInfo = mediaService.getStreamInfoByAppAndStream( + mediaInfo, param.getApp(), param.getStream(), null, null); + callback.run(ErrorCode.SUCCESS.getCode(), ErrorCode.SUCCESS.getMsg(), streamInfo); + }else { param.setEnable(false); // 鐩存帴绉婚櫎 - if (param.isEnable_remove_none_reader()) { + if (param.isEnableRemoveNoneReader()) { del(param.getApp(), param.getStream()); }else { updateStreamProxy(param); } - - }else { - resultForStreamInfo = mediaService.getStreamInfoByAppAndStream( - mediaInfo, param.getApp(), param.getStream(), null, null); - + if (jsonObject == null){ + callback.run(ErrorCode.ERROR100.getCode(), "璁板綍宸蹭繚瀛橈紝鍚敤澶辫触", null); + return; + }else { + callback.run(ErrorCode.ERROR100.getCode(), jsonObject.getString("msg"), null); + return; + } } } - return resultForStreamInfo; } /** @@ -207,7 +225,7 @@ dataSourceTransactionManager.commit(transactionStatus); //鎵嬪姩鎻愪氦 result = true; }catch (Exception e) { - e.printStackTrace(); + logger.error("鏈鐞嗙殑寮傚父 ", e); dataSourceTransactionManager.rollback(transactionStatus); } return result; @@ -228,11 +246,11 @@ } if ("default".equals(param.getType())){ result = zlmresTfulUtils.addStreamProxy(mediaServerItem, param.getApp(), param.getStream(), param.getUrl(), - param.isEnable_audio(), param.isEnable_mp4(), param.getRtp_type()); + param.isEnableAudio(), param.isEnableMp4(), param.getRtpType()); }else if ("ffmpeg".equals(param.getType())) { - result = zlmresTfulUtils.addFFmpegSource(mediaServerItem, param.getSrc_url(), param.getDst_url(), - param.getTimeout_ms() + "", param.isEnable_audio(), param.isEnable_mp4(), - param.getFfmpeg_cmd_key()); + result = zlmresTfulUtils.addFFmpegSource(mediaServerItem, param.getSrcUrl(), param.getDstUrl(), + param.getTimeoutMs() + "", param.isEnableAudio(), param.isEnableMp4(), + param.getFfmpegCmdKey()); } return result; } @@ -286,7 +304,7 @@ updateStreamProxy(streamProxy); }else { logger.info("鍚敤浠g悊澶辫触锛� {}/{}->{}({})", app, stream, jsonObject.getString("msg"), - streamProxy.getSrc_url() == null? streamProxy.getUrl():streamProxy.getSrc_url()); + streamProxy.getSrcUrl() == null? streamProxy.getUrl():streamProxy.getSrcUrl()); } } return result; @@ -332,7 +350,7 @@ @Override public void zlmServerOnline(String mediaServerId) { // 绉婚櫎寮�鍚簡鏃犱汉瑙傜湅鑷姩绉婚櫎鐨勬祦 - List<StreamProxyItem> streamProxyItemList = streamProxyMapper.selecAutoRemoveItemByMediaServerId(mediaServerId); + List<StreamProxyItem> streamProxyItemList = streamProxyMapper.selectAutoRemoveItemByMediaServerId(mediaServerId); if (streamProxyItemList.size() > 0) { gbStreamMapper.batchDel(streamProxyItemList); } @@ -360,7 +378,7 @@ @Override public void zlmServerOffline(String mediaServerId) { // 绉婚櫎寮�鍚簡鏃犱汉瑙傜湅鑷姩绉婚櫎鐨勬祦 - List<StreamProxyItem> streamProxyItemList = streamProxyMapper.selecAutoRemoveItemByMediaServerId(mediaServerId); + List<StreamProxyItem> streamProxyItemList = streamProxyMapper.selectAutoRemoveItemByMediaServerId(mediaServerId); if (streamProxyItemList.size() > 0) { gbStreamMapper.batchDel(streamProxyItemList); } @@ -438,7 +456,11 @@ } @Override - public ResourceBaceInfo getOverview() { - return streamProxyMapper.getOverview(); + public ResourceBaseInfo getOverview() { + + int total = streamProxyMapper.getAllCount(); + int online = streamProxyMapper.getOnline(); + + return new ResourceBaseInfo(total, online); } } -- Gitblit v1.8.0