根据redis消息更新推流列表
This commit is contained in:
parent
b67841b319
commit
8f77d0c25c
@ -91,6 +91,10 @@ public class VideoManagerConstants {
|
|||||||
* 接收推流设备的GPS变化通知
|
* 接收推流设备的GPS变化通知
|
||||||
*/
|
*/
|
||||||
public static final String VM_MSG_PUSH_STREAM_STATUS_CHANGE = "VM_MSG_PUSH_STREAM_STATUS_CHANGE";
|
public static final String VM_MSG_PUSH_STREAM_STATUS_CHANGE = "VM_MSG_PUSH_STREAM_STATUS_CHANGE";
|
||||||
|
/**
|
||||||
|
* 接收推流设备列表更新变化通知
|
||||||
|
*/
|
||||||
|
public static final String VM_MSG_PUSH_STREAM_LIST_CHANGE = "VM_MSG_PUSH_STREAM_LIST_CHANGE";
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* redis 消息通知设备推流到平台
|
* redis 消息通知设备推流到平台
|
||||||
|
@ -43,6 +43,9 @@ public class RedisConfig extends CachingConfigurerSupport {
|
|||||||
@Autowired
|
@Autowired
|
||||||
private RedisPushStreamStatusMsgListener redisPushStreamStatusMsgListener;
|
private RedisPushStreamStatusMsgListener redisPushStreamStatusMsgListener;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private RedisPushStreamListMsgListener redisPushStreamListMsgListener;
|
||||||
|
|
||||||
@Bean
|
@Bean
|
||||||
public RedisTemplate<Object, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) {
|
public RedisTemplate<Object, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) {
|
||||||
RedisTemplate<Object, Object> redisTemplate = new RedisTemplate<>();
|
RedisTemplate<Object, Object> redisTemplate = new RedisTemplate<>();
|
||||||
@ -80,6 +83,7 @@ public class RedisConfig extends CachingConfigurerSupport {
|
|||||||
container.addMessageListener(redisStreamMsgListener, new PatternTopic(VideoManagerConstants.WVP_MSG_STREAM_CHANGE_PREFIX + "PUSH"));
|
container.addMessageListener(redisStreamMsgListener, new PatternTopic(VideoManagerConstants.WVP_MSG_STREAM_CHANGE_PREFIX + "PUSH"));
|
||||||
container.addMessageListener(redisGbPlayMsgListener, new PatternTopic(RedisGbPlayMsgListener.WVP_PUSH_STREAM_KEY));
|
container.addMessageListener(redisGbPlayMsgListener, new PatternTopic(RedisGbPlayMsgListener.WVP_PUSH_STREAM_KEY));
|
||||||
container.addMessageListener(redisPushStreamStatusMsgListener, new PatternTopic(VideoManagerConstants.VM_MSG_PUSH_STREAM_STATUS_CHANGE));
|
container.addMessageListener(redisPushStreamStatusMsgListener, new PatternTopic(VideoManagerConstants.VM_MSG_PUSH_STREAM_STATUS_CHANGE));
|
||||||
|
container.addMessageListener(redisPushStreamListMsgListener, new PatternTopic(VideoManagerConstants.VM_MSG_PUSH_STREAM_LIST_CHANGE));
|
||||||
return container;
|
return container;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3,6 +3,7 @@ package com.genersoft.iot.vmp.service;
|
|||||||
import com.genersoft.iot.vmp.gb28181.bean.DeviceChannel;
|
import com.genersoft.iot.vmp.gb28181.bean.DeviceChannel;
|
||||||
import com.genersoft.iot.vmp.gb28181.bean.GbStream;
|
import com.genersoft.iot.vmp.gb28181.bean.GbStream;
|
||||||
import com.genersoft.iot.vmp.gb28181.bean.ParentPlatform;
|
import com.genersoft.iot.vmp.gb28181.bean.ParentPlatform;
|
||||||
|
import com.genersoft.iot.vmp.media.zlm.dto.StreamPushItem;
|
||||||
import com.github.pagehelper.PageInfo;
|
import com.github.pagehelper.PageInfo;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
@ -45,4 +46,11 @@ public interface IGbStreamService {
|
|||||||
|
|
||||||
void sendCatalogMsg(GbStream gbStream, String type);
|
void sendCatalogMsg(GbStream gbStream, String type);
|
||||||
void sendCatalogMsgs(List<GbStream> gbStreams, String type);
|
void sendCatalogMsgs(List<GbStream> gbStreams, String type);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 修改gbId或name
|
||||||
|
* @param streamPushItemForUpdate
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
int updateGbIdOrName(List<StreamPushItem> streamPushItemForUpdate);
|
||||||
}
|
}
|
||||||
|
@ -100,4 +100,10 @@ public interface IStreamPushService {
|
|||||||
* 增加推流
|
* 增加推流
|
||||||
*/
|
*/
|
||||||
boolean add(StreamPushItem stream);
|
boolean add(StreamPushItem stream);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取全部的app+Streanm 用于判断推流列表是新增还是修改
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
List<String> getAllAppAndStream();
|
||||||
}
|
}
|
||||||
|
@ -1,10 +1,9 @@
|
|||||||
package com.genersoft.iot.vmp.service.impl;
|
package com.genersoft.iot.vmp.service.impl;
|
||||||
|
|
||||||
import com.genersoft.iot.vmp.conf.SipConfig;
|
|
||||||
import com.genersoft.iot.vmp.gb28181.bean.*;
|
import com.genersoft.iot.vmp.gb28181.bean.*;
|
||||||
import com.genersoft.iot.vmp.gb28181.event.EventPublisher;
|
import com.genersoft.iot.vmp.gb28181.event.EventPublisher;
|
||||||
import com.genersoft.iot.vmp.gb28181.event.subscribe.catalog.CatalogEvent;
|
import com.genersoft.iot.vmp.gb28181.event.subscribe.catalog.CatalogEvent;
|
||||||
import com.genersoft.iot.vmp.media.zlm.dto.StreamProxyItem;
|
import com.genersoft.iot.vmp.media.zlm.dto.StreamPushItem;
|
||||||
import com.genersoft.iot.vmp.storager.dao.GbStreamMapper;
|
import com.genersoft.iot.vmp.storager.dao.GbStreamMapper;
|
||||||
import com.genersoft.iot.vmp.storager.dao.ParentPlatformMapper;
|
import com.genersoft.iot.vmp.storager.dao.ParentPlatformMapper;
|
||||||
import com.genersoft.iot.vmp.storager.dao.PlatformCatalogMapper;
|
import com.genersoft.iot.vmp.storager.dao.PlatformCatalogMapper;
|
||||||
@ -183,4 +182,9 @@ public class GbStreamServiceImpl implements IGbStreamService {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int updateGbIdOrName(List<StreamPushItem> streamPushItemForUpdate) {
|
||||||
|
return gbStreamMapper.updateGbIdOrName(streamPushItemForUpdate);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,83 @@
|
|||||||
|
package com.genersoft.iot.vmp.service.impl;
|
||||||
|
|
||||||
|
import com.alibaba.fastjson.JSON;
|
||||||
|
import com.alibaba.fastjson.JSONObject;
|
||||||
|
import com.genersoft.iot.vmp.media.zlm.dto.StreamPushItem;
|
||||||
|
import com.genersoft.iot.vmp.service.IGbStreamService;
|
||||||
|
import com.genersoft.iot.vmp.service.IMediaServerService;
|
||||||
|
import com.genersoft.iot.vmp.service.IStreamPushService;
|
||||||
|
import com.genersoft.iot.vmp.utils.DateUtil;
|
||||||
|
import org.slf4j.Logger;
|
||||||
|
import org.slf4j.LoggerFactory;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.data.redis.connection.Message;
|
||||||
|
import org.springframework.data.redis.connection.MessageListener;
|
||||||
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
|
import javax.annotation.Resource;
|
||||||
|
import java.util.*;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @Auther: JiangFeng
|
||||||
|
* @Date: 2022/8/16 11:32
|
||||||
|
* @Description: 接收redis发送的推流设备列表更新通知
|
||||||
|
*/
|
||||||
|
@Component
|
||||||
|
public class RedisPushStreamListMsgListener implements MessageListener {
|
||||||
|
|
||||||
|
private final static Logger logger = LoggerFactory.getLogger(RedisPushStreamListMsgListener.class);
|
||||||
|
@Resource
|
||||||
|
private IMediaServerService mediaServerService;
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
private IStreamPushService streamPushService;
|
||||||
|
@Resource
|
||||||
|
private IGbStreamService gbStreamService;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onMessage(Message message, byte[] bytes) {
|
||||||
|
//
|
||||||
|
logger.warn("[REDIS消息-推流设备列表更新]: {}", new String(message.getBody()));
|
||||||
|
List<StreamPushItem> streamPushItems = JSON.parseArray(new String(message.getBody()), StreamPushItem.class);
|
||||||
|
//查询全部的app+stream 用于判断是添加还是修改
|
||||||
|
List<String> allAppAndStream = streamPushService.getAllAppAndStream();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 用于存储更具APP+Stream过滤后的数据,可以直接存入stream_push表与gb_stream表
|
||||||
|
*/
|
||||||
|
List<StreamPushItem> streamPushItemForSave = new ArrayList<>();
|
||||||
|
List<StreamPushItem> streamPushItemForUpdate = new ArrayList<>();
|
||||||
|
for (StreamPushItem streamPushItem : streamPushItems) {
|
||||||
|
String app = streamPushItem.getApp();
|
||||||
|
String stream = streamPushItem.getStream();
|
||||||
|
boolean contains = allAppAndStream.contains(app + stream);
|
||||||
|
//不存在就添加
|
||||||
|
if (!contains) {
|
||||||
|
streamPushItem.setStatus(false);
|
||||||
|
streamPushItem.setStreamType("push");
|
||||||
|
streamPushItem.setCreateTime(DateUtil.getNow());
|
||||||
|
streamPushItem.setMediaServerId(mediaServerService.getDefaultMediaServer().getId());
|
||||||
|
streamPushItem.setOriginType(2);
|
||||||
|
streamPushItem.setOriginTypeStr("rtsp_push");
|
||||||
|
streamPushItem.setTotalReaderCount("0");
|
||||||
|
streamPushItemForSave.add(streamPushItem);
|
||||||
|
} else {
|
||||||
|
//存在就只修改 name和gbId
|
||||||
|
streamPushItemForUpdate.add(streamPushItem);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (streamPushItemForSave.size() > 0) {
|
||||||
|
|
||||||
|
logger.info("添加{}条",streamPushItemForSave.size());
|
||||||
|
logger.info(JSONObject.toJSONString(streamPushItemForSave));
|
||||||
|
streamPushService.batchAdd(streamPushItemForSave);
|
||||||
|
|
||||||
|
}
|
||||||
|
if(streamPushItemForUpdate.size()>0){
|
||||||
|
logger.info("修改{}条",streamPushItemForUpdate.size());
|
||||||
|
logger.info(JSONObject.toJSONString(streamPushItemForUpdate));
|
||||||
|
gbStreamService.updateGbIdOrName(streamPushItemForUpdate);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
@ -340,6 +340,7 @@ public class StreamPushServiceImpl implements IStreamPushService {
|
|||||||
gbStreamMapper.batchAdd(streamPushItems);
|
gbStreamMapper.batchAdd(streamPushItems);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void batchAddForUpload(List<StreamPushItem> streamPushItems, Map<String, List<String[]>> streamPushItemsForAll ) {
|
public void batchAddForUpload(List<StreamPushItem> streamPushItems, Map<String, List<String[]>> streamPushItemsForAll ) {
|
||||||
// 存储数据到stream_push表
|
// 存储数据到stream_push表
|
||||||
@ -503,4 +504,9 @@ public class StreamPushServiceImpl implements IStreamPushService {
|
|||||||
}
|
}
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<String> getAllAppAndStream() {
|
||||||
|
return streamPushMapper.getAllAppAndStream();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -148,4 +148,14 @@ public interface GbStreamMapper {
|
|||||||
"SET mediaServerId=#{mediaServerId}" +
|
"SET mediaServerId=#{mediaServerId}" +
|
||||||
"WHERE app=#{app} AND stream=#{stream}")
|
"WHERE app=#{app} AND stream=#{stream}")
|
||||||
void updateMediaServer(String app, String stream, String mediaServerId);
|
void updateMediaServer(String app, String stream, String mediaServerId);
|
||||||
|
|
||||||
|
@Update("<script> "+
|
||||||
|
" <foreach collection='list' item='item' index='index' separator=';'>"+
|
||||||
|
"UPDATE gb_stream " +
|
||||||
|
" SET name=#{item.name},"+
|
||||||
|
" gbId=#{item.gbId}"+
|
||||||
|
" WHERE app=#{item.app} and stream=#{item.stream}"+
|
||||||
|
"</foreach>"+
|
||||||
|
"</script>")
|
||||||
|
int updateGbIdOrName(List<StreamPushItem> streamPushItemForUpdate);
|
||||||
}
|
}
|
||||||
|
@ -168,4 +168,7 @@ public interface StreamPushMapper {
|
|||||||
|
|
||||||
@Update("UPDATE stream_push SET status=0")
|
@Update("UPDATE stream_push SET status=0")
|
||||||
void setAllStreamOffline();
|
void setAllStreamOffline();
|
||||||
|
|
||||||
|
@Select("SELECT CONCAT(app,stream) FROM gb_stream")
|
||||||
|
List<String> getAllAppAndStream();
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user