From 150e7a31997f590eba879c3515f21821e9e68eb6 Mon Sep 17 00:00:00 2001 From: 648540858 <648540858@qq.com> Date: 星期五, 22 三月 2024 16:45:18 +0800 Subject: [PATCH] 调整节点管理代码结构 --- src/main/java/com/genersoft/iot/vmp/service/impl/StreamProxyServiceImpl.java | 189 ++++++++++++++++++---------------------------- 1 files changed, 74 insertions(+), 115 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 4a44093..ea824ff 100755 --- a/src/main/java/com/genersoft/iot/vmp/service/impl/StreamProxyServiceImpl.java +++ b/src/main/java/com/genersoft/iot/vmp/service/impl/StreamProxyServiceImpl.java @@ -1,6 +1,5 @@ package com.genersoft.iot.vmp.service.impl; -import com.alibaba.fastjson2.JSONArray; import com.alibaba.fastjson2.JSONObject; import com.baomidou.dynamic.datasource.annotation.DS; import com.genersoft.iot.vmp.common.GeneralCallback; @@ -9,7 +8,8 @@ import com.genersoft.iot.vmp.conf.UserSetting; import com.genersoft.iot.vmp.conf.exception.ControllerException; import com.genersoft.iot.vmp.gb28181.event.subscribe.catalog.CatalogEvent; -import com.genersoft.iot.vmp.media.zlm.ZLMRESTfulUtils; +import com.genersoft.iot.vmp.media.bean.MediaInfo; +import com.genersoft.iot.vmp.media.service.IMediaServerService; import com.genersoft.iot.vmp.media.zlm.ZLMServerFactory; import com.genersoft.iot.vmp.media.zlm.ZlmHttpHookSubscribe; import com.genersoft.iot.vmp.media.zlm.dto.HookSubscribeFactory; @@ -18,7 +18,6 @@ import com.genersoft.iot.vmp.media.zlm.dto.StreamProxyItem; import com.genersoft.iot.vmp.media.zlm.dto.hook.OnStreamChangedHookParam; import com.genersoft.iot.vmp.service.IGbStreamService; -import com.genersoft.iot.vmp.media.service.IMediaServerService; import com.genersoft.iot.vmp.service.IMediaService; import com.genersoft.iot.vmp.service.IStreamProxyService; import com.genersoft.iot.vmp.storager.IRedisCatchStorage; @@ -29,6 +28,7 @@ import com.genersoft.iot.vmp.utils.DateUtil; import com.genersoft.iot.vmp.vmanager.bean.ErrorCode; import com.genersoft.iot.vmp.vmanager.bean.ResourceBaseInfo; +import com.genersoft.iot.vmp.vmanager.bean.WVPResult; import com.github.pagehelper.PageInfo; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -62,9 +62,6 @@ @Autowired private IMediaService mediaService; - - @Autowired - private ZLMRESTfulUtils zlmresTfulUtils; @Autowired private ZLMServerFactory zlmServerFactory; @@ -108,28 +105,21 @@ @Override public void save(StreamProxyItem param, GeneralCallback<StreamInfo> callback) { - MediaServer mediaInfo; + MediaServer mediaServer; if (ObjectUtils.isEmpty(param.getMediaServerId()) || "auto".equals(param.getMediaServerId())){ - mediaInfo = mediaServerService.getMediaServerForMinimumLoad(null); + mediaServer = mediaServerService.getMediaServerForMinimumLoad(null); }else { - mediaInfo = mediaServerService.getOne(param.getMediaServerId()); + mediaServer = mediaServerService.getOne(param.getMediaServerId()); } - if (mediaInfo == null) { + if (mediaServer == null) { logger.warn("淇濆瓨浠g悊鏈壘鍒板湪绾跨殑ZLM..."); throw new ControllerException(ErrorCode.ERROR100.getCode(), "淇濆瓨浠g悊鏈壘鍒板湪绾跨殑ZLM"); } String dstUrl; if ("ffmpeg".equalsIgnoreCase(param.getType())) { - JSONObject jsonObject = zlmresTfulUtils.getMediaServerConfig(mediaInfo); - if (jsonObject.getInteger("code") != 0) { - throw new ControllerException(ErrorCode.ERROR100.getCode(), "鑾峰彇娴佸獟浣撻厤缃け璐�"); - } - JSONArray dataArray = jsonObject.getJSONArray("data"); - JSONObject mediaServerConfig = dataArray.getJSONObject(0); - if (ObjectUtils.isEmpty(param.getFfmpegCmdKey())) { - param.setFfmpegCmdKey("ffmpeg.cmd"); - } - String ffmpegCmd = mediaServerConfig.getString(param.getFfmpegCmdKey()); + + String ffmpegCmd = mediaServerService.getFfmpegCmd(mediaServer, param.getFfmpegCmdKey()); + if (ffmpegCmd == null) { throw new ControllerException(ErrorCode.ERROR100.getCode(), "ffmpeg鎷夋祦浠g悊鏃犳硶鑾峰彇ffmpeg cmd"); } @@ -140,25 +130,25 @@ int port; String schemaForUri; if (schema.equalsIgnoreCase("rtsp")) { - port = mediaInfo.getRtspPort(); + port = mediaServer.getRtspPort(); schemaForUri = schema; }else if (schema.equalsIgnoreCase("flv")) { - port = mediaInfo.getRtmpPort(); + port = mediaServer.getRtmpPort(); schemaForUri = schema; }else { - port = mediaInfo.getRtmpPort(); + port = mediaServer.getRtmpPort(); schemaForUri = schema; } dstUrl = String.format("%s://%s:%s/%s/%s", schemaForUri, "127.0.0.1", port, param.getApp(), param.getStream()); }else { - dstUrl = String.format("rtsp://%s:%s/%s/%s", "127.0.0.1", mediaInfo.getRtspPort(), param.getApp(), + dstUrl = String.format("rtsp://%s:%s/%s/%s", "127.0.0.1", mediaServer.getRtspPort(), param.getApp(), param.getStream()); } param.setDstUrl(dstUrl); logger.info("[鎷夋祦浠g悊] 杈撳嚭鍦板潃涓猴細{}", dstUrl); - param.setMediaServerId(mediaInfo.getId()); + param.setMediaServerId(mediaServer.getId()); boolean saveResult; // 鏇存柊 if (videoManagerStorager.queryStreamProxy(param.getApp(), param.getStream()) != null) { @@ -170,17 +160,17 @@ callback.run(ErrorCode.ERROR100.getCode(), "淇濆瓨澶辫触", null); return; } - HookSubscribeForStreamChange hookSubscribeForStreamChange = HookSubscribeFactory.on_stream_changed(param.getApp(), param.getStream(), true, "rtsp", mediaInfo.getId()); + HookSubscribeForStreamChange hookSubscribeForStreamChange = HookSubscribeFactory.on_stream_changed(param.getApp(), param.getStream(), true, "rtsp", mediaServer.getId()); hookSubscribe.addSubscribe(hookSubscribeForStreamChange, (mediaServerItem, response) -> { StreamInfo streamInfo = mediaService.getStreamInfoByAppAndStream( - mediaInfo, param.getApp(), param.getStream(), null, null); + mediaServer, param.getApp(), param.getStream(), null, null); callback.run(ErrorCode.SUCCESS.getCode(), ErrorCode.SUCCESS.getMsg(), streamInfo); }); if (param.isEnable()) { String talkKey = UUID.randomUUID().toString(); String delayTalkKey = UUID.randomUUID().toString(); dynamicTask.startDelay(delayTalkKey, ()->{ - StreamInfo streamInfo = mediaService.getStreamInfoByAppAndStreamWithCheck(param.getApp(), param.getStream(), mediaInfo.getId(), false); + StreamInfo streamInfo = mediaService.getStreamInfoByAppAndStreamWithCheck(param.getApp(), param.getStream(), mediaServer.getId(), false); if (streamInfo != null) { callback.run(ErrorCode.SUCCESS.getCode(), ErrorCode.SUCCESS.getMsg(), streamInfo); }else { @@ -188,12 +178,12 @@ callback.run(ErrorCode.ERROR100.getCode(), "瓒呮椂", null); } }, 7000); - JSONObject jsonObject = addStreamProxyToZlm(param); - if (jsonObject != null && jsonObject.getInteger("code") == 0) { + WVPResult<String> result = addStreamProxyToZlm(param); + if (result != null && result.getCode() == 0) { hookSubscribe.removeSubscribe(hookSubscribeForStreamChange); dynamicTask.stop(talkKey); StreamInfo streamInfo = mediaService.getStreamInfoByAppAndStream( - mediaInfo, param.getApp(), param.getStream(), null, null); + mediaServer, param.getApp(), param.getStream(), null, null); callback.run(ErrorCode.SUCCESS.getCode(), ErrorCode.SUCCESS.getMsg(), streamInfo); }else { param.setEnable(false); @@ -203,16 +193,16 @@ }else { updateStreamProxy(param); } - if (jsonObject == null){ + if (result == null){ callback.run(ErrorCode.ERROR100.getCode(), "璁板綍宸蹭繚瀛橈紝鍚敤澶辫触", null); }else { - callback.run(ErrorCode.ERROR100.getCode(), jsonObject.getString("msg"), null); + callback.run(ErrorCode.ERROR100.getCode(), result.getMsg(), null); } } } else{ StreamInfo streamInfo = mediaService.getStreamInfoByAppAndStream( - mediaInfo, param.getApp(), param.getStream(), null, null); + mediaServer, param.getApp(), param.getStream(), null, null); callback.run(ErrorCode.SUCCESS.getCode(), ErrorCode.SUCCESS.getMsg(), streamInfo); } } @@ -308,40 +298,36 @@ } @Override - public JSONObject addStreamProxyToZlm(StreamProxyItem param) { - JSONObject result = null; - MediaServer mediaServerItem = null; + public WVPResult<String> addStreamProxyToZlm(StreamProxyItem param) { + WVPResult<String> result = null; + MediaServer mediaServer = null; if (param.getMediaServerId() == null) { logger.warn("娣诲姞浠g悊鏃禡ediaServerId 涓簄ull"); return null; }else { - mediaServerItem = mediaServerService.getOne(param.getMediaServerId()); + mediaServer = mediaServerService.getOne(param.getMediaServerId()); } - if (mediaServerItem == null) { + if (mediaServer == null) { return null; } - if (zlmServerFactory.isStreamReady(mediaServerItem, param.getApp(), param.getStream())) { - zlmresTfulUtils.closeStreams(mediaServerItem, param.getApp(), param.getStream()); + if (zlmServerFactory.isStreamReady(mediaServer, param.getApp(), param.getStream())) { + mediaServerService.closeStreams(mediaServer, param.getApp(), param.getStream()); } + String msgResult; if ("ffmpeg".equalsIgnoreCase(param.getType())){ - result = zlmresTfulUtils.addFFmpegSource(mediaServerItem, param.getSrcUrl().trim(), param.getDstUrl(), - param.getTimeoutMs() + "", param.isEnableAudio(), param.isEnableMp4(), + result = mediaServerService.addFFmpegSource(mediaServer, param.getSrcUrl().trim(), param.getDstUrl(), + param.getTimeoutMs(), param.isEnableAudio(), param.isEnableMp4(), param.getFfmpegCmdKey()); }else { - result = zlmresTfulUtils.addStreamProxy(mediaServerItem, param.getApp(), param.getStream(), param.getUrl().trim(), + result = mediaServerService.addStreamProxy(mediaServer, param.getApp(), param.getStream(), param.getUrl().trim(), param.isEnableAudio(), param.isEnableMp4(), param.getRtpType()); } System.out.println("addStreamProxyToZlm===="); System.out.println(result); - if (result != null && result.getInteger("code") == 0) { - JSONObject data = result.getJSONObject("data"); - if (data == null) { - logger.warn("[鑾峰彇鎷夋祦浠g悊鐨勭粨鏋滄暟鎹瓺ata] 澶辫触锛� {}", result ); - return result; - } - String key = data.getString("key"); + if (result != null && result.getCode() == 0) { + String key = result.getData(); if (key == null) { - logger.warn("[鑾峰彇鎷夋祦浠g悊鐨勭粨鏋滄暟鎹瓺ata涓殑KEY] 澶辫触锛� {}", result ); + logger.warn("[鑾峰彇鎷夋祦浠g悊鐨勭粨鏋滄暟鎹瓺ata] 澶辫触锛� {}", result ); return result; } param.setStreamKey(key); @@ -351,16 +337,16 @@ } @Override - public JSONObject removeStreamProxyFromZlm(StreamProxyItem param) { + public Boolean removeStreamProxyFromZlm(StreamProxyItem param) { if (param ==null) { return null; } - MediaServer mediaServerItem = mediaServerService.getOne(param.getMediaServerId()); - JSONObject result = null; + MediaServer mediaServer = mediaServerService.getOne(param.getMediaServerId()); + Boolean result = false; if ("ffmpeg".equalsIgnoreCase(param.getType())){ - result = zlmresTfulUtils.delFFmpegSource(mediaServerItem, param.getStreamKey()); + result = mediaServerService.delFFmpegSource(mediaServer, param.getStreamKey()); }else { - result = zlmresTfulUtils.delStreamProxy(mediaServerItem, param.getStreamKey()); + result = mediaServerService.delStreamProxy(mediaServer, param.getStreamKey()); } return result; } @@ -381,8 +367,8 @@ gbStreamMapper.del(app, stream); videoManagerStorager.deleteStreamProxy(app, stream); redisCatchStorage.removeStream(streamProxyItem.getMediaServerId(), "PULL", app, stream); - JSONObject jsonObject = removeStreamProxyFromZlm(streamProxyItem); - if (jsonObject != null && jsonObject.getInteger("code") == 0) { + Boolean result = removeStreamProxyFromZlm(streamProxyItem); + if (result != null && result) { logger.info("[绉婚櫎浠g悊]锛� 浠g悊锛� {}/{}, 浠巣lm绉婚櫎鎴愬姛", app, stream); }else { logger.info("[绉婚櫎浠g悊]锛� 浠g悊锛� {}/{}, 浠巣lm绉婚櫎澶辫触", app, stream); @@ -395,16 +381,16 @@ boolean result = false; StreamProxyItem streamProxy = videoManagerStorager.queryStreamProxy(app, stream); if (streamProxy != null && !streamProxy.isEnable() ) { - JSONObject jsonObject = addStreamProxyToZlm(streamProxy); - if (jsonObject == null) { + WVPResult<String> wvpResult = addStreamProxyToZlm(streamProxy); + if (wvpResult == null) { return false; } - if (jsonObject.getInteger("code") == 0) { + if (wvpResult.getCode() == 0) { result = true; streamProxy.setEnable(true); updateStreamProxy(streamProxy); }else { - logger.info("鍚敤浠g悊澶辫触锛� {}/{}->{}({})", app, stream, jsonObject.getString("msg"), + logger.info("鍚敤浠g悊澶辫触锛� {}/{}->{}({})", app, stream, wvpResult.getMsg(), streamProxy.getSrcUrl() == null? streamProxy.getUrl():streamProxy.getSrcUrl()); } } else if (streamProxy != null && streamProxy.isEnable()) { @@ -418,8 +404,8 @@ boolean result = false; StreamProxyItem streamProxyDto = videoManagerStorager.queryStreamProxy(app, stream); if (streamProxyDto != null && streamProxyDto.isEnable()) { - JSONObject jsonObject = removeStreamProxyFromZlm(streamProxyDto); - if (jsonObject != null && jsonObject.getInteger("code") == 0) { + Boolean removed = removeStreamProxyFromZlm(streamProxyDto); + if (removed != null && removed) { streamProxyDto.setEnable(false); result = updateStreamProxy(streamProxyDto); } @@ -428,20 +414,8 @@ } @Override - public JSONObject getFFmpegCMDs(MediaServer mediaServerItem) { - JSONObject result = new JSONObject(); - JSONObject mediaServerConfigResuly = zlmresTfulUtils.getMediaServerConfig(mediaServerItem); - if (mediaServerConfigResuly != null && mediaServerConfigResuly.getInteger("code") == 0 - && mediaServerConfigResuly.getJSONArray("data").size() > 0){ - JSONObject mediaServerConfig = mediaServerConfigResuly.getJSONArray("data").getJSONObject(0); - - for (String key : mediaServerConfig.keySet()) { - if (key.startsWith("ffmpeg.cmd")){ - result.put(key, mediaServerConfig.getString(key)); - } - } - } - return result; + public Map<String, String> getFFmpegCMDs(MediaServer mediaServer) { + return mediaServerService.getFFmpegCMDs(mediaServer); } @@ -467,8 +441,8 @@ mediaServerId, true); for (StreamProxyItem streamProxyDto : streamProxyListForEnable) { logger.info("鎭㈠娴佷唬鐞嗭紝" + streamProxyDto.getApp() + "/" + streamProxyDto.getStream()); - JSONObject jsonObject = addStreamProxyToZlm(streamProxyDto); - if (jsonObject == null) { + WVPResult<String> wvpResult = addStreamProxyToZlm(streamProxyDto); + if (wvpResult == null) { // 璁剧疆涓虹绾� logger.info("鎭㈠娴佷唬鐞嗗け璐�" + streamProxyDto.getApp() + "/" + streamProxyDto.getStream()); updateStatus(false, streamProxyDto.getApp(), streamProxyDto.getStream()); @@ -521,41 +495,27 @@ MediaServer mediaServer = mediaServerService.getOne(mediaServerId); if (mediaServer != null) { List<OnStreamChangedHookParam> allPullStream = redisCatchStorage.getStreams(mediaServerId, "PULL"); - if (allPullStream.size() > 0) { - zlmresTfulUtils.getMediaList(mediaServer, jsonObject->{ - Map<String, StreamInfo> stringStreamInfoMap = new HashMap<>(); - if (jsonObject.getInteger("code") == 0) { - JSONArray data = jsonObject.getJSONArray("data"); - if(data != null && data.size() > 0) { - for (int i = 0; i < data.size(); i++) { - JSONObject streamJSONObj = data.getJSONObject(i); - if ("rtsp".equals(streamJSONObj.getString("schema"))) { - StreamInfo streamInfo = new StreamInfo(); - String app = streamJSONObj.getString("app"); - String stream = streamJSONObj.getString("stream"); - streamInfo.setApp(app); - streamInfo.setStream(stream); - stringStreamInfoMap.put(app+stream, streamInfo); - } - } + if (!allPullStream.isEmpty()) { + List<StreamInfo> mediaList = mediaServerService.getMediaList(mediaServer, null, null, null); + Map<String, StreamInfo> stringStreamInfoMap = new HashMap<>(); + if (mediaList != null && !mediaList.isEmpty()) { + for (StreamInfo streamInfo : mediaList) { + stringStreamInfoMap.put(streamInfo.getApp() + streamInfo.getStream(), streamInfo); + } + } + if (stringStreamInfoMap.isEmpty()) { + redisCatchStorage.removeStream(mediaServerId, "PULL"); + }else { + for (String key : stringStreamInfoMap.keySet()) { + StreamInfo streamInfo = stringStreamInfoMap.get(key); + if (stringStreamInfoMap.get(streamInfo.getApp() + streamInfo.getStream()) == null) { + redisCatchStorage.removeStream(mediaServerId, "PULL", streamInfo.getApp(), + streamInfo.getStream()); } } - if (stringStreamInfoMap.size() == 0) { - redisCatchStorage.removeStream(mediaServerId, "PULL"); - }else { - for (String key : stringStreamInfoMap.keySet()) { - StreamInfo streamInfo = stringStreamInfoMap.get(key); - if (stringStreamInfoMap.get(streamInfo.getApp() + streamInfo.getStream()) == null) { - redisCatchStorage.removeStream(mediaServerId, "PULL", streamInfo.getApp(), - streamInfo.getStream()); - } - } - } - }); + } } - } - } @Override @@ -589,13 +549,12 @@ MediaServer mediaServerItem = serverItemMap.get(streamProxyItem.getMediaServerId()); - // TODO 鏀寔鍏朵粬 schema - JSONObject mediaInfo = zlmresTfulUtils.isMediaOnline(mediaServerItem, streamProxyItem.getApp(), streamProxyItem.getStream(), "rtsp"); + MediaInfo mediaInfo = mediaServerService.getMediaInfo(mediaServerItem, streamProxyItem.getApp(), streamProxyItem.getStream()); if (mediaInfo == null){ streamProxyItem.setStatus(false); } else { - if (mediaInfo.getInteger("code") == 0 && mediaInfo.getBoolean("online")) { + if (mediaInfo.getOnline() != null && mediaInfo.getOnline()) { streamProxyItem.setStatus(true); } else { streamProxyItem.setStatus(false); -- Gitblit v1.8.0