From 8f7e8efc981cf68a3067fb3421fdfbbf6f6275ab Mon Sep 17 00:00:00 2001 From: 648540858 <648540858@qq.com> Date: 星期二, 23 八月 2022 11:48:31 +0800 Subject: [PATCH] 合并主线 --- src/main/java/com/genersoft/iot/vmp/service/impl/MediaServerServiceImpl.java | 151 ++++++++++++++++++-------------------------------- 1 files changed, 55 insertions(+), 96 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 b1c6a9a..867fcab 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 @@ -11,6 +11,8 @@ import com.genersoft.iot.vmp.media.zlm.ZLMRunner; import com.genersoft.iot.vmp.service.IStreamProxyService; import com.genersoft.iot.vmp.storager.IVideoManagerStorage; +import com.genersoft.iot.vmp.conf.exception.ControllerException; +import com.genersoft.iot.vmp.vmanager.bean.ErrorCode; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -19,6 +21,7 @@ import org.springframework.stereotype.Service; import org.springframework.transaction.TransactionDefinition; import org.springframework.transaction.TransactionStatus; +import org.springframework.util.ObjectUtils; import org.springframework.util.StringUtils; import com.alibaba.fastjson.JSON; @@ -38,7 +41,6 @@ import com.genersoft.iot.vmp.service.bean.SSRCInfo; import com.genersoft.iot.vmp.storager.dao.MediaServerMapper; import com.genersoft.iot.vmp.utils.DateUtil; -import com.genersoft.iot.vmp.utils.redis.JedisUtil; import com.genersoft.iot.vmp.utils.redis.RedisUtil; import com.genersoft.iot.vmp.vmanager.bean.WVPResult; @@ -58,9 +60,6 @@ @Autowired private SipConfig sipConfig; - - @Autowired - private ZLMRunner zlmRunner; @Value("${server.ssl.enabled:false}") private boolean sslEnabled; @@ -89,20 +88,9 @@ @Autowired private ZLMRTPServerFactory zlmrtpServerFactory; - @Autowired - private RedisUtil redisUtil; - - @Autowired - private IVideoManagerStorage storager; - - @Autowired - private IStreamProxyService streamProxyService; @Autowired private EventPublisher publisher; - - @Autowired - JedisUtil jedisUtil; /** * 鍒濆鍖� @@ -111,19 +99,19 @@ public void updateVmServer(List<MediaServerItem> mediaServerItemList) { logger.info("[zlm] 缂撳瓨鍒濆鍖� "); for (MediaServerItem mediaServerItem : mediaServerItemList) { - if (StringUtils.isEmpty(mediaServerItem.getId())) { + if (ObjectUtils.isEmpty(mediaServerItem.getId())) { continue; } // 鏇存柊 if (mediaServerItem.getSsrcConfig() == null) { SsrcConfig ssrcConfig = new SsrcConfig(mediaServerItem.getId(), null, sipConfig.getDomain()); mediaServerItem.setSsrcConfig(ssrcConfig); - redisUtil.set(VideoManagerConstants.MEDIA_SERVER_PREFIX + userSetting.getServerId() + "_" + mediaServerItem.getId(), mediaServerItem); + RedisUtil.set(VideoManagerConstants.MEDIA_SERVER_PREFIX + userSetting.getServerId() + "_" + mediaServerItem.getId(), mediaServerItem); } // 鏌ヨredis鏄惁瀛樺湪姝ediaServer String key = VideoManagerConstants.MEDIA_SERVER_PREFIX + userSetting.getServerId() + "_" + mediaServerItem.getId(); - if (!redisUtil.hasKey(key)) { - redisUtil.set(key, mediaServerItem); + if (!RedisUtil.hasKey(key)) { + RedisUtil.set(key, mediaServerItem); } } @@ -165,7 +153,7 @@ if (mediaServerItem.isRtpEnable()) { rtpServerPort = zlmrtpServerFactory.createRTPServer(mediaServerItem, streamId, ssrcCheck?Integer.parseInt(ssrc):0, port); } - redisUtil.set(key, mediaServerItem); + RedisUtil.set(key, mediaServerItem); return new SSRCInfo(rtpServerPort, ssrc, streamId); } } @@ -198,7 +186,7 @@ ssrcConfig.releaseSsrc(ssrc); mediaServerItem.setSsrcConfig(ssrcConfig); String key = VideoManagerConstants.MEDIA_SERVER_PREFIX + userSetting.getServerId() + "_" + mediaServerItem.getId(); - redisUtil.set(key, mediaServerItem); + RedisUtil.set(key, mediaServerItem); } /** @@ -207,7 +195,7 @@ @Override public void clearRTPServer(MediaServerItem mediaServerItem) { mediaServerItem.setSsrcConfig(new SsrcConfig(mediaServerItem.getId(), null, sipConfig.getDomain())); - redisUtil.zAdd(VideoManagerConstants.MEDIA_SERVERS_ONLINE_PREFIX + userSetting.getServerId(), mediaServerItem.getId(), 0); + RedisUtil.zAdd(VideoManagerConstants.MEDIA_SERVERS_ONLINE_PREFIX + userSetting.getServerId(), mediaServerItem.getId(), 0); } @@ -229,19 +217,19 @@ ); } String key = VideoManagerConstants.MEDIA_SERVER_PREFIX + userSetting.getServerId() + "_" + mediaServerItemInDataBase.getId(); - redisUtil.set(key, mediaServerItemInDataBase); + 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+ userSetting.getServerId() + "_" )); + List<Object> mediaServerKeys = RedisUtil.scan(String.format("%S*", VideoManagerConstants.MEDIA_SERVER_PREFIX+ userSetting.getServerId() + "_" )); String onlineKey = VideoManagerConstants.MEDIA_SERVERS_ONLINE_PREFIX + userSetting.getServerId(); for (Object mediaServerKey : mediaServerKeys) { String key = (String) mediaServerKey; - MediaServerItem mediaServerItem = (MediaServerItem) redisUtil.get(key); + MediaServerItem mediaServerItem = (MediaServerItem) RedisUtil.get(key); // 妫�鏌ョ姸鎬� - Double aDouble = redisUtil.zScore(onlineKey, mediaServerItem.getId()); + Double aDouble = RedisUtil.zScore(onlineKey, mediaServerItem.getId()); if (aDouble != null) { mediaServerItem.setStatus(true); } @@ -267,13 +255,13 @@ @Override public List<MediaServerItem> getAllOnline() { String key = VideoManagerConstants.MEDIA_SERVERS_ONLINE_PREFIX + userSetting.getServerId(); - Set<String> mediaServerIdSet = redisUtil.zRevRange(key, 0, -1); + 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 + userSetting.getServerId() + "_" + mediaServerId; - result.add((MediaServerItem) redisUtil.get(serverKey)); + result.add((MediaServerItem) RedisUtil.get(serverKey)); } } Collections.reverse(result); @@ -291,14 +279,9 @@ return null; } String key = VideoManagerConstants.MEDIA_SERVER_PREFIX + userSetting.getServerId() + "_" + mediaServerId; - MediaServerItem serverItem=(MediaServerItem)redisUtil.get(key); - if(null==serverItem){ - //zlm鏈嶅姟涓嶅湪绾匡紝鍚姩閲嶈繛 - reloadZlm(); - serverItem=(MediaServerItem)redisUtil.get(key); - } - return serverItem; + return (MediaServerItem)RedisUtil.get(key); } + @Override public MediaServerItem getDefaultMediaServer() { @@ -309,12 +292,11 @@ @Override public void clearMediaServerForOnline() { String key = VideoManagerConstants.MEDIA_SERVERS_ONLINE_PREFIX + userSetting.getServerId(); - redisUtil.del(key); + RedisUtil.del(key); } @Override - public WVPResult<String> add(MediaServerItem mediaServerItem) { - WVPResult<String> result = new WVPResult<>(); + public void add(MediaServerItem mediaServerItem) { mediaServerItem.setCreateTime(DateUtil.getNow()); mediaServerItem.setUpdateTime(DateUtil.getNow()); mediaServerItem.setHookAliveInterval(120); @@ -324,26 +306,19 @@ if (data != null && data.size() > 0) { ZLMServerConfig zlmServerConfig= JSON.parseObject(JSON.toJSONString(data.get(0)), ZLMServerConfig.class); if (mediaServerMapper.queryOne(zlmServerConfig.getGeneralMediaServerId()) != null) { - result.setCode(-1); - result.setMsg("淇濆瓨澶辫触锛屽獟浣撴湇鍔D [ " + zlmServerConfig.getGeneralMediaServerId() + " ] 宸插瓨鍦紝璇蜂慨鏀瑰獟浣撴湇鍔″櫒閰嶇疆"); - return result; + throw new ControllerException(ErrorCode.ERROR100.getCode(),"淇濆瓨澶辫触锛屽獟浣撴湇鍔D [ " + zlmServerConfig.getGeneralMediaServerId() + " ] 宸插瓨鍦紝璇蜂慨鏀瑰獟浣撴湇鍔″櫒閰嶇疆"); } mediaServerItem.setId(zlmServerConfig.getGeneralMediaServerId()); zlmServerConfig.setIp(mediaServerItem.getIp()); mediaServerMapper.add(mediaServerItem); zlmServerOnline(zlmServerConfig); - result.setCode(0); - result.setMsg("success"); }else { - result.setCode(-1); - result.setMsg("杩炴帴澶辫触"); + throw new ControllerException(ErrorCode.ERROR100.getCode(),"杩炴帴澶辫触"); } }else { - result.setCode(-1); - result.setMsg("杩炴帴澶辫触"); + throw new ControllerException(ErrorCode.ERROR100.getCode(),"杩炴帴澶辫触"); } - return result; } @Override @@ -411,22 +386,21 @@ } serverItem.setStatus(true); - if (StringUtils.isEmpty(serverItem.getId())) { + if (ObjectUtils.isEmpty(serverItem.getId())) { logger.warn("[鏈敞鍐岀殑zlm] serverItem缂哄皯ID锛� 鏃犳硶鎺ュ叆锛歿}锛歿}", zlmServerConfig.getIp(),zlmServerConfig.getHttpPort() ); return; } mediaServerMapper.update(serverItem); String key = VideoManagerConstants.MEDIA_SERVER_PREFIX + userSetting.getServerId() + "_" + zlmServerConfig.getGeneralMediaServerId(); - if (redisUtil.get(key) == null) { + if (RedisUtil.get(key) == null) { SsrcConfig ssrcConfig = new SsrcConfig(zlmServerConfig.getGeneralMediaServerId(), null, sipConfig.getDomain()); serverItem.setSsrcConfig(ssrcConfig); }else { - MediaServerItem mediaServerItemInRedis = (MediaServerItem)redisUtil.get(key); + MediaServerItem mediaServerItemInRedis = (MediaServerItem)RedisUtil.get(key); serverItem.setSsrcConfig(mediaServerItemInRedis.getSsrcConfig()); } - redisUtil.set(key, serverItem); + RedisUtil.set(key, serverItem); resetOnlineServerItem(serverItem); - updateMediaServerKeepalive(serverItem.getId(), null); if (serverItem.isAutoConfig()) { setZLMConfig(serverItem, "0".equals(zlmServerConfig.getHookEnable())); } @@ -446,15 +420,15 @@ // 鏇存柊缂撳瓨 String key = VideoManagerConstants.MEDIA_SERVERS_ONLINE_PREFIX + userSetting.getServerId(); // 浣跨敤zset鐨勫垎鏁颁綔涓哄綋鍓嶅苟鍙戦噺锛� 榛樿鍊艰缃负0 - if (redisUtil.zScore(key, serverItem.getId()) == null) { // 涓嶅瓨鍦ㄥ垯璁剧疆榛樿鍊� 宸插瓨鍦ㄥ垯閲嶇疆 - redisUtil.zAdd(key, serverItem.getId(), 0L); + if (RedisUtil.zScore(key, serverItem.getId()) == null) { // 涓嶅瓨鍦ㄥ垯璁剧疆榛樿鍊� 宸插瓨鍦ㄥ垯閲嶇疆 + RedisUtil.zAdd(key, serverItem.getId(), 0L); // 鏌ヨ鏈嶅姟娴佹暟閲� zlmresTfulUtils.getMediaList(serverItem, null, null, "rtmp",(mediaList ->{ Integer code = mediaList.getInteger("code"); if (code == 0) { JSONArray data = mediaList.getJSONArray("data"); if (data != null) { - redisUtil.zAdd(key, serverItem.getId(), data.size()); + RedisUtil.zAdd(key, serverItem.getId(), data.size()); } } })); @@ -471,14 +445,14 @@ return; } String key = VideoManagerConstants.MEDIA_SERVERS_ONLINE_PREFIX + userSetting.getServerId(); - redisUtil.zIncrScore(key, mediaServerId, 1); + RedisUtil.zIncrScore(key, mediaServerId, 1); } @Override public void removeCount(String mediaServerId) { String key = VideoManagerConstants.MEDIA_SERVERS_ONLINE_PREFIX + userSetting.getServerId(); - redisUtil.zIncrScore(key, mediaServerId, - 1); + RedisUtil.zIncrScore(key, mediaServerId, - 1); } /** @@ -489,18 +463,15 @@ public MediaServerItem getMediaServerForMinimumLoad() { String key = VideoManagerConstants.MEDIA_SERVERS_ONLINE_PREFIX + userSetting.getServerId(); - if (redisUtil.zSize(key) == null || redisUtil.zSize(key) == 0) { - logger.info("鑾峰彇璐熻浇鏈�浣庣殑鑺傜偣鏃舵棤鍦ㄧ嚎鑺傜偣锛屽惎鍔ㄩ噸杩炴満鍒�"); - //鍚姩閲嶈繛 - reloadZlm(); - if (redisUtil.zSize(key) == null || redisUtil.zSize(key) == 0) { + if (RedisUtil.zSize(key) == null || RedisUtil.zSize(key) == 0) { + if (RedisUtil.zSize(key) == null || RedisUtil.zSize(key) == 0) { logger.info("鑾峰彇璐熻浇鏈�浣庣殑鑺傜偣鏃舵棤鍦ㄧ嚎鑺傜偣"); return null; } } // 鑾峰彇鍒嗘暟鏈�浣庣殑锛屽強骞跺彂鏈�浣庣殑 - Set<Object> objects = redisUtil.ZRange(key, 0, -1); + Set<Object> objects = RedisUtil.ZRange(key, 0, -1); ArrayList<Object> mediaServerObjectS = new ArrayList<>(objects); String mediaServerId = (String)mediaServerObjectS.get(0); @@ -550,7 +521,7 @@ // 鏈�澶氱瓑寰呮湭鍒濆鍖栫殑Track鏃堕棿锛屽崟浣嶆绉掞紝瓒呮椂涔嬪悗浼氬拷鐣ユ湭鍒濆鍖栫殑Track, 璁剧疆姝ら�夐」浼樺寲閭d簺闊抽閿欒鐨勪笉瑙勮寖娴侊紝 // 绛墇lm鏀寔缁欐瘡涓猺tpServer璁剧疆鍏抽棴闊抽鐨勬椂鍊欏彲浠ヤ笉璁剧疆姝ら�夐」 // param.put("general.wait_track_ready_ms", "3000" ); - if (mediaServerItem.isRtpEnable() && !StringUtils.isEmpty(mediaServerItem.getRtpPortRange())) { + if (mediaServerItem.isRtpEnable() && !ObjectUtils.isEmpty(mediaServerItem.getRtpPortRange())) { param.put("rtp_proxy.port_range", mediaServerItem.getRtpPortRange().replace(",", "-")); } @@ -577,12 +548,9 @@ @Override - public WVPResult<MediaServerItem> checkMediaServer(String ip, int port, String secret) { - WVPResult<MediaServerItem> result = new WVPResult<>(); + public MediaServerItem checkMediaServer(String ip, int port, String secret) { if (mediaServerMapper.queryOneByHostAndPort(ip, port) != null) { - result.setCode(-1); - result.setMsg("姝よ繛鎺ュ凡瀛樺湪"); - return result; + throw new ControllerException(ErrorCode.ERROR100.getCode(), "姝よ繛鎺ュ凡瀛樺湪"); } MediaServerItem mediaServerItem = new MediaServerItem(); mediaServerItem.setIp(ip); @@ -590,21 +558,15 @@ mediaServerItem.setSecret(secret); JSONObject responseJSON = zlmresTfulUtils.getMediaServerConfig(mediaServerItem); if (responseJSON == null) { - result.setCode(-1); - result.setMsg("杩炴帴澶辫触"); - return result; + throw new ControllerException(ErrorCode.ERROR100.getCode(), "杩炴帴澶辫触"); } JSONArray data = responseJSON.getJSONArray("data"); ZLMServerConfig zlmServerConfig = JSON.parseObject(JSON.toJSONString(data.get(0)), ZLMServerConfig.class); if (zlmServerConfig == null) { - result.setCode(-1); - result.setMsg("璇诲彇閰嶇疆澶辫触"); - return result; + throw new ControllerException(ErrorCode.ERROR100.getCode(), "璇诲彇閰嶇疆澶辫触"); } if (mediaServerMapper.queryOne(zlmServerConfig.getGeneralMediaServerId()) != null) { - result.setCode(-1); - result.setMsg("濯掍綋鏈嶅姟ID [" + zlmServerConfig.getGeneralMediaServerId() + " ] 宸插瓨鍦紝璇蜂慨鏀瑰獟浣撴湇鍔″櫒閰嶇疆"); - return result; + throw new ControllerException(ErrorCode.ERROR100.getCode(), "濯掍綋鏈嶅姟ID [" + zlmServerConfig.getGeneralMediaServerId() + " ] 宸插瓨鍦紝璇蜂慨鏀瑰獟浣撴湇鍔″櫒閰嶇疆"); } mediaServerItem.setHttpSSlPort(zlmServerConfig.getHttpPort()); mediaServerItem.setRtmpPort(zlmServerConfig.getRtmpPort()); @@ -616,10 +578,7 @@ mediaServerItem.setHookIp(sipConfig.getIp()); mediaServerItem.setSdpIp(ip); mediaServerItem.setStreamNoneReaderDelayMS(zlmServerConfig.getGeneralStreamNoneReaderDelayMS()); - result.setCode(0); - result.setMsg("鎴愬姛"); - result.setData(mediaServerItem); - return result; + return mediaServerItem; } @Override @@ -643,9 +602,9 @@ @Override public void delete(String id) { - redisUtil.zRemove(VideoManagerConstants.MEDIA_SERVERS_ONLINE_PREFIX + userSetting.getServerId(), id); + RedisUtil.zRemove(VideoManagerConstants.MEDIA_SERVERS_ONLINE_PREFIX + userSetting.getServerId(), id); String key = VideoManagerConstants.MEDIA_SERVER_PREFIX + userSetting.getServerId() + "_" + id; - redisUtil.del(key); + RedisUtil.del(key); } @Override public void deleteDb(String id){ @@ -657,9 +616,14 @@ public void updateMediaServerKeepalive(String mediaServerId, JSONObject data) { MediaServerItem mediaServerItem = getOne(mediaServerId); if (mediaServerItem == null) { + // 缂撳瓨涓嶅瓨鍦紝浠庢暟鎹簱鏌ヨ锛屽鏋滄暟鎹簱涓嶅瓨鍦ㄥ垯鏄敊璇殑 + MediaServerItem mediaServerItemFromDatabase = getOneFromDatabase(mediaServerId); + if (mediaServerItemFromDatabase == null) { + return; + } // zlm杩炴帴閲嶈瘯 logger.warn("[鏇存柊ZLM 淇濇椿淇℃伅]澶辫触锛屾湭鎵惧埌娴佸獟浣撲俊鎭�,灏濊瘯閲嶈繛zlm"); - reloadZlm(); +// reloadZlm(); mediaServerItem = getOne(mediaServerId); if (mediaServerItem == null) { // zlm杩炴帴閲嶈瘯 @@ -669,7 +633,11 @@ } String key = VideoManagerConstants.MEDIA_SERVER_KEEPALIVE_PREFIX + userSetting.getServerId() + "_" + mediaServerId; int hookAliveInterval = mediaServerItem.getHookAliveInterval() + 2; - redisUtil.set(key, data, hookAliveInterval); + RedisUtil.set(key, data, hookAliveInterval); + } + + private MediaServerItem getOneFromDatabase(String mediaServerId) { + return mediaServerMapper.queryOne(mediaServerId); } @Override @@ -685,15 +653,6 @@ if (!mediaServerItemMap.containsKey(mediaServerItem.getId())) { delete(mediaServerItem.getId()); } - } - } - - public void reloadZlm(){ - try { - zlmRunner.run(); - Thread.sleep(500);//寤惰繜0.5绉掔紦鍐叉椂闂� - } catch (Exception e) { - logger.warn("灏濊瘯閲嶈繛zlm澶辫触锛�",e); } } } -- Gitblit v1.8.0