From 269ad8cedbb07ca207a6f33af23085894dab4aa6 Mon Sep 17 00:00:00 2001 From: 648540858 <648540858@qq.com> Date: 星期日, 23 四月 2023 14:36:13 +0800 Subject: [PATCH] 修身目录刷新,优化公网下远程IP端口的获取 --- src/main/java/com/genersoft/iot/vmp/service/impl/StreamProxyServiceImpl.java | 74 +++++++++++++++---------------------- 1 files changed, 30 insertions(+), 44 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 8fabbda..02f4f91 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 @@ -1,32 +1,29 @@ package com.genersoft.iot.vmp.service.impl; -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; +import com.alibaba.fastjson2.JSONArray; +import com.alibaba.fastjson2.JSONObject; 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.bean.GbStream; -import com.genersoft.iot.vmp.gb28181.bean.ParentPlatform; -import com.genersoft.iot.vmp.gb28181.bean.TreeType; 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.dto.MediaItem; 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; import com.genersoft.iot.vmp.service.IGbStreamService; import com.genersoft.iot.vmp.service.IMediaServerService; import com.genersoft.iot.vmp.service.IMediaService; +import com.genersoft.iot.vmp.service.IStreamProxyService; import com.genersoft.iot.vmp.storager.IRedisCatchStorage; import com.genersoft.iot.vmp.storager.IVideoManagerStorage; import com.genersoft.iot.vmp.storager.dao.GbStreamMapper; import com.genersoft.iot.vmp.storager.dao.ParentPlatformMapper; import com.genersoft.iot.vmp.storager.dao.PlatformGbStreamMapper; import com.genersoft.iot.vmp.storager.dao.StreamProxyMapper; -import com.genersoft.iot.vmp.service.IStreamProxyService; import com.genersoft.iot.vmp.utils.DateUtil; import com.genersoft.iot.vmp.vmanager.bean.ErrorCode; -import com.genersoft.iot.vmp.vmanager.bean.WVPResult; +import com.genersoft.iot.vmp.vmanager.bean.ResourceBaceInfo; import com.github.pagehelper.PageInfo; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -36,10 +33,10 @@ import org.springframework.transaction.TransactionDefinition; import org.springframework.transaction.TransactionStatus; import org.springframework.util.ObjectUtils; -import org.springframework.util.StringUtils; -import java.net.InetAddress; -import java.util.*; +import java.util.HashMap; +import java.util.List; +import java.util.Map; /** * 瑙嗛浠g悊涓氬姟 @@ -98,8 +95,8 @@ @Override public StreamInfo save(StreamProxyItem param) { MediaServerItem mediaInfo; - if (param.getMediaServerId() == null || "auto".equals(param.getMediaServerId())){ - mediaInfo = mediaServerService.getMediaServerForMinimumLoad(); + if (ObjectUtils.isEmpty(param.getMediaServerId()) || "auto".equals(param.getMediaServerId())){ + mediaInfo = mediaServerService.getMediaServerForMinimumLoad(null); }else { mediaInfo = mediaServerService.getOne(param.getMediaServerId()); } @@ -111,7 +108,6 @@ param.getStream() ); param.setDst_url(dstUrl); StringBuffer resultMsg = new StringBuffer(); - boolean streamLive = false; param.setMediaServerId(mediaInfo.getId()); boolean saveResult; // 鏇存柊 @@ -128,7 +124,6 @@ if (param.isEnable()) { JSONObject jsonObject = addStreamProxyToZlm(param); if (jsonObject == null || jsonObject.getInteger("code") != 0) { - streamLive = false; resultMsg.append(", 浣嗘槸鍚敤澶辫触锛岃妫�鏌ユ祦鍦板潃鏄惁鍙敤"); param.setEnable(false); // 鐩存帴绉婚櫎 @@ -138,26 +133,10 @@ updateStreamProxy(param); } - }else { - streamLive = true; resultForStreamInfo = mediaService.getStreamInfoByAppAndStream( mediaInfo, param.getApp(), param.getStream(), null, null); - } - } - if ( !ObjectUtils.isEmpty(param.getPlatformGbId()) && streamLive) { - List<GbStream> gbStreams = new ArrayList<>(); - gbStreams.add(param); - if (gbStreamService.addPlatformInfo(gbStreams, param.getPlatformGbId(), param.getCatalogId())){ - return resultForStreamInfo; - }else { - resultMsg.append(", 鍏宠仈鍥芥爣骞冲彴[ " + param.getPlatformGbId() + " ]澶辫触"); - throw new ControllerException(ErrorCode.ERROR100.getCode(), resultMsg.toString()); - } - }else { - if (!streamLive) { - throw new ControllerException(ErrorCode.ERROR100.getCode(), resultMsg.toString()); } } return resultForStreamInfo; @@ -228,7 +207,7 @@ dataSourceTransactionManager.commit(transactionStatus); //鎵嬪姩鎻愪氦 result = true; }catch (Exception e) { - e.printStackTrace(); + logger.error("鏈鐞嗙殑寮傚父 ", e); dataSourceTransactionManager.rollback(transactionStatus); } return result; @@ -249,10 +228,10 @@ } if ("default".equals(param.getType())){ result = zlmresTfulUtils.addStreamProxy(mediaServerItem, param.getApp(), param.getStream(), param.getUrl(), - param.isEnable_hls(), param.isEnable_mp4(), param.getRtp_type()); + param.isEnable_audio(), param.isEnable_mp4(), param.getRtp_type()); }else if ("ffmpeg".equals(param.getType())) { result = zlmresTfulUtils.addFFmpegSource(mediaServerItem, param.getSrc_url(), param.getDst_url(), - param.getTimeout_ms() + "", param.isEnable_hls(), param.isEnable_mp4(), + param.getTimeout_ms() + "", param.isEnable_audio(), param.isEnable_mp4(), param.getFfmpeg_cmd_key()); } return result; @@ -296,16 +275,18 @@ public boolean start(String app, String stream) { boolean result = false; StreamProxyItem streamProxy = videoManagerStorager.queryStreamProxy(app, stream); - if (!streamProxy.isEnable() ) { + if (streamProxy != null && !streamProxy.isEnable() ) { JSONObject jsonObject = addStreamProxyToZlm(streamProxy); if (jsonObject == null) { return false; } - System.out.println(jsonObject); if (jsonObject.getInteger("code") == 0) { result = true; streamProxy.setEnable(true); updateStreamProxy(streamProxy); + }else { + logger.info("鍚敤浠g悊澶辫触锛� {}/{}->{}({})", app, stream, jsonObject.getString("msg"), + streamProxy.getSrc_url() == null? streamProxy.getUrl():streamProxy.getSrc_url()); } } return result; @@ -389,18 +370,18 @@ String type = "PULL"; // 鍙戦�乺edis娑堟伅 - List<MediaItem> mediaItems = redisCatchStorage.getStreams(mediaServerId, type); - if (mediaItems.size() > 0) { - for (MediaItem mediaItem : mediaItems) { + List<OnStreamChangedHookParam> onStreamChangedHookParams = redisCatchStorage.getStreams(mediaServerId, type); + if (onStreamChangedHookParams.size() > 0) { + for (OnStreamChangedHookParam onStreamChangedHookParam : onStreamChangedHookParams) { JSONObject jsonObject = new JSONObject(); jsonObject.put("serverId", userSetting.getServerId()); - jsonObject.put("app", mediaItem.getApp()); - jsonObject.put("stream", mediaItem.getStream()); + jsonObject.put("app", onStreamChangedHookParam.getApp()); + jsonObject.put("stream", onStreamChangedHookParam.getStream()); jsonObject.put("register", false); jsonObject.put("mediaServerId", mediaServerId); redisCatchStorage.sendStreamChangeMsg(type, jsonObject); // 绉婚櫎redis鍐呮祦鐨勪俊鎭� - redisCatchStorage.removeStream(mediaServerId, type, mediaItem.getApp(), mediaItem.getStream()); + redisCatchStorage.removeStream(mediaServerId, type, onStreamChangedHookParam.getApp(), onStreamChangedHookParam.getStream()); } } } @@ -418,7 +399,7 @@ private void syncPullStream(String mediaServerId){ MediaServerItem mediaServer = mediaServerService.getOne(mediaServerId); if (mediaServer != null) { - List<MediaItem> allPullStream = redisCatchStorage.getStreams(mediaServerId, "PULL"); + List<OnStreamChangedHookParam> allPullStream = redisCatchStorage.getStreams(mediaServerId, "PULL"); if (allPullStream.size() > 0) { zlmresTfulUtils.getMediaList(mediaServer, jsonObject->{ Map<String, StreamInfo> stringStreamInfoMap = new HashMap<>(); @@ -427,7 +408,7 @@ if(data != null && data.size() > 0) { for (int i = 0; i < data.size(); i++) { JSONObject streamJSONObj = data.getJSONObject(i); - if ("rtmp".equals(streamJSONObj.getString("schema"))) { + if ("rtsp".equals(streamJSONObj.getString("schema"))) { StreamInfo streamInfo = new StreamInfo(); String app = streamJSONObj.getString("app"); String stream = streamJSONObj.getString("stream"); @@ -455,4 +436,9 @@ } } + + @Override + public ResourceBaceInfo getOverview() { + return streamProxyMapper.getOverview(); + } } -- Gitblit v1.8.0