修复国标点播缓存启动未清理的BUG

This commit is contained in:
648540858
2024-10-25 17:41:50 +08:00
parent ef66bd8781
commit 059635c2cc
29 changed files with 256 additions and 350 deletions

View File

@@ -1,5 +1,6 @@
package com.genersoft.iot.vmp.streamPush.service;
import com.genersoft.iot.vmp.media.bean.MediaServer;
import com.genersoft.iot.vmp.service.bean.GPSMsgInfo;
import com.genersoft.iot.vmp.service.bean.StreamPushItemFromRedis;
import com.genersoft.iot.vmp.streamPush.bean.StreamPush;
@@ -36,12 +37,12 @@ public interface IStreamPushService {
/**
* 新的节点加入
*/
void zlmServerOnline(String mediaServerId);
void zlmServerOnline(MediaServer mediaServer);
/**
* 节点离线
*/
void zlmServerOffline(String mediaServerId);
void zlmServerOffline(MediaServer mediaServer);
/**
* 批量添加

View File

@@ -159,7 +159,7 @@ public class StreamPushServiceImpl implements IStreamPushService {
@EventListener
@Transactional
public void onApplicationEvent(MediaServerOnlineEvent event) {
zlmServerOnline(event.getMediaServerId());
zlmServerOnline(event.getMediaServer());
}
/**
@@ -169,7 +169,7 @@ public class StreamPushServiceImpl implements IStreamPushService {
@EventListener
@Transactional
public void onApplicationEvent(MediaServerOfflineEvent event) {
zlmServerOffline(event.getMediaServerId());
zlmServerOffline(event.getMediaServer());
}
@Override
@@ -310,17 +310,16 @@ public class StreamPushServiceImpl implements IStreamPushService {
@Override
@Transactional
public void zlmServerOnline(String mediaServerId) {
public void zlmServerOnline(MediaServer mediaServer) {
// 同步zlm推流信息
MediaServer mediaServerItem = mediaServerService.getOne(mediaServerId);
if (mediaServerItem == null) {
if (mediaServer == null) {
return;
}
// 数据库记录
List<StreamPush> pushList = getPushList(mediaServerId);
List<StreamPush> pushList = getPushList(mediaServer.getId());
Map<String, StreamPush> pushItemMap = new HashMap<>();
// redis记录
List<MediaInfo> mediaInfoList = redisCatchStorage.getStreams(mediaServerId, "PUSH");
List<MediaInfo> mediaInfoList = redisCatchStorage.getStreams(mediaServer.getId(), "PUSH");
Map<String, MediaInfo> streamInfoPushItemMap = new HashMap<>();
if (!pushList.isEmpty()) {
for (StreamPush streamPushItem : pushList) {
@@ -340,7 +339,7 @@ public class StreamPushServiceImpl implements IStreamPushService {
for (StreamAuthorityInfo streamAuthorityInfo : allStreamAuthorityInfo) {
streamAuthorityInfoInfoMap.put(streamAuthorityInfo.getApp() + streamAuthorityInfo.getStream(), streamAuthorityInfo);
}
List<StreamInfo> mediaList = mediaServerService.getMediaList(mediaServerItem, null, null, null);
List<StreamInfo> mediaList = mediaServerService.getMediaList(mediaServer, null, null, null);
if (mediaList == null) {
return;
}
@@ -368,12 +367,12 @@ public class StreamPushServiceImpl implements IStreamPushService {
jsonObject.put("app", mediaInfo.getApp());
jsonObject.put("stream", mediaInfo.getStream());
jsonObject.put("register", false);
jsonObject.put("mediaServerId", mediaServerId);
jsonObject.put("mediaServerId", mediaServer.getId());
redisCatchStorage.sendStreamChangeMsg(type, jsonObject);
// 移除redis内流的信息
redisCatchStorage.removeStream(mediaServerItem.getId(), "PUSH", mediaInfo.getApp(), mediaInfo.getStream());
redisCatchStorage.removeStream(mediaServer.getId(), "PUSH", mediaInfo.getApp(), mediaInfo.getStream());
// 冗余数据,自己系统中自用
redisCatchStorage.removePushListItem(mediaInfo.getApp(), mediaInfo.getStream(), mediaServerItem.getId());
redisCatchStorage.removePushListItem(mediaInfo.getApp(), mediaInfo.getStream(), mediaServer.getId());
}
}
@@ -388,8 +387,8 @@ public class StreamPushServiceImpl implements IStreamPushService {
@Override
@Transactional
public void zlmServerOffline(String mediaServerId) {
List<StreamPush> streamPushItems = streamPushMapper.selectAllByMediaServerId(mediaServerId);
public void zlmServerOffline(MediaServer mediaServer) {
List<StreamPush> streamPushItems = streamPushMapper.selectAllByMediaServerId(mediaServer.getId());
if (!streamPushItems.isEmpty()) {
for (StreamPush streamPushItem : streamPushItems) {
stop(streamPushItem);
@@ -403,21 +402,21 @@ public class StreamPushServiceImpl implements IStreamPushService {
// 发送流停止消息
String type = "PUSH";
// 发送redis消息
List<MediaInfo> mediaInfoList = redisCatchStorage.getStreams(mediaServerId, type);
List<MediaInfo> mediaInfoList = redisCatchStorage.getStreams(mediaServer.getId(), type);
if (!mediaInfoList.isEmpty()) {
for (MediaInfo mediaInfo : mediaInfoList) {
// 移除redis内流的信息
redisCatchStorage.removeStream(mediaServerId, type, mediaInfo.getApp(), mediaInfo.getStream());
redisCatchStorage.removeStream(mediaServer.getId(), type, mediaInfo.getApp(), mediaInfo.getStream());
JSONObject jsonObject = new JSONObject();
jsonObject.put("serverId", userSetting.getServerId());
jsonObject.put("app", mediaInfo.getApp());
jsonObject.put("stream", mediaInfo.getStream());
jsonObject.put("register", false);
jsonObject.put("mediaServerId", mediaServerId);
jsonObject.put("mediaServerId", mediaServer.getId());
redisCatchStorage.sendStreamChangeMsg(type, jsonObject);
// 冗余数据,自己系统中自用
redisCatchStorage.removePushListItem(mediaInfo.getApp(), mediaInfo.getStream(), mediaServerId);
redisCatchStorage.removePushListItem(mediaInfo.getApp(), mediaInfo.getStream(), mediaServer.getId());
}
}
}