diff --git a/src/main/java/com/genersoft/iot/vmp/media/service/impl/MediaServerServiceImpl.java b/src/main/java/com/genersoft/iot/vmp/media/service/impl/MediaServerServiceImpl.java index 41f841f86..3380e8e5f 100755 --- a/src/main/java/com/genersoft/iot/vmp/media/service/impl/MediaServerServiceImpl.java +++ b/src/main/java/com/genersoft/iot/vmp/media/service/impl/MediaServerServiceImpl.java @@ -347,23 +347,15 @@ public class MediaServerServiceImpl implements IMediaServerService { } MediaServer mediaServerInRedis = getOne(mediaSerItem.getId()); - // 获取完整数据 - MediaServer mediaServerInDataBase = mediaServerMapper.queryOne(mediaSerItem.getId(), userSetting.getServerId()); - if (mediaServerInDataBase == null) { - return; + + if (mediaServerInRedis == null || !ssrcFactory.hasMediaServerSSRC(mediaSerItem.getId())) { + ssrcFactory.initMediaServerSSRC(mediaSerItem.getId(),null); } - mediaServerInDataBase.setStatus(mediaSerItem.isStatus()); - if (mediaServerInRedis == null || !ssrcFactory.hasMediaServerSSRC(mediaServerInDataBase.getId())) { - ssrcFactory.initMediaServerSSRC(mediaServerInDataBase.getId(),null); - } - if (mediaSerItem.getSecret() != null && !mediaServerInDataBase.getSecret().equals(mediaSerItem.getSecret())) { - mediaServerInDataBase.setSecret(mediaSerItem.getSecret()); - } - mediaServerInDataBase.setSecret(mediaSerItem.getSecret()); + String key = VideoManagerConstants.MEDIA_SERVER_PREFIX + userSetting.getServerId(); - redisTemplate.opsForHash().put(key, mediaServerInDataBase.getId(), mediaServerInDataBase); - if (mediaServerInDataBase.isStatus()) { - resetOnlineServerItem(mediaServerInDataBase); + redisTemplate.opsForHash().put(key, mediaSerItem.getId(), mediaSerItem); + if (mediaSerItem.isStatus()) { + resetOnlineServerItem(mediaSerItem); } } diff --git a/src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMMediaServerStatusManager.java b/src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMMediaServerStatusManager.java index a5f2a9507..69cb2d1bf 100644 --- a/src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMMediaServerStatusManager.java +++ b/src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMMediaServerStatusManager.java @@ -3,6 +3,7 @@ package com.genersoft.iot.vmp.media.zlm; import com.alibaba.fastjson2.JSON; import com.alibaba.fastjson2.JSONObject; import com.genersoft.iot.vmp.conf.DynamicTask; +import com.genersoft.iot.vmp.conf.UserSetting; import com.genersoft.iot.vmp.gb28181.event.EventPublisher; import com.genersoft.iot.vmp.media.bean.MediaServer; import com.genersoft.iot.vmp.media.event.mediaServer.MediaServerChangeEvent; @@ -48,6 +49,9 @@ public class ZLMMediaServerStatusManager { @Autowired private DynamicTask dynamicTask; + @Autowired + private UserSetting userSetting; + @Value("${server.ssl.enabled:false}") private boolean sslEnabled; @@ -176,26 +180,31 @@ public class ZLMMediaServerStatusManager { } private void online(MediaServer mediaServer, ZLMServerConfig config) { - if (config == null) { - ZLMResult> mediaServerConfig = zlmresTfulUtils.getMediaServerConfig(mediaServer); - List data = mediaServerConfig.getData(); - if (data != null && !data.isEmpty()) { - config = JSON.parseObject(JSON.toJSONString(data.get(0)), ZLMServerConfig.class); - }else { - log.info("[ZLM-连接成功] 读取流媒体配置失败 ID:{}, 地址: {}:{}", mediaServer.getId(), mediaServer.getIp(), mediaServer.getHttpPort()); - return; + MediaServer mediaServerInDb = mediaServerService.getOneFromDatabase(mediaServer.getId()); + if (mediaServerInDb == null || mediaServerService.getOne(mediaServer.getId()) == null) { + log.info("[ZLM-连接成功] ID:{}, 地址: {}:{}", mediaServer.getId(), mediaServer.getIp(), mediaServer.getHttpPort()); + if (config == null) { + ZLMResult> mediaServerConfig = zlmresTfulUtils.getMediaServerConfig(mediaServer); + List data = mediaServerConfig.getData(); + if (data != null && !data.isEmpty()) { + config = JSON.parseObject(JSON.toJSONString(data.get(0)), ZLMServerConfig.class); + }else { + log.info("[ZLM-连接成功] 读取流媒体配置失败 ID:{}, 地址: {}:{}", mediaServer.getId(), mediaServer.getIp(), mediaServer.getHttpPort()); + return; + } } + // 发送上线通知 + eventPublisher.mediaServerOnlineEventPublish(mediaServer); + mediaServer.setStatus(true); + mediaServer.setServerId(userSetting.getServerId()); + mediaServer.setHookAliveInterval(config.getHookAliveInterval()); + initPort(mediaServer, config); + mediaServerService.update(mediaServer); + setZLMConfig(mediaServer, true); } offlineZlmPrimaryMap.remove(mediaServer.getId()); offlineZlmsecondaryMap.remove(mediaServer.getId()); offlineZlmTimeMap.remove(mediaServer.getId()); - mediaServer.setStatus(true); - mediaServer.setHookAliveInterval(config.getHookAliveInterval()); - initPort(mediaServer, config); - log.info("[ZLM-连接成功] ID:{}, 地址: {}:{}", mediaServer.getId(), mediaServer.getIp(), mediaServer.getHttpPort()); - // 发送上线通知 - eventPublisher.mediaServerOnlineEventPublish(mediaServer); - mediaServerService.update(mediaServer); // 设置两次心跳未收到则认为zlm离线 String key = "zlm-keepalive-" + mediaServer.getId(); dynamicTask.startDelay(key, ()->{ diff --git a/src/main/java/com/genersoft/iot/vmp/storager/dao/MediaServerMapper.java b/src/main/java/com/genersoft/iot/vmp/storager/dao/MediaServerMapper.java index f063bf341..27caef059 100755 --- a/src/main/java/com/genersoft/iot/vmp/storager/dao/MediaServerMapper.java +++ b/src/main/java/com/genersoft/iot/vmp/storager/dao/MediaServerMapper.java @@ -95,7 +95,7 @@ public interface MediaServerMapper { ", send_rtp_port_range=#{sendRtpPortRange}, secret=#{secret}, record_assist_port=#{recordAssistPort}" + ", hook_alive_interval=#{hookAliveInterval}, record_day=#{recordDay}, record_path=#{recordPath}" + ", server_id=#{serverId}, type=#{type}" + - "WHERE id=#{id}"+ + " WHERE id=#{id}"+ " "}) int update(MediaServer mediaServerItem); @@ -130,7 +130,7 @@ public interface MediaServerMapper { ", transcode_suffix=#{transcodeSuffix}" + ", hook_alive_interval=#{hookAliveInterval}" + ", server_id=#{serverId}" + - "WHERE ip=#{ip} and http_port=#{httpPort}"+ + " WHERE ip=#{ip} and http_port=#{httpPort}"+ " "}) int updateByHostAndPort(MediaServer mediaServerItem);