推流导入支持添加平台信息与目录信息

This commit is contained in:
648540858
2022-02-11 16:45:06 +08:00
parent d07a5680f3
commit bf66f8f694
10 changed files with 145 additions and 30 deletions

View File

@@ -68,4 +68,6 @@ public interface IStreamPushService {
void batchAdd(List<StreamPushItem> streamPushExcelDtoList);
boolean batchStop(List<GbStream> streamPushItems);
void batchAddForUpload(String platformId, String catalogId, List<StreamPushItem> streamPushItems);
}

View File

@@ -8,6 +8,7 @@ import com.genersoft.iot.vmp.conf.UserSetup;
import com.genersoft.iot.vmp.gb28181.bean.DeviceChannel;
import com.genersoft.iot.vmp.gb28181.bean.GbStream;
import com.genersoft.iot.vmp.gb28181.bean.ParentPlatform;
import com.genersoft.iot.vmp.gb28181.bean.PlatformCatalog;
import com.genersoft.iot.vmp.gb28181.event.EventPublisher;
import com.genersoft.iot.vmp.gb28181.event.subscribe.catalog.CatalogEvent;
import com.genersoft.iot.vmp.media.zlm.ZLMHttpHookSubscribe;
@@ -18,10 +19,7 @@ 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.storager.IRedisCatchStorage;
import com.genersoft.iot.vmp.storager.dao.GbStreamMapper;
import com.genersoft.iot.vmp.storager.dao.ParentPlatformMapper;
import com.genersoft.iot.vmp.storager.dao.PlatformGbStreamMapper;
import com.genersoft.iot.vmp.storager.dao.StreamPushMapper;
import com.genersoft.iot.vmp.storager.dao.*;
import com.genersoft.iot.vmp.vmanager.bean.StreamPushExcelDto;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
@@ -43,6 +41,9 @@ public class StreamPushServiceImpl implements IStreamPushService {
@Autowired
private ParentPlatformMapper parentPlatformMapper;
@Autowired
private PlatformCatalogMapper platformCatalogMapper;
@Autowired
private PlatformGbStreamMapper platformGbStreamMapper;
@@ -95,13 +96,12 @@ public class StreamPushServiceImpl implements IStreamPushService {
streamPushItem.setMediaServerId(item.getMediaServerId());
streamPushItem.setStream(item.getStream());
streamPushItem.setAliveSecond(item.getAliveSecond());
streamPushItem.setCreateStamp(item.getCreateStamp());
streamPushItem.setOriginSock(item.getOriginSock());
streamPushItem.setTotalReaderCount(item.getTotalReaderCount());
streamPushItem.setOriginType(item.getOriginType());
streamPushItem.setOriginTypeStr(item.getOriginTypeStr());
streamPushItem.setOriginUrl(item.getOriginUrl());
streamPushItem.setCreateStamp(item.getCreateStamp());
streamPushItem.setCreateStamp(item.getCreateStamp() * 1000);
streamPushItem.setAliveSecond(item.getAliveSecond());
streamPushItem.setStatus(true);
streamPushItem.setStreamType("push");
@@ -358,6 +358,27 @@ public class StreamPushServiceImpl implements IStreamPushService {
}
}
@Override
public void batchAddForUpload(String platformId, String catalogId, List<StreamPushItem> streamPushItems) {
streamPushMapper.addAll(streamPushItems);
gbStreamMapper.batchAdd(streamPushItems);
if (platformId != null) {
ParentPlatform platform = parentPlatformMapper.getParentPlatByServerGBId(platformId);
if (platform != null) {
if (catalogId == null) {
catalogId = platform.getCatalogId();
}else {
PlatformCatalog catalog = platformCatalogMapper.select(catalogId);
if (catalog == null) {
return;
}
}
platformGbStreamMapper.batchAdd(platformId, catalogId, streamPushItems);
eventPublisher.catalogEventPublishForStream(platformId, streamPushItems.toArray(new GbStream[0]), CatalogEvent.ADD);
}
}
}
@Override
public boolean batchStop(List<GbStream> gbStreams) {
if (gbStreams == null || gbStreams.size() == 0) {

View File

@@ -7,10 +7,7 @@ import com.genersoft.iot.vmp.service.IStreamPushService;
import com.genersoft.iot.vmp.vmanager.bean.StreamPushExcelDto;
import org.springframework.util.StringUtils;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import java.util.*;
public class StreamPushUploadFileHandler extends AnalysisEventListener<StreamPushExcelDto> {
@@ -18,10 +15,13 @@ public class StreamPushUploadFileHandler extends AnalysisEventListener<StreamPus
private IStreamPushService pushService;
private String defaultMediaServerId;
private List<StreamPushItem> streamPushItems = new ArrayList<>();
private Map<String, UploadData> streamPushItemsForPlatform = new HashMap<>();
private Set<String> streamPushStreamSet = new HashSet<>();
private Set<String> streamPushGBSet = new HashSet<>();
private List<String> errorStreamList = new ArrayList<>();
private List<String> errorGBList = new ArrayList<>();
// 读取数量计数器
private int loadedSize = 0;
public StreamPushUploadFileHandler(IStreamPushService pushService, String defaultMediaServerId, ErrorDataHandler errorDataHandler) {
this.pushService = pushService;
@@ -33,6 +33,16 @@ public class StreamPushUploadFileHandler extends AnalysisEventListener<StreamPus
void handle(List<String> streams, List<String> gbId);
}
private class UploadData{
public String platformId;
public Map<String, List<StreamPushItem>> catalogData = new HashMap<>();
public List<StreamPushItem> streamPushItems = new ArrayList<>();
public UploadData(String platformId) {
this.platformId = platformId;
}
}
@Override
public void invoke(StreamPushExcelDto streamPushExcelDto, AnalysisContext analysisContext) {
if (StringUtils.isEmpty(streamPushExcelDto.getApp())
@@ -43,10 +53,10 @@ public class StreamPushUploadFileHandler extends AnalysisEventListener<StreamPus
if (streamPushGBSet.contains(streamPushExcelDto.getGbId())) {
errorGBList.add(streamPushExcelDto.getGbId());
}
if (streamPushStreamSet.contains(streamPushExcelDto.getApp() + streamPushExcelDto.getStream())) {
if (streamPushStreamSet.contains(streamPushExcelDto.getApp() + streamPushExcelDto.getStream() + streamPushExcelDto.getPlatformId())) {
errorStreamList.add(streamPushExcelDto.getApp() + "/" + streamPushExcelDto.getStream());
}
if (streamPushGBSet.contains(streamPushExcelDto.getGbId()) || streamPushStreamSet.contains(streamPushExcelDto.getApp() + streamPushExcelDto.getStream())) {
if (streamPushGBSet.contains(streamPushExcelDto.getGbId()) || streamPushStreamSet.contains(streamPushExcelDto.getApp() + streamPushExcelDto.getStream() + streamPushExcelDto.getPlatformId())) {
return;
}
@@ -62,24 +72,69 @@ public class StreamPushUploadFileHandler extends AnalysisEventListener<StreamPus
streamPushItem.setOriginType(2);
streamPushItem.setOriginTypeStr("rtsp_push");
streamPushItem.setTotalReaderCount("0");
streamPushItems.add(streamPushItem);
streamPushItem.setPlatformId(streamPushExcelDto.getPlatformId());
streamPushItem.setCatalogId(streamPushExcelDto.getCatalogId());
if (StringUtils.isEmpty(streamPushExcelDto.getPlatformId())) {
streamPushItems.add(streamPushItem);
}else {
UploadData uploadData = streamPushItemsForPlatform.get(streamPushExcelDto.getPlatformId());
if (uploadData == null) {
uploadData = new UploadData(streamPushExcelDto.getPlatformId());
streamPushItemsForPlatform.put(streamPushExcelDto.getPlatformId(), uploadData);
}
if (!StringUtils.isEmpty(streamPushExcelDto.getCatalogId())) {
List<StreamPushItem> streamPushItems = uploadData.catalogData.get(streamPushExcelDto.getCatalogId());
if (streamPushItems == null) {
streamPushItems = new ArrayList<>();
uploadData.catalogData.put(streamPushExcelDto.getCatalogId(), streamPushItems);
}
streamPushItems.add(streamPushItem);
}else {
uploadData.streamPushItems.add(streamPushItem);
}
}
streamPushGBSet.add(streamPushExcelDto.getGbId());
streamPushStreamSet.add(streamPushExcelDto.getApp()+streamPushExcelDto.getStream());
if (streamPushItems.size() > 300) {
pushService.batchAdd(streamPushItems);
// 存储完成清理 list
loadedSize ++;
if (loadedSize > 1000) {
saveData();
streamPushItems.clear();
streamPushItemsForPlatform.clear();
loadedSize = 0;
}
}
@Override
public void doAfterAllAnalysed(AnalysisContext analysisContext) {
// 这里也要保存数据,确保最后遗留的数据也存储到数据库
if (streamPushItems.size() > 0) {
pushService.batchAdd(streamPushItems);
}
saveData();
streamPushGBSet.clear();
streamPushStreamSet.clear();
errorDataHandler.handle(errorStreamList, errorGBList);
}
private void saveData(){
if (streamPushItems.size() > 0) {
pushService.batchAddForUpload(null, null, streamPushItems);
}
// 处理已分配到平台的流
if (streamPushItemsForPlatform.size() > 0){
for (String platformId : streamPushItemsForPlatform.keySet()) {
UploadData uploadData = streamPushItemsForPlatform.get(platformId);
if (uploadData.streamPushItems.size() > 0) {
pushService.batchAddForUpload(platformId, null, uploadData.streamPushItems);
}
if (uploadData.catalogData.size() > 0) {
for (String catalogId : uploadData.catalogData.keySet()) {
if (uploadData.catalogData.get(catalogId).size() > 0) {
pushService.batchAddForUpload(platformId, catalogId, uploadData.catalogData.get(catalogId));
}
}
}
}
}
}
}