mirror of
https://gitee.com/pan648540858/wvp-GB28181-pro.git
synced 2026-05-24 14:07:50 +08:00
为目录同步增加首个消息等待时长,默认两分钟,兼容下级数据量大,需要长时间后才能返回的情况,修复zlm上线未修改配置的BUG
This commit is contained in:
parent
79e7782700
commit
8edd72fc23
@ -347,23 +347,15 @@ public class MediaServerServiceImpl implements IMediaServerService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
MediaServer mediaServerInRedis = getOne(mediaSerItem.getId());
|
MediaServer mediaServerInRedis = getOne(mediaSerItem.getId());
|
||||||
// 获取完整数据
|
|
||||||
MediaServer mediaServerInDataBase = mediaServerMapper.queryOne(mediaSerItem.getId(), userSetting.getServerId());
|
if (mediaServerInRedis == null || !ssrcFactory.hasMediaServerSSRC(mediaSerItem.getId())) {
|
||||||
if (mediaServerInDataBase == null) {
|
ssrcFactory.initMediaServerSSRC(mediaSerItem.getId(),null);
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
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();
|
String key = VideoManagerConstants.MEDIA_SERVER_PREFIX + userSetting.getServerId();
|
||||||
redisTemplate.opsForHash().put(key, mediaServerInDataBase.getId(), mediaServerInDataBase);
|
redisTemplate.opsForHash().put(key, mediaSerItem.getId(), mediaSerItem);
|
||||||
if (mediaServerInDataBase.isStatus()) {
|
if (mediaSerItem.isStatus()) {
|
||||||
resetOnlineServerItem(mediaServerInDataBase);
|
resetOnlineServerItem(mediaSerItem);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -3,6 +3,7 @@ package com.genersoft.iot.vmp.media.zlm;
|
|||||||
import com.alibaba.fastjson2.JSON;
|
import com.alibaba.fastjson2.JSON;
|
||||||
import com.alibaba.fastjson2.JSONObject;
|
import com.alibaba.fastjson2.JSONObject;
|
||||||
import com.genersoft.iot.vmp.conf.DynamicTask;
|
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.gb28181.event.EventPublisher;
|
||||||
import com.genersoft.iot.vmp.media.bean.MediaServer;
|
import com.genersoft.iot.vmp.media.bean.MediaServer;
|
||||||
import com.genersoft.iot.vmp.media.event.mediaServer.MediaServerChangeEvent;
|
import com.genersoft.iot.vmp.media.event.mediaServer.MediaServerChangeEvent;
|
||||||
@ -48,6 +49,9 @@ public class ZLMMediaServerStatusManager {
|
|||||||
@Autowired
|
@Autowired
|
||||||
private DynamicTask dynamicTask;
|
private DynamicTask dynamicTask;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private UserSetting userSetting;
|
||||||
|
|
||||||
@Value("${server.ssl.enabled:false}")
|
@Value("${server.ssl.enabled:false}")
|
||||||
private boolean sslEnabled;
|
private boolean sslEnabled;
|
||||||
|
|
||||||
@ -176,26 +180,31 @@ public class ZLMMediaServerStatusManager {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void online(MediaServer mediaServer, ZLMServerConfig config) {
|
private void online(MediaServer mediaServer, ZLMServerConfig config) {
|
||||||
if (config == null) {
|
MediaServer mediaServerInDb = mediaServerService.getOneFromDatabase(mediaServer.getId());
|
||||||
ZLMResult<List<JSONObject>> mediaServerConfig = zlmresTfulUtils.getMediaServerConfig(mediaServer);
|
if (mediaServerInDb == null || mediaServerService.getOne(mediaServer.getId()) == null) {
|
||||||
List<JSONObject> data = mediaServerConfig.getData();
|
log.info("[ZLM-连接成功] ID:{}, 地址: {}:{}", mediaServer.getId(), mediaServer.getIp(), mediaServer.getHttpPort());
|
||||||
if (data != null && !data.isEmpty()) {
|
if (config == null) {
|
||||||
config = JSON.parseObject(JSON.toJSONString(data.get(0)), ZLMServerConfig.class);
|
ZLMResult<List<JSONObject>> mediaServerConfig = zlmresTfulUtils.getMediaServerConfig(mediaServer);
|
||||||
}else {
|
List<JSONObject> data = mediaServerConfig.getData();
|
||||||
log.info("[ZLM-连接成功] 读取流媒体配置失败 ID:{}, 地址: {}:{}", mediaServer.getId(), mediaServer.getIp(), mediaServer.getHttpPort());
|
if (data != null && !data.isEmpty()) {
|
||||||
return;
|
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());
|
offlineZlmPrimaryMap.remove(mediaServer.getId());
|
||||||
offlineZlmsecondaryMap.remove(mediaServer.getId());
|
offlineZlmsecondaryMap.remove(mediaServer.getId());
|
||||||
offlineZlmTimeMap.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离线
|
// 设置两次心跳未收到则认为zlm离线
|
||||||
String key = "zlm-keepalive-" + mediaServer.getId();
|
String key = "zlm-keepalive-" + mediaServer.getId();
|
||||||
dynamicTask.startDelay(key, ()->{
|
dynamicTask.startDelay(key, ()->{
|
||||||
|
|||||||
@ -95,7 +95,7 @@ public interface MediaServerMapper {
|
|||||||
", send_rtp_port_range=#{sendRtpPortRange}, secret=#{secret}, record_assist_port=#{recordAssistPort}" +
|
", send_rtp_port_range=#{sendRtpPortRange}, secret=#{secret}, record_assist_port=#{recordAssistPort}" +
|
||||||
", hook_alive_interval=#{hookAliveInterval}, record_day=#{recordDay}, record_path=#{recordPath}" +
|
", hook_alive_interval=#{hookAliveInterval}, record_day=#{recordDay}, record_path=#{recordPath}" +
|
||||||
", server_id=#{serverId}, type=#{type}" +
|
", server_id=#{serverId}, type=#{type}" +
|
||||||
"WHERE id=#{id}"+
|
" WHERE id=#{id}"+
|
||||||
" </script>"})
|
" </script>"})
|
||||||
int update(MediaServer mediaServerItem);
|
int update(MediaServer mediaServerItem);
|
||||||
|
|
||||||
@ -130,7 +130,7 @@ public interface MediaServerMapper {
|
|||||||
"<if test=\"transcodeSuffix != null\">, transcode_suffix=#{transcodeSuffix}</if>" +
|
"<if test=\"transcodeSuffix != null\">, transcode_suffix=#{transcodeSuffix}</if>" +
|
||||||
"<if test=\"hookAliveInterval != null\">, hook_alive_interval=#{hookAliveInterval}</if>" +
|
"<if test=\"hookAliveInterval != null\">, hook_alive_interval=#{hookAliveInterval}</if>" +
|
||||||
"<if test=\"serverId != null\">, server_id=#{serverId}</if>" +
|
"<if test=\"serverId != null\">, server_id=#{serverId}</if>" +
|
||||||
"WHERE ip=#{ip} and http_port=#{httpPort}"+
|
" WHERE ip=#{ip} and http_port=#{httpPort}"+
|
||||||
" </script>"})
|
" </script>"})
|
||||||
int updateByHostAndPort(MediaServer mediaServerItem);
|
int updateByHostAndPort(MediaServer mediaServerItem);
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user