适配zlm的hook保活
This commit is contained in:
@@ -1,5 +1,6 @@
|
||||
package com.genersoft.iot.vmp.service;
|
||||
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import com.genersoft.iot.vmp.gb28181.bean.Device;
|
||||
import com.genersoft.iot.vmp.media.zlm.ZLMServerConfig;
|
||||
import com.genersoft.iot.vmp.media.zlm.dto.MediaServerItem;
|
||||
@@ -30,6 +31,13 @@ public interface IMediaServerService {
|
||||
*/
|
||||
void zlmServerOnline(ZLMServerConfig zlmServerConfig);
|
||||
|
||||
/**
|
||||
* 节点离线
|
||||
* @param mediaServerId
|
||||
* @return
|
||||
*/
|
||||
void zlmServerOffline(String mediaServerId);
|
||||
|
||||
MediaServerItem getMediaServerForMinimumLoad();
|
||||
|
||||
void setZLMConfig(MediaServerItem mediaServerItem);
|
||||
@@ -67,4 +75,6 @@ public interface IMediaServerService {
|
||||
void delete(String id);
|
||||
|
||||
MediaServerItem getDefaultMediaServer();
|
||||
|
||||
void updateMediaServerKeepalive(String zlmServerConfig, JSONObject data);
|
||||
}
|
||||
|
||||
@@ -2,6 +2,7 @@ package com.genersoft.iot.vmp.service;
|
||||
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import com.genersoft.iot.vmp.common.StreamInfo;
|
||||
import com.genersoft.iot.vmp.media.zlm.ZLMServerConfig;
|
||||
import com.genersoft.iot.vmp.media.zlm.dto.MediaItem;
|
||||
import com.genersoft.iot.vmp.media.zlm.dto.MediaServerItem;
|
||||
import com.genersoft.iot.vmp.media.zlm.dto.StreamProxyItem;
|
||||
@@ -73,4 +74,19 @@ public interface IStreamProxyService {
|
||||
* @return
|
||||
*/
|
||||
StreamProxyItem getStreamProxyByAppAndStream(String app, String streamId);
|
||||
|
||||
|
||||
/**
|
||||
* 新的节点加入
|
||||
* @param zlmServerConfig
|
||||
* @return
|
||||
*/
|
||||
void zlmServerOnline(ZLMServerConfig zlmServerConfig);
|
||||
|
||||
/**
|
||||
* 节点离线
|
||||
* @param mediaServerId
|
||||
* @return
|
||||
*/
|
||||
void zlmServerOffline(String mediaServerId);
|
||||
}
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
package com.genersoft.iot.vmp.service;
|
||||
|
||||
import com.genersoft.iot.vmp.gb28181.bean.GbStream;
|
||||
import com.genersoft.iot.vmp.media.zlm.ZLMServerConfig;
|
||||
import com.genersoft.iot.vmp.media.zlm.dto.MediaItem;
|
||||
import com.genersoft.iot.vmp.media.zlm.dto.MediaServerItem;
|
||||
import com.genersoft.iot.vmp.media.zlm.dto.StreamPushItem;
|
||||
@@ -46,4 +47,18 @@ public interface IStreamPushService {
|
||||
*/
|
||||
boolean stop(String app, String streamId);
|
||||
|
||||
/**
|
||||
* 新的节点加入
|
||||
* @param zlmServerConfig
|
||||
* @return
|
||||
*/
|
||||
void zlmServerOnline(ZLMServerConfig zlmServerConfig);
|
||||
|
||||
/**
|
||||
* 节点离线
|
||||
* @param mediaServerId
|
||||
* @return
|
||||
*/
|
||||
void zlmServerOffline(String mediaServerId);
|
||||
|
||||
}
|
||||
|
||||
@@ -97,6 +97,7 @@ public class MediaServerServiceImpl implements IMediaServerService, CommandLineR
|
||||
if (!redisUtil.hasKey(key)) {
|
||||
redisUtil.set(key, mediaServerItem);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -272,6 +273,7 @@ public class MediaServerServiceImpl implements IMediaServerService, CommandLineR
|
||||
WVPResult<String> result = new WVPResult<>();
|
||||
mediaServerItem.setCreateTime(this.format.format(System.currentTimeMillis()));
|
||||
mediaServerItem.setUpdateTime(this.format.format(System.currentTimeMillis()));
|
||||
mediaServerItem.setHookAliveInterval(120);
|
||||
JSONObject responseJSON = zlmresTfulUtils.getMediaServerConfig(mediaServerItem);
|
||||
if (responseJSON != null) {
|
||||
JSONArray data = responseJSON.getJSONArray("data");
|
||||
@@ -329,6 +331,7 @@ public class MediaServerServiceImpl implements IMediaServerService, CommandLineR
|
||||
logger.warn("[未注册的zlm] 拒接接入:来自{}:{}", zlmServerConfig.getIp(),zlmServerConfig.getHttpPort() );
|
||||
return;
|
||||
}
|
||||
serverItem.setHookAliveInterval(zlmServerConfig.getHookAliveInterval());
|
||||
if (serverItem.getHttpPort() == 0) {
|
||||
serverItem.setHttpPort(zlmServerConfig.getHttpPort());
|
||||
}
|
||||
@@ -350,87 +353,31 @@ public class MediaServerServiceImpl implements IMediaServerService, CommandLineR
|
||||
if (serverItem.getRtpProxyPort() == 0) {
|
||||
serverItem.setRtpProxyPort(zlmServerConfig.getRtpProxyPort());
|
||||
}
|
||||
if (StringUtils.isEmpty(serverItem.getId())) {
|
||||
serverItem.setId(zlmServerConfig.getGeneralMediaServerId());
|
||||
}
|
||||
serverItem.setStatus(true);
|
||||
if (StringUtils.isEmpty(serverItem.getId())) {
|
||||
serverItem.setId(zlmServerConfig.getGeneralMediaServerId());
|
||||
mediaServerMapper.updateByHostAndPort(serverItem);
|
||||
}else {
|
||||
mediaServerMapper.update(serverItem);
|
||||
}
|
||||
if (redisUtil.get(VideoManagerConstants.MEDIA_SERVER_PREFIX + userSetup.getServerId() + "_" + serverItem.getId()) == null) {
|
||||
String key = VideoManagerConstants.MEDIA_SERVER_PREFIX + userSetup.getServerId() + "_" + serverItem.getId();
|
||||
if (redisUtil.get(key) == null) {
|
||||
SsrcConfig ssrcConfig = new SsrcConfig(serverItem.getId(), null, sipConfig.getDomain());
|
||||
serverItem.setSsrcConfig(ssrcConfig);
|
||||
redisUtil.set(VideoManagerConstants.MEDIA_SERVER_PREFIX + userSetup.getServerId() + "_" + serverItem.getId(), serverItem);
|
||||
redisUtil.set(key, serverItem);
|
||||
}
|
||||
|
||||
serverItem.setStatus(true);
|
||||
resetOnlineServerItem(serverItem);
|
||||
updateMediaServerKeepalive(serverItem.getId(), null);
|
||||
setZLMConfig(serverItem);
|
||||
}
|
||||
|
||||
// if (zlmServerConfig.getGeneralMediaServerId().equals(mediaConfig.getId())
|
||||
// || (zlmServerConfig.getIp().equals(mediaConfig.getIp()) && zlmServerConfig.getHttpPort() == mediaConfig.getHttpPort())) {
|
||||
// // 配置文件的zlm
|
||||
// // 如果是配置文件中的zlm。 也就是默认zlm。 一切以配置文件内容为准
|
||||
// // wvp互惠修改zlm的端口,需要自行配置。
|
||||
// MediaServerItem serverItemFromConfig = mediaConfig.getMediaSerItem();
|
||||
// serverItemFromConfig.setId(zlmServerConfig.getGeneralMediaServerId());
|
||||
// if (mediaConfig.getHttpPort() == 0) {
|
||||
// serverItemFromConfig.setHttpPort(zlmServerConfig.getHttpPort());
|
||||
// }
|
||||
// if (mediaConfig.getHttpSSlPort() == 0) {
|
||||
// serverItemFromConfig.setHttpSSlPort(zlmServerConfig.getHttpSSLport());
|
||||
// }
|
||||
// if (mediaConfig.getRtmpPort() == 0) {
|
||||
// serverItemFromConfig.setRtmpPort(zlmServerConfig.getRtmpPort());
|
||||
// }
|
||||
// if (mediaConfig.getRtmpSSlPort() == 0) {
|
||||
// serverItemFromConfig.setRtmpSSlPort(zlmServerConfig.getRtmpSslPort());
|
||||
// }
|
||||
// if (mediaConfig.getRtspPort() == 0) {
|
||||
// serverItemFromConfig.setRtspPort(zlmServerConfig.getRtspPort());
|
||||
// }
|
||||
// if (mediaConfig.getRtspSSLPort() == 0) {
|
||||
// serverItemFromConfig.setRtspSSLPort(zlmServerConfig.getRtspSSlport());
|
||||
// }
|
||||
// if (mediaConfig.getRtpProxyPort() == 0) {
|
||||
// serverItemFromConfig.setRtpProxyPort(zlmServerConfig.getRtpProxyPort());
|
||||
// }
|
||||
// if (serverItem != null){
|
||||
// mediaServerMapper.delDefault();
|
||||
// mediaServerMapper.add(serverItemFromConfig);
|
||||
// String key = VideoManagerConstants.MEDIA_SERVER_PREFIX + serverItemFromConfig.getId();
|
||||
// MediaServerItem serverItemInRedis = (MediaServerItem)redisUtil.get(key);
|
||||
// if (serverItemInRedis != null) {
|
||||
// serverItemFromConfig.setSsrcConfig(serverItemInRedis.getSsrcConfig());
|
||||
// }else {
|
||||
// serverItemFromConfig.setSsrcConfig(new SsrcConfig(serverItemFromConfig.getId(), null, sipConfig.getDomain()));
|
||||
// }
|
||||
// redisUtil.set(key, serverItemFromConfig);
|
||||
// }else {
|
||||
// String key = VideoManagerConstants.MEDIA_SERVER_PREFIX + serverItemFromConfig.getId();
|
||||
// serverItemFromConfig.setSsrcConfig(new SsrcConfig(serverItemFromConfig.getId(), null, sipConfig.getDomain()));
|
||||
// redisUtil.set(key, serverItemFromConfig);
|
||||
// mediaServerMapper.add(serverItemFromConfig);
|
||||
// }
|
||||
// resetOnlineServerItem(serverItemFromConfig);
|
||||
// setZLMConfig(serverItemFromConfig);
|
||||
// }
|
||||
// 移除未添加的zlm的接入,所有的zlm必须先添加后才可以加入使用
|
||||
// else {
|
||||
// String now = this.format.format(System.currentTimeMillis());
|
||||
// if (serverItem == null){
|
||||
// // 一个新的zlm接入wvp
|
||||
// serverItem = new MediaServerItem(zlmServerConfig, sipConfig.getIp());
|
||||
// serverItem.setCreateTime(now);
|
||||
// serverItem.setUpdateTime(now);
|
||||
// String key = VideoManagerConstants.MEDIA_SERVER_PREFIX + serverItem.getId();
|
||||
// serverItem.setSsrcConfig(new SsrcConfig(serverItem.getId(), null, sipConfig.getDomain()));
|
||||
// redisUtil.set(key, serverItem);
|
||||
// // 存入数据库
|
||||
// mediaServerMapper.add(serverItem);
|
||||
// setZLMConfig(serverItem);
|
||||
// }
|
||||
// resetOnlineServerItem(serverItem);
|
||||
// }
|
||||
@Override
|
||||
public void zlmServerOffline(String mediaServerId) {
|
||||
delete(mediaServerId);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -611,9 +558,17 @@ public class MediaServerServiceImpl implements IMediaServerService, CommandLineR
|
||||
|
||||
@Override
|
||||
public void delete(String id) {
|
||||
redisUtil.zRemove(VideoManagerConstants.MEDIA_SERVERS_ONLINE_PREFIX + userSetup.getServerId() + "_", id);
|
||||
redisUtil.zRemove(VideoManagerConstants.MEDIA_SERVERS_ONLINE_PREFIX + userSetup.getServerId(), id);
|
||||
String key = VideoManagerConstants.MEDIA_SERVER_PREFIX + userSetup.getServerId() + "_" + id;
|
||||
redisUtil.del(key);
|
||||
mediaServerMapper.delOne(id);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void updateMediaServerKeepalive(String mediaServerId, JSONObject data) {
|
||||
MediaServerItem mediaServerItem = getOne(mediaServerId);
|
||||
String key = VideoManagerConstants.MEDIA_SERVER_KEEPALIVE_PREFIX + userSetup.getServerId() + "_" + mediaServerId;
|
||||
int hookAliveInterval = mediaServerItem.getHookAliveInterval() + 2;
|
||||
redisUtil.set(key, data, hookAliveInterval);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -5,6 +5,7 @@ import com.genersoft.iot.vmp.common.StreamInfo;
|
||||
import com.genersoft.iot.vmp.gb28181.bean.GbStream;
|
||||
import com.genersoft.iot.vmp.gb28181.bean.ParentPlatform;
|
||||
import com.genersoft.iot.vmp.media.zlm.ZLMRESTfulUtils;
|
||||
import com.genersoft.iot.vmp.media.zlm.ZLMServerConfig;
|
||||
import com.genersoft.iot.vmp.media.zlm.dto.MediaItem;
|
||||
import com.genersoft.iot.vmp.media.zlm.dto.MediaServerItem;
|
||||
import com.genersoft.iot.vmp.media.zlm.dto.StreamProxyItem;
|
||||
@@ -50,6 +51,9 @@ public class StreamProxyServiceImpl implements IStreamProxyService {
|
||||
@Autowired
|
||||
private StreamProxyMapper streamProxyMapper;
|
||||
|
||||
@Autowired
|
||||
private IRedisCatchStorage redisCatchStorage;
|
||||
|
||||
@Autowired
|
||||
private GbStreamMapper gbStreamMapper;
|
||||
|
||||
@@ -249,4 +253,20 @@ public class StreamProxyServiceImpl implements IStreamProxyService {
|
||||
public StreamProxyItem getStreamProxyByAppAndStream(String app, String streamId) {
|
||||
return videoManagerStorager.getStreamProxyByAppAndStream(app, streamId);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void zlmServerOnline(ZLMServerConfig zlmServerConfig) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void zlmServerOffline(String mediaServerId) {
|
||||
// 移除开启了无人观看自动移除的流
|
||||
streamProxyMapper.deleteAutoRemoveItemByMediaServerId(mediaServerId);
|
||||
// 其他的流设置未启用
|
||||
streamProxyMapper.updateStatus(false, mediaServerId);
|
||||
// 移除redis内流的信息
|
||||
redisCatchStorage.removeStream(mediaServerId, "PULL");
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -5,6 +5,7 @@ import com.alibaba.fastjson.JSONObject;
|
||||
import com.alibaba.fastjson.TypeReference;
|
||||
import com.genersoft.iot.vmp.gb28181.bean.GbStream;
|
||||
import com.genersoft.iot.vmp.media.zlm.ZLMRESTfulUtils;
|
||||
import com.genersoft.iot.vmp.media.zlm.ZLMServerConfig;
|
||||
import com.genersoft.iot.vmp.media.zlm.dto.MediaItem;
|
||||
import com.genersoft.iot.vmp.media.zlm.dto.MediaServerItem;
|
||||
import com.genersoft.iot.vmp.media.zlm.dto.StreamPushItem;
|
||||
@@ -135,4 +136,18 @@ public class StreamPushServiceImpl implements IStreamPushService {
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void zlmServerOnline(ZLMServerConfig zlmServerConfig) {
|
||||
// 似乎没啥需要做的
|
||||
}
|
||||
|
||||
@Override
|
||||
public void zlmServerOffline(String mediaServerId) {
|
||||
// 移除没有serverId的推流
|
||||
streamPushMapper.deleteWithoutGBId(mediaServerId);
|
||||
// 其他的流设置未启用
|
||||
gbStreamMapper.updateStatusByMediaServerId(mediaServerId, false);
|
||||
// 移除redis内流的信息
|
||||
redisCatchStorage.removeStream(mediaServerId, "PUSH");
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user