From 3469271ec25c69e4528b085ba3be7d9d85ec519e Mon Sep 17 00:00:00 2001 From: 64850858 <648540858@qq.com> Date: 星期一, 26 七月 2021 11:40:32 +0800 Subject: [PATCH] 优化集群方案, 每个zlm一套ssrc; 优化集群下的docker接入逻辑; 更正sql脚本; 支持重启不设置设备离线。重启SIP事务不丢失 --- src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMRunner.java | 34 ++++++++++++++++++++-------------- 1 files changed, 20 insertions(+), 14 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 d06c6c3..67b605c 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 @@ -4,22 +4,16 @@ import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.genersoft.iot.vmp.conf.MediaConfig; -import com.genersoft.iot.vmp.media.zlm.dto.IMediaServerItem; import com.genersoft.iot.vmp.media.zlm.dto.MediaServerItem; -import com.genersoft.iot.vmp.media.zlm.dto.StreamProxyItem; import com.genersoft.iot.vmp.service.IMediaServerService; -import com.genersoft.iot.vmp.storager.IVideoManagerStorager; import com.genersoft.iot.vmp.service.IStreamProxyService; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.CommandLineRunner; import org.springframework.core.annotation.Order; import org.springframework.stereotype.Component; -import org.springframework.util.StringUtils; -import javax.print.attribute.standard.Media; import java.util.*; @Component @@ -47,16 +41,26 @@ @Override public void run(String... strings) throws Exception { - IMediaServerItem presetMediaServer = mediaServerService.getOneByHostAndPort( + // 娓呮redis缂撳瓨鐨勫湪绾縵lm淇℃伅 + mediaServerService.clearMediaServerForOnline(); + + // 灏嗛厤缃枃浠剁殑meida閰嶇疆鍐欏叆鏁版嵁搴� + MediaServerItem presetMediaServer = mediaServerService.getOneByHostAndPort( mediaConfig.getIp(), mediaConfig.getHttpPort()); if (presetMediaServer != null) { - mediaConfig.setId(presetMediaServer.getId()); - mediaServerService.update(mediaConfig); + MediaServerItem mediaSerItem = mediaConfig.getMediaSerItem(); + mediaSerItem.setId(presetMediaServer.getId()); + mediaServerService.update(mediaSerItem); + }else { + if (mediaConfig.getId() != null) { + MediaServerItem mediaSerItem = mediaConfig.getMediaSerItem(); + mediaServerService.add(mediaSerItem); + } } // 璁㈤槄 zlm鍚姩浜嬩欢, 鏂扮殑zlm涔熶細浠庤繖閲岃繘鍏ョ郴缁� hookSubscribe.addSubscribe(ZLMHttpHookSubscribe.HookType.on_server_started,null, - (IMediaServerItem mediaServerItem, JSONObject response)->{ + (MediaServerItem mediaServerItem, JSONObject response)->{ ZLMServerConfig zlmServerConfig = JSONObject.toJavaObject(response, ZLMServerConfig.class); if (zlmServerConfig !=null ) { startGetMedia.remove(zlmServerConfig.getGeneralMediaServerId()); @@ -69,23 +73,25 @@ logger.info("绛夊緟榛樿zlm鎺ュ叆..."); // 鑾峰彇鎵�鏈夌殑zlm锛� 骞跺紑鍚富鍔ㄨ繛鎺� - List<IMediaServerItem> all = mediaServerService.getAll(); + List<MediaServerItem> all = mediaServerService.getAll(); if (presetMediaServer == null) { all.add(mediaConfig.getMediaSerItem()); } - for (IMediaServerItem mediaServerItem : all) { + for (MediaServerItem mediaServerItem : all) { if (startGetMedia == null) startGetMedia = new HashMap<>(); startGetMedia.put(mediaServerItem.getId(), true); new Thread(() -> { ZLMServerConfig zlmServerConfig = getMediaServerConfig(mediaServerItem); if (zlmServerConfig != null) { + zlmServerConfig.setIp(mediaServerItem.getIp()); + zlmServerConfig.setHttpPort(mediaServerItem.getHttpPort()); startGetMedia.remove(mediaServerItem.getId()); mediaServerService.handLeZLMServerConfig(zlmServerConfig); } }).start(); } Timer timer = new Timer(); - // 1鍒嗛挓鍚庢湭杩炴帴鍒板垯涓嶅啀鍘讳富鍔ㄨ繛鎺� + // 2鍒嗛挓鍚庢湭杩炴帴鍒板垯涓嶅啀鍘讳富鍔ㄨ繛鎺�, TODO 骞跺閲嶅惎鍓嶄娇鐢ㄦ鍦▃lm鐨勯�氶亾鍙戦�乥ye timer.schedule(new TimerTask() { @Override public void run() { @@ -100,7 +106,7 @@ }, 60 * 1000 * 2); } - public ZLMServerConfig getMediaServerConfig(IMediaServerItem mediaServerItem) { + public ZLMServerConfig getMediaServerConfig(MediaServerItem mediaServerItem) { if ( startGetMedia.get(mediaServerItem.getId()) == null || !startGetMedia.get(mediaServerItem.getId())) return null; JSONObject responseJSON = zlmresTfulUtils.getMediaServerConfig(mediaServerItem); ZLMServerConfig ZLMServerConfig = null; -- Gitblit v1.8.0