From d09d8f11f06ee6eeeb4c7f9bd6d35e6fbd49e05f Mon Sep 17 00:00:00 2001 From: jiang <893224616@qq.com> Date: 星期四, 04 八月 2022 17:01:31 +0800 Subject: [PATCH] 修改‘修改pushkey’窗口的标题提示文案 --- src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMRunner.java | 126 +++++++++++++++-------------------------- 1 files changed, 46 insertions(+), 80 deletions(-) diff --git a/src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMRunner.java b/src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMRunner.java index 12829e9..b24d0a1 100644 --- a/src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMRunner.java +++ b/src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMRunner.java @@ -6,22 +6,22 @@ import com.genersoft.iot.vmp.conf.DynamicTask; import com.genersoft.iot.vmp.conf.MediaConfig; import com.genersoft.iot.vmp.gb28181.event.EventPublisher; +import com.genersoft.iot.vmp.media.zlm.dto.HookSubscribeFactory; +import com.genersoft.iot.vmp.media.zlm.dto.HookSubscribeForServerStarted; +import com.genersoft.iot.vmp.media.zlm.dto.HookSubscribeForStreamChange; import com.genersoft.iot.vmp.media.zlm.dto.MediaServerItem; import com.genersoft.iot.vmp.service.IMediaServerService; -import com.genersoft.iot.vmp.service.IStreamProxyService; -import com.genersoft.iot.vmp.storager.IRedisCatchStorage; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.boot.CommandLineRunner; import org.springframework.core.annotation.Order; import org.springframework.scheduling.annotation.Async; -import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor; import org.springframework.stereotype.Component; -import org.springframework.util.StringUtils; +import java.time.Instant; import java.util.*; +import java.util.concurrent.TimeUnit; @Component @Order(value=1) @@ -38,16 +38,10 @@ private ZLMHttpHookSubscribe hookSubscribe; @Autowired - private IStreamProxyService streamProxyService; - - @Autowired private EventPublisher publisher; @Autowired private IMediaServerService mediaServerService; - - @Autowired - private IRedisCatchStorage redisCatchStorage; @Autowired private MediaConfig mediaConfig; @@ -55,9 +49,6 @@ @Autowired private DynamicTask dynamicTask; - @Qualifier("taskExecutor") - @Autowired - private ThreadPoolTaskExecutor taskExecutor; @Override public void run(String... strings) throws Exception { @@ -70,29 +61,27 @@ mediaServerService.updateToDatabase(mediaSerItem); } mediaServerService.syncCatchFromDatabase(); + HookSubscribeForServerStarted hookSubscribeForServerStarted = HookSubscribeFactory.on_server_started(); +// Instant expiresInstant = Instant.now().plusSeconds(TimeUnit.SECONDS.toSeconds(60)); +// hookSubscribeForStreamChange.setExpires(expiresInstant); // 璁㈤槄 zlm鍚姩浜嬩欢, 鏂扮殑zlm涔熶細浠庤繖閲岃繘鍏ョ郴缁� - hookSubscribe.addSubscribe(ZLMHttpHookSubscribe.HookType.on_server_started,new JSONObject(), + hookSubscribe.addSubscribe(hookSubscribeForServerStarted, (MediaServerItem mediaServerItem, JSONObject response)->{ ZLMServerConfig zlmServerConfig = JSONObject.toJavaObject(response, ZLMServerConfig.class); if (zlmServerConfig !=null ) { if (startGetMedia != null) { startGetMedia.remove(zlmServerConfig.getGeneralMediaServerId()); + if (startGetMedia.size() == 0) { + hookSubscribe.removeSubscribe(HookSubscribeFactory.on_server_started()); + } } - mediaServerService.zlmServerOnline(zlmServerConfig); } }); - // 璁㈤槄 zlm淇濇椿浜嬩欢, 褰搝lm绂荤嚎鏃跺仛涓氬姟鐨勫鐞� - hookSubscribe.addSubscribe(ZLMHttpHookSubscribe.HookType.on_server_keepalive,new JSONObject(), - (MediaServerItem mediaServerItem, JSONObject response)->{ - String mediaServerId = response.getString("mediaServerId"); - if (mediaServerId !=null ) { - mediaServerService.updateMediaServerKeepalive(mediaServerId, response.getJSONObject("data")); - } - }); + // 鑾峰彇zlm淇℃伅 - logger.info("[zlm鎺ュ叆]绛夊緟榛樿zlm涓�..."); + logger.info("[zlm] 绛夊緟榛樿zlm涓�..."); // 鑾峰彇鎵�鏈夌殑zlm锛� 骞跺紑鍚富鍔ㄨ繛鎺� List<MediaServerItem> all = mediaServerService.getAllFromDatabase(); @@ -105,9 +94,7 @@ startGetMedia = new HashMap<>(); } startGetMedia.put(mediaServerItem.getId(), true); - taskExecutor.execute(()->{ - connectZlmServer(mediaServerItem); - }); + connectZlmServer(mediaServerItem); } String taskKey = "zlm-connect-timeout"; dynamicTask.startDelay(taskKey, ()->{ @@ -119,21 +106,43 @@ startGetMedia = null; } // TODO 娓呯悊鏁版嵁搴撲腑涓巖edis涓嶅尮閰嶇殑zlm - }, 6 * 1000 ); + }, 60 * 1000 ); } @Async public void connectZlmServer(MediaServerItem mediaServerItem){ - ZLMServerConfig zlmServerConfig = getMediaServerConfig(mediaServerItem, 1); - if (zlmServerConfig != null) { - zlmServerConfig.setIp(mediaServerItem.getIp()); - zlmServerConfig.setHttpPort(mediaServerItem.getHttpPort()); + String connectZlmServerTaskKey = "connect-zlm-" + mediaServerItem.getId(); + ZLMServerConfig zlmServerConfigFirst = getMediaServerConfig(mediaServerItem); + if (zlmServerConfigFirst != null) { + zlmServerConfigFirst.setIp(mediaServerItem.getIp()); + zlmServerConfigFirst.setHttpPort(mediaServerItem.getHttpPort()); startGetMedia.remove(mediaServerItem.getId()); - mediaServerService.zlmServerOnline(zlmServerConfig); + if (startGetMedia.size() == 0) { + hookSubscribe.removeSubscribe(HookSubscribeFactory.on_server_started()); + } + mediaServerService.zlmServerOnline(zlmServerConfigFirst); + }else { + logger.info("[ {} ]-[ {}:{} ]涓诲姩杩炴帴澶辫触, 娓呯悊鐩稿叧璧勬簮锛� 寮�濮嬪皾璇曢噸璇曡繛鎺�", + mediaServerItem.getId(), mediaServerItem.getIp(), mediaServerItem.getHttpPort()); + publisher.zlmOfflineEventPublish(mediaServerItem.getId()); } + + dynamicTask.startCron(connectZlmServerTaskKey, ()->{ + ZLMServerConfig zlmServerConfig = getMediaServerConfig(mediaServerItem); + if (zlmServerConfig != null) { + dynamicTask.stop(connectZlmServerTaskKey); + zlmServerConfig.setIp(mediaServerItem.getIp()); + zlmServerConfig.setHttpPort(mediaServerItem.getHttpPort()); + startGetMedia.remove(mediaServerItem.getId()); + if (startGetMedia.size() == 0) { + hookSubscribe.removeSubscribe(HookSubscribeFactory.on_server_started()); + } + mediaServerService.zlmServerOnline(zlmServerConfig); + } + }, 2000); } - public ZLMServerConfig getMediaServerConfig(MediaServerItem mediaServerItem, int index) { + public ZLMServerConfig getMediaServerConfig(MediaServerItem mediaServerItem) { if (startGetMedia == null) { return null;} if (!mediaServerItem.isDefaultServer() && mediaServerService.getOne(mediaServerItem.getId()) == null) { return null; @@ -149,53 +158,10 @@ zlmServerConfig = JSON.parseObject(JSON.toJSONString(data.get(0)), ZLMServerConfig.class); } } else { - logger.error("[ {} ]-[ {}:{} ]绗瑊}娆′富鍔ㄨ繛鎺ュけ璐�, 2s鍚庨噸璇�", - mediaServerItem.getId(), mediaServerItem.getIp(), mediaServerItem.getHttpPort(), index); - if (index == 1 && !StringUtils.isEmpty(mediaServerItem.getId())) { - logger.info("[ {} ]-[ {}:{} ]绗瑊}娆′富鍔ㄨ繛鎺ュけ璐�, 寮�濮嬫竻鐞嗙浉鍏宠祫婧�", - mediaServerItem.getId(), mediaServerItem.getIp(), mediaServerItem.getHttpPort(), index); - publisher.zlmOfflineEventPublish(mediaServerItem.getId()); - } - try { - Thread.sleep(2000); - } catch (InterruptedException e) { - e.printStackTrace(); - } - zlmServerConfig = getMediaServerConfig(mediaServerItem, index += 1); + logger.error("[ {} ]-[ {}:{} ]涓诲姩杩炴帴澶辫触, 2s鍚庨噸璇�", + mediaServerItem.getId(), mediaServerItem.getIp(), mediaServerItem.getHttpPort()); } return zlmServerConfig; } - - /** - * zlm 杩炴帴鎴愬姛鎴栬�厇lm閲嶅惎鍚� - */ -// private void zLmRunning(ZLMServerConfig zlmServerConfig){ -// logger.info( "[ id: " + zlmServerConfig.getGeneralMediaServerId() + "] zlm鎺ュ叆鎴愬姛..."); -// // 鍏抽棴寰幆鑾峰彇zlm閰嶇疆 -// startGetMedia = false; -// MediaServerItem mediaServerItem = new MediaServerItem(zlmServerConfig, sipIp); -// storager.updateMediaServer(mediaServerItem); -// -// if (mediaServerItem.isAutoConfig()) setZLMConfig(mediaServerItem); -// zlmServerManger.updateServerCatchFromHook(zlmServerConfig); -// -// // 娓呯┖鎵�鏈塻ession -//// zlmMediaListManager.clearAllSessions(); -// -// // 鏇存柊娴佸垪琛� -// zlmMediaListManager.updateMediaList(mediaServerItem); -// // 鎭㈠娴佷唬鐞�, 鍙煡鎵捐繖涓繖涓祦濯掍綋 -// List<StreamProxyItem> streamProxyListForEnable = storager.getStreamProxyListForEnableInMediaServer( -// mediaServerItem.getId(), true); -// for (StreamProxyItem streamProxyDto : streamProxyListForEnable) { -// logger.info("鎭㈠娴佷唬鐞嗭紝" + streamProxyDto.getApp() + "/" + streamProxyDto.getStream()); -// JSONObject jsonObject = streamProxyService.addStreamProxyToZlm(streamProxyDto); -// if (jsonObject == null) { -// // 璁剧疆涓烘湭鍚敤 -// logger.info("鎭㈠娴佷唬鐞嗗け璐ワ紝璇锋鏌ユ祦鍦板潃鍚庨噸鏂板惎鐢�" + streamProxyDto.getApp() + "/" + streamProxyDto.getStream()); -// streamProxyService.stop(streamProxyDto.getApp(), streamProxyDto.getStream()); -// } -// } -// } } -- Gitblit v1.8.0