From 8edd72fc23f1f7eee455a7ab485235426a1c8f66 Mon Sep 17 00:00:00 2001 From: lin <648540858@qq.com> Date: Sat, 13 Dec 2025 20:34:41 +0800 Subject: [PATCH] =?UTF-8?q?=E4=B8=BA=E7=9B=AE=E5=BD=95=E5=90=8C=E6=AD=A5?= =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E9=A6=96=E4=B8=AA=E6=B6=88=E6=81=AF=E7=AD=89?= =?UTF-8?q?=E5=BE=85=E6=97=B6=E9=95=BF=EF=BC=8C=E9=BB=98=E8=AE=A4=E4=B8=A4?= =?UTF-8?q?=E5=88=86=E9=92=9F=EF=BC=8C=E5=85=BC=E5=AE=B9=E4=B8=8B=E7=BA=A7?= =?UTF-8?q?=E6=95=B0=E6=8D=AE=E9=87=8F=E5=A4=A7=EF=BC=8C=E9=9C=80=E8=A6=81?= =?UTF-8?q?=E9=95=BF=E6=97=B6=E9=97=B4=E5=90=8E=E6=89=8D=E8=83=BD=E8=BF=94?= =?UTF-8?q?=E5=9B=9E=E7=9A=84=E6=83=85=E5=86=B5,=E4=BF=AE=E5=A4=8Dzlm?= =?UTF-8?q?=E4=B8=8A=E7=BA=BF=E6=9C=AA=E4=BF=AE=E6=94=B9=E9=85=8D=E7=BD=AE?= =?UTF-8?q?=E7=9A=84=EF=BC=A2=EF=BC=B5=EF=BC=A7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/impl/MediaServerServiceImpl.java | 22 ++++------- .../zlm/ZLMMediaServerStatusManager.java | 39 ++++++++++++------- .../vmp/storager/dao/MediaServerMapper.java | 4 +- 3 files changed, 33 insertions(+), 32 deletions(-) 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);