From f7e39141db04ae209f436f359e781cea6a978051 Mon Sep 17 00:00:00 2001 From: 648540858 <456panlinlin> Date: 星期三, 06 四月 2022 11:07:42 +0800 Subject: [PATCH] 修复重启服务后拉流代理回复失败的问题 --- src/main/java/com/genersoft/iot/vmp/storager/IVideoManagerStorage.java | 3 - src/main/java/com/genersoft/iot/vmp/storager/impl/VideoManagerStorageImpl.java | 4 +- src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/media/MediaController.java | 3 - src/main/java/com/genersoft/iot/vmp/storager/dao/StreamProxyMapper.java | 4 +- src/main/java/com/genersoft/iot/vmp/service/impl/StreamProxyServiceImpl.java | 47 +++++++++++++++++++++++ src/main/java/com/genersoft/iot/vmp/gb28181/event/subscribe/catalog/CatalogEventLister.java | 1 6 files changed, 52 insertions(+), 10 deletions(-) diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/event/subscribe/catalog/CatalogEventLister.java b/src/main/java/com/genersoft/iot/vmp/gb28181/event/subscribe/catalog/CatalogEventLister.java index 95578ef..f9546f0 100644 --- a/src/main/java/com/genersoft/iot/vmp/gb28181/event/subscribe/catalog/CatalogEventLister.java +++ b/src/main/java/com/genersoft/iot/vmp/gb28181/event/subscribe/catalog/CatalogEventLister.java @@ -175,3 +175,4 @@ } } } + \ No newline at end of file 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 aca3082..b30a5b2 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,5 +1,6 @@ package com.genersoft.iot.vmp.service.impl; +import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.genersoft.iot.vmp.common.StreamInfo; import com.genersoft.iot.vmp.conf.SipConfig; @@ -285,9 +286,12 @@ } streamProxyMapper.deleteAutoRemoveItemByMediaServerId(mediaServerId); + // 绉婚櫎鎷夋祦浠g悊鐢熸垚鐨勬祦淇℃伅 +// syncPullStream(mediaServerId); + // 鎭㈠娴佷唬鐞�, 鍙煡鎵捐繖涓繖涓祦濯掍綋 List<StreamProxyItem> streamProxyListForEnable = storager.getStreamProxyListForEnableInMediaServer( - mediaServerId, true, false); + mediaServerId, true); for (StreamProxyItem streamProxyDto : streamProxyListForEnable) { logger.info("鎭㈠娴佷唬鐞嗭紝" + streamProxyDto.getApp() + "/" + streamProxyDto.getStream()); JSONObject jsonObject = addStreamProxyToZlm(streamProxyDto); @@ -339,4 +343,45 @@ public int updateStatus(boolean status, String app, String stream) { return streamProxyMapper.updateStatus(status, app, stream); } + + private void syncPullStream(String mediaServerId){ + MediaServerItem mediaServer = mediaServerService.getOne(mediaServerId); + if (mediaServer != null) { + List<MediaItem> 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 ("rtmp".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 (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()); + } + } + } + }); + } + + } + + } } diff --git a/src/main/java/com/genersoft/iot/vmp/storager/IVideoManagerStorage.java b/src/main/java/com/genersoft/iot/vmp/storager/IVideoManagerStorage.java index 11d8b84..9d12eb5 100644 --- a/src/main/java/com/genersoft/iot/vmp/storager/IVideoManagerStorage.java +++ b/src/main/java/com/genersoft/iot/vmp/storager/IVideoManagerStorage.java @@ -401,10 +401,9 @@ * 鏍规嵁濯掍綋ID鑾峰彇鍚敤/涓嶅惎鐢ㄧ殑浠g悊鍒楄〃 * @param id 濯掍綋ID * @param enable 鍚敤/涓嶅惎鐢� - * @param status 鐘舵�� * @return */ - List<StreamProxyItem> getStreamProxyListForEnableInMediaServer(String id, boolean enable, boolean status); + List<StreamProxyItem> getStreamProxyListForEnableInMediaServer(String id, boolean enable); /** * 鏍规嵁閫氶亾ID鑾峰彇鍏舵墍鍦ㄨ澶� diff --git a/src/main/java/com/genersoft/iot/vmp/storager/dao/StreamProxyMapper.java b/src/main/java/com/genersoft/iot/vmp/storager/dao/StreamProxyMapper.java index 2447ad9..29c0b01 100644 --- a/src/main/java/com/genersoft/iot/vmp/storager/dao/StreamProxyMapper.java +++ b/src/main/java/com/genersoft/iot/vmp/storager/dao/StreamProxyMapper.java @@ -51,8 +51,8 @@ @Select("SELECT st.*, pgs.gbId, pgs.name, pgs.longitude, pgs.latitude FROM stream_proxy st " + "LEFT JOIN gb_stream pgs on st.app = pgs.app AND st.stream = pgs.stream " + - "WHERE st.enable=${enable} and st.status=${status} and st.mediaServerId = '${id}' order by st.createTime desc") - List<StreamProxyItem> selectForEnableInMediaServer(String id, boolean enable, boolean status); + "WHERE st.enable=${enable} and st.mediaServerId = #{id} order by st.createTime desc") + List<StreamProxyItem> selectForEnableInMediaServer(String id, boolean enable); @Select("SELECT st.*, pgs.gbId, pgs.name, pgs.longitude, pgs.latitude FROM stream_proxy st " + "LEFT JOIN gb_stream pgs on st.app = pgs.app AND st.stream = pgs.stream " + diff --git a/src/main/java/com/genersoft/iot/vmp/storager/impl/VideoManagerStorageImpl.java b/src/main/java/com/genersoft/iot/vmp/storager/impl/VideoManagerStorageImpl.java index 1665573..439ecd8 100644 --- a/src/main/java/com/genersoft/iot/vmp/storager/impl/VideoManagerStorageImpl.java +++ b/src/main/java/com/genersoft/iot/vmp/storager/impl/VideoManagerStorageImpl.java @@ -911,8 +911,8 @@ } @Override - public List<StreamProxyItem> getStreamProxyListForEnableInMediaServer(String id, boolean enable, boolean status) { - return streamProxyMapper.selectForEnableInMediaServer(id, enable, status); + public List<StreamProxyItem> getStreamProxyListForEnableInMediaServer(String id, boolean enable) { + return streamProxyMapper.selectForEnableInMediaServer(id, enable); } diff --git a/src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/media/MediaController.java b/src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/media/MediaController.java index a2619fa..d4995a0 100644 --- a/src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/media/MediaController.java +++ b/src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/media/MediaController.java @@ -65,7 +65,4 @@ } return result; } - - - } -- Gitblit v1.8.0