修复非默认媒体节点状态异常

This commit is contained in:
lin
2026-01-04 15:20:55 +08:00
parent 3c4cc4c98e
commit ae44feef5b
5 changed files with 37 additions and 24 deletions

View File

@@ -339,23 +339,23 @@ public class MediaServerServiceImpl implements IMediaServerService {
}
@Override
public void update(MediaServer mediaSerItem) {
if (mediaServerMapper.queryOne(mediaSerItem.getId(), userSetting.getServerId()) != null) {
mediaServerMapper.update(mediaSerItem);
public void update(MediaServer mediaServer) {
if (mediaServerMapper.queryOne(mediaServer.getId()) != null) {
mediaServerMapper.update(mediaServer);
}else {
mediaServerMapper.add(mediaSerItem);
mediaServerMapper.add(mediaServer);
}
MediaServer mediaServerInRedis = getOne(mediaSerItem.getId());
MediaServer mediaServerInRedis = getOne(mediaServer.getId());
if (mediaServerInRedis == null || !ssrcFactory.hasMediaServerSSRC(mediaSerItem.getId())) {
ssrcFactory.initMediaServerSSRC(mediaSerItem.getId(),null);
if (mediaServerInRedis == null || !ssrcFactory.hasMediaServerSSRC(mediaServer.getId())) {
ssrcFactory.initMediaServerSSRC(mediaServer.getId(),null);
}
String key = VideoManagerConstants.MEDIA_SERVER_PREFIX + userSetting.getServerId();
redisTemplate.opsForHash().put(key, mediaSerItem.getId(), mediaSerItem);
if (mediaSerItem.isStatus()) {
resetOnlineServerItem(mediaSerItem);
redisTemplate.opsForHash().put(key, mediaServer.getId(), mediaServer);
if (mediaServer.isStatus()) {
resetOnlineServerItem(mediaServer);
}
}
@@ -441,7 +441,7 @@ public class MediaServerServiceImpl implements IMediaServerService {
MediaServer mediaServer = (MediaServer) redisTemplate.opsForHash().get(key, mediaServerId);
if (mediaServer == null) {
// 尝试从数据库获取
mediaServer = mediaServerMapper.queryOne(mediaServerId, userSetting.getServerId());
mediaServer = mediaServerMapper.queryOneWithServerId(mediaServerId, userSetting.getServerId());
if (mediaServer != null) {
redisTemplate.opsForHash().put(key, mediaServer.getId(), mediaServer);
}
@@ -488,7 +488,7 @@ public class MediaServerServiceImpl implements IMediaServerService {
log.info("[添加媒体节点] 失败, mediaServer的类型为空");
return;
}
if (mediaServerMapper.queryOne(mediaServer.getId(), userSetting.getServerId()) != null) {
if (mediaServerMapper.queryOne(mediaServer.getId()) != null) {
log.info("[添加媒体节点] 失败, 媒体服务ID已存在请修改媒体服务器配置, {}", mediaServer.getId());
throw new ControllerException(ErrorCode.ERROR100.getCode(),"保存失败媒体服务ID [ " + mediaServer.getId() + " ] 已存在,请修改媒体服务器配置");
}
@@ -597,7 +597,7 @@ public class MediaServerServiceImpl implements IMediaServerService {
}
MediaServer mediaServer = mediaNodeServerService.checkMediaServer(ip, port, secret);
if (mediaServer != null) {
if (mediaServerMapper.queryOne(mediaServer.getId(), userSetting.getServerId()) != null) {
if (mediaServerMapper.queryOne(mediaServer.getId()) != null) {
throw new ControllerException(ErrorCode.ERROR100.getCode(), "媒体服务ID [" + mediaServer.getId() + " ] 已存在,请修改媒体服务器配置");
}
}
@@ -637,7 +637,7 @@ public class MediaServerServiceImpl implements IMediaServerService {
@Override
public MediaServer getOneFromDatabase(String mediaServerId) {
return mediaServerMapper.queryOne(mediaServerId, userSetting.getServerId());
return mediaServerMapper.queryOne(mediaServerId);
}
@Override

View File

@@ -180,8 +180,8 @@ public class ZLMMediaServerStatusManager {
}
private void online(MediaServer mediaServer, ZLMServerConfig config) {
MediaServer mediaServerInDb = mediaServerService.getOneFromDatabase(mediaServer.getId());
if (mediaServerInDb == null || mediaServerService.getOne(mediaServer.getId()) == null) {
MediaServer mediaServerInDb = mediaServerService.getOne(mediaServer.getId());
if (mediaServerInDb == null || !mediaServerInDb.isStatus()) {
log.info("[ZLM-连接成功] ID{}, 地址: {}:{}", mediaServer.getId(), mediaServer.getIp(), mediaServer.getHttpPort());
if (config == null) {
ZLMResult<List<JSONObject>> mediaServerConfig = zlmresTfulUtils.getMediaServerConfig(mediaServer);
@@ -200,7 +200,7 @@ public class ZLMMediaServerStatusManager {
mediaServer.setHookAliveInterval(config.getHookAliveInterval());
initPort(mediaServer, config);
mediaServerService.update(mediaServer);
setZLMConfig(mediaServer, true);
setZLMConfig(mediaServer, false);
}
offlineZlmPrimaryMap.remove(mediaServer.getId());
offlineZlmsecondaryMap.remove(mediaServer.getId());
@@ -233,7 +233,7 @@ public class ZLMMediaServerStatusManager {
mediaServerItem.setTranscodeSuffix(zlmServerConfig.getTranscodeSuffix());
}
mediaServerItem.setRtpProxyPort(zlmServerConfig.getRtpProxyPort());
mediaServerItem.setHookAliveInterval(10F);
mediaServerItem.setHookAliveInterval(zlmServerConfig.getHookAliveInterval());
}
public void setZLMConfig(MediaServer mediaServerItem, boolean restart) {
@@ -264,7 +264,6 @@ public class ZLMMediaServerStatusManager {
param.put("hook.on_rtp_server_timeout",String.format("%s/on_rtp_server_timeout", hookPrefix));
param.put("hook.on_record_mp4",String.format("%s/on_record_mp4", hookPrefix));
param.put("hook.timeoutSec","30");
param.put("hook.alive_interval", mediaServerItem.getHookAliveInterval());
// 推流断开后可以在超时时间内重新连接上继续推流,这样播放器会接着播放。
// 置0关闭此特性(推流断开会导致立即断开播放器)
// 此参数不应大于播放器超时时间

View File

@@ -134,8 +134,11 @@ public interface MediaServerMapper {
" </script>"})
int updateByHostAndPort(MediaServer mediaServerItem);
@Select("SELECT * FROM wvp_media_server WHERE id=#{id}")
MediaServer queryOne(@Param("id") String id);
@Select("SELECT * FROM wvp_media_server WHERE id=#{id} and server_id = #{serverId}")
MediaServer queryOne(@Param("id") String id, @Param("serverId") String serverId);
MediaServer queryOneWithServerId(@Param("id") String id, @Param("serverId") String serverId);
@Select("SELECT * FROM wvp_media_server where server_id = #{serverId}")
List<MediaServer> queryAll(@Param("serverId") String serverId);

View File

@@ -257,6 +257,13 @@ export default {
this.sendRtpPortRange2 = 60000
this.serverCheck = 1
})
.catch(() => {
this.$message({
showClose: true,
message: '测试失败,请检查媒体服务地址及端口是否正确!',
type: 'warning'
})
})
},
next: function() {
this.currentStep = 2

View File

@@ -10,9 +10,12 @@
<div v-if="item.type === 'abl'" class="card-img-abl" />
<div style="padding: 14px;text-align: left">
<span style="font-size: 16px">{{ item.id }}</span>
<el-button v-if="!item.defaultServer" icon="el-icon-edit" style="padding: 0;float: right;" type="text" @click="edit(item)">编辑</el-button>
<el-button v-if="item.defaultServer" icon="el-icon-edit" style="padding: 0;float: right;" type="text" @click="edit(item)">查看</el-button>
<el-button v-if="!item.defaultServer" icon="el-icon-delete" style="margin-right: 10px;padding: 0;float: right;" type="text" @click="del(item)">移除</el-button>
<div style="float: right">
<el-button v-if="!item.defaultServer" icon="el-icon-delete" circle size="mini" @click="del(item)"></el-button>
<el-button v-if="!item.defaultServer" icon="el-icon-edit" circle size="mini" @click="edit(item)"></el-button>
<el-button v-if="item.defaultServer" icon="el-icon-edit" circle size="mini" @click="edit(item)"></el-button>
</div>
<div style="margin-top: 13px; line-height: 12px; ">
<span style="font-size: 14px; color: #999; margin-top: 5px; ">{{ item.ip }}</span>
<span style="font-size: 14px; color: #999; margin-top: 5px; float: right;">{{ item.createTime }}</span>
@@ -87,6 +90,7 @@ export default {
type: 'success',
message: '删除成功!'
})
this.getServerList()
})
}).catch(() => {
})
@@ -94,7 +98,7 @@ export default {
getNumberByWidth() {
const candidateNums = [1, 2, 3, 4, 6, 8, 12, 24]
const clientWidth = window.innerWidth - 30
const interval = 20
const interval = 40
const itemWidth = 360
const num = (clientWidth + interval) / (itemWidth + interval)
const result = Math.ceil(24 / num)