From ecf4fbb68445cf412d5e946f67f92c9928df8273 Mon Sep 17 00:00:00 2001 From: 648540858 <648540858@qq.com> Date: 星期一, 22 八月 2022 16:53:16 +0800 Subject: [PATCH] Merge branch 'wvp-28181-2.0' --- src/main/java/com/genersoft/iot/vmp/service/impl/MediaServerServiceImpl.java | 121 +++++++++++++++------------------------- 1 files changed, 45 insertions(+), 76 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 eb02002..3a49f44 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; @@ -58,9 +61,6 @@ @Autowired private SipConfig sipConfig; - @Autowired - private ZLMRunner zlmRunner; - @Value("${server.ssl.enabled:false}") private boolean sslEnabled; @@ -88,8 +88,6 @@ @Autowired private ZLMRTPServerFactory zlmrtpServerFactory; - @Autowired - private RedisUtil redisUtil; @Autowired private IVideoManagerStorage storager; @@ -107,19 +105,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); } } @@ -161,7 +159,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); } } @@ -194,7 +192,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); } /** @@ -203,7 +201,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); } @@ -225,19 +223,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); } @@ -263,13 +261,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); @@ -287,7 +285,7 @@ return null; } String key = VideoManagerConstants.MEDIA_SERVER_PREFIX + userSetting.getServerId() + "_" + mediaServerId; - return (MediaServerItem)redisUtil.get(key); + return (MediaServerItem)RedisUtil.get(key); } @Override @@ -299,12 +297,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); @@ -314,26 +311,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 @@ -401,20 +391,20 @@ } 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); if (serverItem.isAutoConfig()) { setZLMConfig(serverItem, "0".equals(zlmServerConfig.getHookEnable())); @@ -435,15 +425,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()); } } })); @@ -460,14 +450,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); } /** @@ -478,15 +468,15 @@ public MediaServerItem getMediaServerForMinimumLoad() { String key = VideoManagerConstants.MEDIA_SERVERS_ONLINE_PREFIX + userSetting.getServerId(); - 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) { + 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); @@ -536,7 +526,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(",", "-")); } @@ -563,12 +553,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); @@ -576,21 +563,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()); @@ -602,10 +583,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 @@ -629,9 +607,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){ @@ -650,7 +628,7 @@ } // zlm杩炴帴閲嶈瘯 logger.warn("[鏇存柊ZLM 淇濇椿淇℃伅]澶辫触锛屾湭鎵惧埌娴佸獟浣撲俊鎭�,灏濊瘯閲嶈繛zlm"); - reloadZlm(); +// reloadZlm(); mediaServerItem = getOne(mediaServerId); if (mediaServerItem == null) { // zlm杩炴帴閲嶈瘯 @@ -660,7 +638,7 @@ } 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) { @@ -680,15 +658,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