From 1dbb559b388831b5f15e690d0b33d24b1faaa983 Mon Sep 17 00:00:00 2001 From: 648540858 <648540858@qq.com> Date: 星期二, 25 一月 2022 15:43:52 +0800 Subject: [PATCH] 优化文件导入判断 --- src/main/java/com/genersoft/iot/vmp/service/impl/MediaServerServiceImpl.java | 202 +++++++++++++++++++++++++------------------------ 1 files changed, 103 insertions(+), 99 deletions(-) diff --git a/src/main/java/com/genersoft/iot/vmp/service/impl/MediaServerServiceImpl.java b/src/main/java/com/genersoft/iot/vmp/service/impl/MediaServerServiceImpl.java index 3e7d5c4..cd5f8ab 100644 --- a/src/main/java/com/genersoft/iot/vmp/service/impl/MediaServerServiceImpl.java +++ b/src/main/java/com/genersoft/iot/vmp/service/impl/MediaServerServiceImpl.java @@ -4,9 +4,10 @@ import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.genersoft.iot.vmp.common.VideoManagerConstants; -import com.genersoft.iot.vmp.conf.MediaConfig; import com.genersoft.iot.vmp.conf.SipConfig; +import com.genersoft.iot.vmp.conf.UserSetup; import com.genersoft.iot.vmp.gb28181.bean.Device; +import com.genersoft.iot.vmp.gb28181.event.EventPublisher; import com.genersoft.iot.vmp.gb28181.session.SsrcConfig; import com.genersoft.iot.vmp.gb28181.session.VideoStreamSessionManager; import com.genersoft.iot.vmp.media.zlm.ZLMRESTfulUtils; @@ -52,7 +53,7 @@ private Integer serverPort; @Autowired - private MediaConfig mediaConfig; + private UserSetup userSetup; @Autowired private ZLMRESTfulUtils zlmresTfulUtils; @@ -70,6 +71,9 @@ private RedisUtil redisUtil; @Autowired + private EventPublisher publisher; + + @Autowired JedisUtil jedisUtil; private final SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); @@ -79,7 +83,7 @@ */ @Override public void run(String... args) throws Exception { - logger.info("Media Server 缂撳瓨鍒濆鍖�"); + logger.info("[缂撳瓨鍒濆鍖朷 Media Server "); List<MediaServerItem> mediaServerItemList = mediaServerMapper.queryAll(); for (MediaServerItem mediaServerItem : mediaServerItemList) { if (StringUtils.isEmpty(mediaServerItem.getId())) { @@ -89,13 +93,14 @@ if (mediaServerItem.getSsrcConfig() == null) { SsrcConfig ssrcConfig = new SsrcConfig(mediaServerItem.getId(), null, sipConfig.getDomain()); mediaServerItem.setSsrcConfig(ssrcConfig); - redisUtil.set(VideoManagerConstants.MEDIA_SERVER_PREFIX + mediaServerItem.getId(), mediaServerItem); + redisUtil.set(VideoManagerConstants.MEDIA_SERVER_PREFIX + userSetup.getServerId() + "_" + mediaServerItem.getId(), mediaServerItem); } // 鏌ヨredis鏄惁瀛樺湪姝ediaServer - String key = VideoManagerConstants.MEDIA_SERVER_PREFIX + mediaServerItem.getId(); + String key = VideoManagerConstants.MEDIA_SERVER_PREFIX + userSetup.getServerId() + "_" + mediaServerItem.getId(); if (!redisUtil.hasKey(key)) { redisUtil.set(key, mediaServerItem); } + } } @@ -110,7 +115,7 @@ return null; } // 鑾峰彇mediaServer鍙敤鐨剆src - String key = VideoManagerConstants.MEDIA_SERVER_PREFIX + mediaServerItem.getId(); + String key = VideoManagerConstants.MEDIA_SERVER_PREFIX + userSetup.getServerId() + "_" + mediaServerItem.getId(); SsrcConfig ssrcConfig = mediaServerItem.getSsrcConfig(); if (ssrcConfig == null) { @@ -156,7 +161,7 @@ SsrcConfig ssrcConfig = mediaServerItem.getSsrcConfig(); ssrcConfig.releaseSsrc(ssrc); mediaServerItem.setSsrcConfig(ssrcConfig); - String key = VideoManagerConstants.MEDIA_SERVER_PREFIX + mediaServerItem.getId(); + String key = VideoManagerConstants.MEDIA_SERVER_PREFIX + userSetup.getServerId() + "_" + mediaServerItem.getId(); redisUtil.set(key, mediaServerItem); } @@ -166,7 +171,7 @@ @Override public void clearRTPServer(MediaServerItem mediaServerItem) { mediaServerItem.setSsrcConfig(new SsrcConfig(mediaServerItem.getId(), null, sipConfig.getDomain())); - redisUtil.zAdd(VideoManagerConstants.MEDIA_SERVERS_ONLINE_PREFIX, mediaServerItem.getId(), 0); + redisUtil.zAdd(VideoManagerConstants.MEDIA_SERVERS_ONLINE_PREFIX + userSetup.getServerId(), mediaServerItem.getId(), 0); } @@ -186,15 +191,15 @@ ) ); } - String key = VideoManagerConstants.MEDIA_SERVER_PREFIX + mediaServerItemInDataBase.getId(); + String key = VideoManagerConstants.MEDIA_SERVER_PREFIX + userSetup.getServerId() + "_" + mediaServerItemInDataBase.getId(); redisUtil.set(key, mediaServerItemInDataBase); } @Override public List<MediaServerItem> getAll() { List<MediaServerItem> result = new ArrayList<>(); - List<Object> mediaServerKeys = redisUtil.scan(String.format("%S*", VideoManagerConstants.MEDIA_SERVER_PREFIX)); - String onlineKey = VideoManagerConstants.MEDIA_SERVERS_ONLINE_PREFIX; + List<Object> mediaServerKeys = redisUtil.scan(String.format("%S*", VideoManagerConstants.MEDIA_SERVER_PREFIX+ userSetup.getServerId() + "_" )); + String onlineKey = VideoManagerConstants.MEDIA_SERVERS_ONLINE_PREFIX + userSetup.getServerId(); for (Object mediaServerKey : mediaServerKeys) { String key = (String) mediaServerKey; MediaServerItem mediaServerItem = (MediaServerItem) redisUtil.get(key); @@ -224,12 +229,12 @@ @Override public List<MediaServerItem> getAllOnline() { - String key = VideoManagerConstants.MEDIA_SERVERS_ONLINE_PREFIX; + String key = VideoManagerConstants.MEDIA_SERVERS_ONLINE_PREFIX + userSetup.getServerId(); Set<String> mediaServerIdSet = redisUtil.zRevRange(key, 0, -1); List<MediaServerItem> result = new ArrayList<>(); if (mediaServerIdSet != null && mediaServerIdSet.size() > 0) { for (String mediaServerId : mediaServerIdSet) { - String serverKey = VideoManagerConstants.MEDIA_SERVER_PREFIX + mediaServerId; + String serverKey = VideoManagerConstants.MEDIA_SERVER_PREFIX + userSetup.getServerId() + "_" + mediaServerId; result.add((MediaServerItem) redisUtil.get(serverKey)); } } @@ -246,7 +251,7 @@ if (mediaServerId == null) { return null; } - String key = VideoManagerConstants.MEDIA_SERVER_PREFIX + mediaServerId; + String key = VideoManagerConstants.MEDIA_SERVER_PREFIX + userSetup.getServerId() + "_" + mediaServerId; return (MediaServerItem)redisUtil.get(key); } @@ -262,7 +267,7 @@ @Override public void clearMediaServerForOnline() { - String key = VideoManagerConstants.MEDIA_SERVERS_ONLINE_PREFIX; + String key = VideoManagerConstants.MEDIA_SERVERS_ONLINE_PREFIX + userSetup.getServerId(); redisUtil.del(key); } @@ -271,6 +276,7 @@ WVPResult<String> result = new WVPResult<>(); mediaServerItem.setCreateTime(this.format.format(System.currentTimeMillis())); mediaServerItem.setUpdateTime(this.format.format(System.currentTimeMillis())); + mediaServerItem.setHookAliveInterval(120); JSONObject responseJSON = zlmresTfulUtils.getMediaServerConfig(mediaServerItem); if (responseJSON != null) { JSONArray data = responseJSON.getJSONArray("data"); @@ -284,7 +290,7 @@ mediaServerItem.setId(zlmServerConfig.getGeneralMediaServerId()); zlmServerConfig.setIp(mediaServerItem.getIp()); mediaServerMapper.add(mediaServerItem); - handLeZLMServerConfig(zlmServerConfig); + zlmServerOnline(zlmServerConfig); result.setCode(0); result.setMsg("success"); }else { @@ -304,12 +310,17 @@ return mediaServerMapper.add(mediaSerItem); } + @Override + public int updateToDatabase(MediaServerItem mediaSerItem) { + return mediaServerMapper.update(mediaSerItem); + } + /** * 澶勭悊zlm涓婄嚎 * @param zlmServerConfig zlm涓婄嚎鎼哄甫鐨勫弬鏁� */ @Override - public void handLeZLMServerConfig(ZLMServerConfig zlmServerConfig) { + public void zlmServerOnline(ZLMServerConfig zlmServerConfig) { logger.info("[ ZLM锛歿} ]-[ {}:{} ]宸茶繛鎺�", zlmServerConfig.getGeneralMediaServerId(), zlmServerConfig.getIp(), zlmServerConfig.getHttpPort()); @@ -321,91 +332,62 @@ logger.warn("[鏈敞鍐岀殑zlm] 鎷掓帴鎺ュ叆锛氭潵鑷獅}锛歿}", zlmServerConfig.getIp(),zlmServerConfig.getHttpPort() ); return; } + serverItem.setHookAliveInterval(zlmServerConfig.getHookAliveInterval()); + if (serverItem.getHttpPort() == 0) { + serverItem.setHttpPort(zlmServerConfig.getHttpPort()); + } + if (serverItem.getHttpSSlPort() == 0) { + serverItem.setHttpSSlPort(zlmServerConfig.getHttpSSLport()); + } + if (serverItem.getRtmpPort() == 0) { + serverItem.setRtmpPort(zlmServerConfig.getRtmpPort()); + } + if (serverItem.getRtmpSSlPort() == 0) { + serverItem.setRtmpSSlPort(zlmServerConfig.getRtmpSslPort()); + } + if (serverItem.getRtspPort() == 0) { + serverItem.setRtspPort(zlmServerConfig.getRtspPort()); + } + if (serverItem.getRtspSSLPort() == 0) { + serverItem.setRtspSSLPort(zlmServerConfig.getRtspSSlport()); + } + if (serverItem.getRtpProxyPort() == 0) { + serverItem.setRtpProxyPort(zlmServerConfig.getRtpProxyPort()); + } + serverItem.setStatus(true); + if (StringUtils.isEmpty(serverItem.getId())) { serverItem.setId(zlmServerConfig.getGeneralMediaServerId()); + mediaServerMapper.updateByHostAndPort(serverItem); + }else { + mediaServerMapper.update(serverItem); } - if (redisUtil.get(VideoManagerConstants.MEDIA_SERVER_PREFIX + serverItem.getId()) == null) { - SsrcConfig ssrcConfig = new SsrcConfig(serverItem.getId(), null, sipConfig.getDomain()); + String key = VideoManagerConstants.MEDIA_SERVER_PREFIX + userSetup.getServerId() + "_" + zlmServerConfig.getGeneralMediaServerId(); + if (redisUtil.get(key) == null) { + SsrcConfig ssrcConfig = new SsrcConfig(zlmServerConfig.getGeneralMediaServerId(), null, sipConfig.getDomain()); serverItem.setSsrcConfig(ssrcConfig); - redisUtil.set(VideoManagerConstants.MEDIA_SERVER_PREFIX + serverItem.getId(), serverItem); + }else { + MediaServerItem mediaServerItemInRedis = (MediaServerItem)redisUtil.get(key); + serverItem.setSsrcConfig(mediaServerItemInRedis.getSsrcConfig()); } - - serverItem.setStatus(true); - mediaServerMapper.update(serverItem); + redisUtil.set(key, serverItem); resetOnlineServerItem(serverItem); - setZLMConfig(serverItem); + updateMediaServerKeepalive(serverItem.getId(), null); + setZLMConfig(serverItem, "0".equals(zlmServerConfig.getHookEnable())); + publisher.zlmOnlineEventPublish(serverItem.getId()); -// if (zlmServerConfig.getGeneralMediaServerId().equals(mediaConfig.getId()) -// || (zlmServerConfig.getIp().equals(mediaConfig.getIp()) && zlmServerConfig.getHttpPort() == mediaConfig.getHttpPort())) { -// // 閰嶇疆鏂囦欢鐨剒lm -// // 濡傛灉鏄厤缃枃浠朵腑鐨剒lm銆� 涔熷氨鏄粯璁lm銆� 涓�鍒囦互閰嶇疆鏂囦欢鍐呭涓哄噯 -// // wvp浜掓儬淇敼zlm鐨勭鍙o紝闇�瑕佽嚜琛岄厤缃�� -// MediaServerItem serverItemFromConfig = mediaConfig.getMediaSerItem(); -// serverItemFromConfig.setId(zlmServerConfig.getGeneralMediaServerId()); -// if (mediaConfig.getHttpPort() == 0) { -// serverItemFromConfig.setHttpPort(zlmServerConfig.getHttpPort()); -// } -// if (mediaConfig.getHttpSSlPort() == 0) { -// serverItemFromConfig.setHttpSSlPort(zlmServerConfig.getHttpSSLport()); -// } -// if (mediaConfig.getRtmpPort() == 0) { -// serverItemFromConfig.setRtmpPort(zlmServerConfig.getRtmpPort()); -// } -// if (mediaConfig.getRtmpSSlPort() == 0) { -// serverItemFromConfig.setRtmpSSlPort(zlmServerConfig.getRtmpSslPort()); -// } -// if (mediaConfig.getRtspPort() == 0) { -// serverItemFromConfig.setRtspPort(zlmServerConfig.getRtspPort()); -// } -// if (mediaConfig.getRtspSSLPort() == 0) { -// serverItemFromConfig.setRtspSSLPort(zlmServerConfig.getRtspSSlport()); -// } -// if (mediaConfig.getRtpProxyPort() == 0) { -// serverItemFromConfig.setRtpProxyPort(zlmServerConfig.getRtpProxyPort()); -// } -// if (serverItem != null){ -// mediaServerMapper.delDefault(); -// mediaServerMapper.add(serverItemFromConfig); -// String key = VideoManagerConstants.MEDIA_SERVER_PREFIX + serverItemFromConfig.getId(); -// MediaServerItem serverItemInRedis = (MediaServerItem)redisUtil.get(key); -// if (serverItemInRedis != null) { -// serverItemFromConfig.setSsrcConfig(serverItemInRedis.getSsrcConfig()); -// }else { -// serverItemFromConfig.setSsrcConfig(new SsrcConfig(serverItemFromConfig.getId(), null, sipConfig.getDomain())); -// } -// redisUtil.set(key, serverItemFromConfig); -// }else { -// String key = VideoManagerConstants.MEDIA_SERVER_PREFIX + serverItemFromConfig.getId(); -// serverItemFromConfig.setSsrcConfig(new SsrcConfig(serverItemFromConfig.getId(), null, sipConfig.getDomain())); -// redisUtil.set(key, serverItemFromConfig); -// mediaServerMapper.add(serverItemFromConfig); -// } -// resetOnlineServerItem(serverItemFromConfig); -// setZLMConfig(serverItemFromConfig); -// } - // 绉婚櫎鏈坊鍔犵殑zlm鐨勬帴鍏ワ紝鎵�鏈夌殑zlm蹇呴』鍏堟坊鍔犲悗鎵嶅彲浠ュ姞鍏ヤ娇鐢� -// else { -// String now = this.format.format(System.currentTimeMillis()); -// if (serverItem == null){ -// // 涓�涓柊鐨剒lm鎺ュ叆wvp -// serverItem = new MediaServerItem(zlmServerConfig, sipConfig.getIp()); -// serverItem.setCreateTime(now); -// serverItem.setUpdateTime(now); -// String key = VideoManagerConstants.MEDIA_SERVER_PREFIX + serverItem.getId(); -// serverItem.setSsrcConfig(new SsrcConfig(serverItem.getId(), null, sipConfig.getDomain())); -// redisUtil.set(key, serverItem); -// // 瀛樺叆鏁版嵁搴� -// mediaServerMapper.add(serverItem); -// setZLMConfig(serverItem); -// } -// resetOnlineServerItem(serverItem); -// } + } + + + @Override + public void zlmServerOffline(String mediaServerId) { + delete(mediaServerId); } @Override public void resetOnlineServerItem(MediaServerItem serverItem) { // 鏇存柊缂撳瓨 - String key = VideoManagerConstants.MEDIA_SERVERS_ONLINE_PREFIX; + String key = VideoManagerConstants.MEDIA_SERVERS_ONLINE_PREFIX + userSetup.getServerId(); // 浣跨敤zset鐨勫垎鏁颁綔涓哄綋鍓嶅苟鍙戦噺锛� 榛樿鍊艰缃负0 if (redisUtil.zScore(key, serverItem.getId()) == null) { // 涓嶅瓨鍦ㄥ垯璁剧疆榛樿鍊� 宸插瓨鍦ㄥ垯閲嶇疆 redisUtil.zAdd(key, serverItem.getId(), 0L); @@ -431,14 +413,14 @@ if (mediaServerId == null) { return; } - String key = VideoManagerConstants.MEDIA_SERVERS_ONLINE_PREFIX; + String key = VideoManagerConstants.MEDIA_SERVERS_ONLINE_PREFIX + userSetup.getServerId(); redisUtil.zIncrScore(key, mediaServerId, 1); } @Override public void removeCount(String mediaServerId) { - String key = VideoManagerConstants.MEDIA_SERVERS_ONLINE_PREFIX; + String key = VideoManagerConstants.MEDIA_SERVERS_ONLINE_PREFIX + userSetup.getServerId(); redisUtil.zIncrScore(key, mediaServerId, - 1); } @@ -448,7 +430,7 @@ */ @Override public MediaServerItem getMediaServerForMinimumLoad() { - String key = VideoManagerConstants.MEDIA_SERVERS_ONLINE_PREFIX; + String key = VideoManagerConstants.MEDIA_SERVERS_ONLINE_PREFIX + userSetup.getServerId(); if (redisUtil.zSize(key) == null || redisUtil.zSize(key) == 0) { logger.info("鑾峰彇璐熻浇鏈�浣庣殑鑺傜偣鏃舵棤鍦ㄧ嚎鑺傜偣"); @@ -466,9 +448,10 @@ /** * 瀵箊lm鏈嶅姟鍣ㄨ繘琛屽熀纭�閰嶇疆 * @param mediaServerItem 鏈嶅姟ID + * @param restart 鏄惁閲嶅惎zlm */ @Override - public void setZLMConfig(MediaServerItem mediaServerItem) { + public void setZLMConfig(MediaServerItem mediaServerItem, boolean restart) { logger.info("[ ZLM锛歿} ]-[ {}:{} ]璁剧疆zlm", mediaServerItem.getId(), mediaServerItem.getIp(), mediaServerItem.getHttpPort()); String protocol = sslEnabled ? "https" : "http"; @@ -501,12 +484,22 @@ JSONObject responseJSON = zlmresTfulUtils.setServerConfig(mediaServerItem, param); if (responseJSON != null && responseJSON.getInteger("code") == 0) { - logger.info("[ ZLM锛歿} ]-[ {}:{} ]璁剧疆zlm鎴愬姛", - mediaServerItem.getId(), mediaServerItem.getIp(), mediaServerItem.getHttpPort()); + if (restart) { + logger.info("[ ZLM锛歿} ]-[ {}:{} ]璁剧疆zlm鎴愬姛, 寮�濮嬮噸鍚互淇濊瘉閰嶇疆鐢熸晥", + mediaServerItem.getId(), mediaServerItem.getIp(), mediaServerItem.getHttpPort()); + zlmresTfulUtils.restartServer(mediaServerItem); + }else { + logger.info("[ ZLM锛歿} ]-[ {}:{} ]璁剧疆zlm鎴愬姛", + mediaServerItem.getId(), mediaServerItem.getIp(), mediaServerItem.getHttpPort()); + } + + }else { logger.info("[ ZLM锛歿} ]-[ {}:{} ]璁剧疆zlm澶辫触", mediaServerItem.getId(), mediaServerItem.getIp(), mediaServerItem.getHttpPort()); } + + } @@ -580,9 +573,20 @@ @Override public void delete(String id) { - redisUtil.zRemove(VideoManagerConstants.MEDIA_SERVERS_ONLINE_PREFIX, id); - String key = VideoManagerConstants.MEDIA_SERVER_PREFIX + id; + redisUtil.zRemove(VideoManagerConstants.MEDIA_SERVERS_ONLINE_PREFIX + userSetup.getServerId(), id); + String key = VideoManagerConstants.MEDIA_SERVER_PREFIX + userSetup.getServerId() + "_" + id; redisUtil.del(key); - mediaServerMapper.delOne(id); + } + + @Override + public void updateMediaServerKeepalive(String mediaServerId, JSONObject data) { + MediaServerItem mediaServerItem = getOne(mediaServerId); + if (mediaServerItem == null) { + logger.warn("[鏇存柊ZLM 淇濇椿淇℃伅]澶辫触锛屾湭鎵惧埌娴佸獟浣撲俊鎭�"); + return; + } + String key = VideoManagerConstants.MEDIA_SERVER_KEEPALIVE_PREFIX + userSetup.getServerId() + "_" + mediaServerId; + int hookAliveInterval = mediaServerItem.getHookAliveInterval() + 2; + redisUtil.set(key, data, hookAliveInterval); } } -- Gitblit v1.8.0