Merge branch 'wvp-28181-2.0' into wvp-28181-2.0
This commit is contained in:
@@ -31,8 +31,8 @@ public class DeviceServiceImpl implements IDeviceService {
|
||||
return false;
|
||||
}
|
||||
if (dynamicTask.contains(device.getDeviceId())) {
|
||||
logger.info("[添加目录订阅] 设备{}的目录订阅以存在", device.getDeviceId());
|
||||
return false;
|
||||
// 存在则停止现有的,开启新的
|
||||
dynamicTask.stop(device.getDeviceId());
|
||||
}
|
||||
logger.info("[添加目录订阅] 设备{}", device.getDeviceId());
|
||||
// 添加目录订阅
|
||||
|
||||
@@ -513,6 +513,14 @@ public class MediaServerServiceImpl implements IMediaServerService {
|
||||
param.put("hook.on_server_keepalive",String.format("%s/on_server_keepalive", hookPrex));
|
||||
param.put("hook.timeoutSec","20");
|
||||
param.put("general.streamNoneReaderDelayMS",mediaServerItem.getStreamNoneReaderDelayMS()==-1?"3600000":mediaServerItem.getStreamNoneReaderDelayMS() );
|
||||
// 推流断开后可以在超时时间内重新连接上继续推流,这样播放器会接着播放。
|
||||
// 置0关闭此特性(推流断开会导致立即断开播放器)
|
||||
// 此参数不应大于播放器超时时间
|
||||
// 优化此消息以更快的收到流注销事件
|
||||
param.put("general.continue_push_ms", "3000" );
|
||||
// 最多等待未初始化的Track时间,单位毫秒,超时之后会忽略未初始化的Track, 设置此选项优化那些音频错误的不规范流,
|
||||
// 等zlm支持给每个rtpServer设置关闭音频的时候可以不设置此选项
|
||||
param.put("general.wait_track_ready_ms", "3000" );
|
||||
|
||||
JSONObject responseJSON = zlmresTfulUtils.setServerConfig(mediaServerItem, param);
|
||||
|
||||
@@ -620,6 +628,8 @@ public class MediaServerServiceImpl implements IMediaServerService {
|
||||
public void updateMediaServerKeepalive(String mediaServerId, JSONObject data) {
|
||||
MediaServerItem mediaServerItem = getOne(mediaServerId);
|
||||
if (mediaServerItem == null) {
|
||||
// zlm连接重试
|
||||
|
||||
logger.warn("[更新ZLM 保活信息]失败,未找到流媒体信息");
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -1,14 +1,12 @@
|
||||
package com.genersoft.iot.vmp.service.impl;
|
||||
|
||||
import com.alibaba.fastjson.JSON;
|
||||
import com.alibaba.fastjson.JSONArray;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import com.alibaba.fastjson.TypeReference;
|
||||
import com.genersoft.iot.vmp.common.StreamInfo;
|
||||
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.bean.*;
|
||||
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;
|
||||
@@ -23,6 +21,8 @@ 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;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.util.StringUtils;
|
||||
@@ -33,6 +33,8 @@ import java.util.stream.Collectors;
|
||||
@Service
|
||||
public class StreamPushServiceImpl implements IStreamPushService {
|
||||
|
||||
private final static Logger logger = LoggerFactory.getLogger(StreamPushServiceImpl.class);
|
||||
|
||||
@Autowired
|
||||
private GbStreamMapper gbStreamMapper;
|
||||
|
||||
@@ -158,12 +160,17 @@ public class StreamPushServiceImpl implements IStreamPushService {
|
||||
public boolean removeFromGB(GbStream stream) {
|
||||
// 判断是否需要发送事件
|
||||
gbStreamService.sendCatalogMsg(stream, CatalogEvent.DEL);
|
||||
int del = gbStreamMapper.del(stream.getApp(), stream.getStream());
|
||||
platformGbStreamMapper.delByAppAndStream(stream.getApp(), stream.getStream());
|
||||
int del = gbStreamMapper.del(stream.getApp(), stream.getStream());
|
||||
MediaServerItem mediaInfo = mediaServerService.getOne(stream.getMediaServerId());
|
||||
JSONObject mediaList = zlmresTfulUtils.getMediaList(mediaInfo, stream.getApp(), stream.getStream());
|
||||
if (mediaList == null) {
|
||||
streamPushMapper.del(stream.getApp(), stream.getStream());
|
||||
if (mediaList != null) {
|
||||
if (mediaList.getInteger("code") == 0) {
|
||||
JSONArray data = mediaList.getJSONArray("data");
|
||||
if (data == null) {
|
||||
streamPushMapper.del(stream.getApp(), stream.getStream());
|
||||
}
|
||||
}
|
||||
}
|
||||
return del > 0;
|
||||
}
|
||||
@@ -180,9 +187,9 @@ public class StreamPushServiceImpl implements IStreamPushService {
|
||||
StreamPushItem streamPushItem = streamPushMapper.selectOne(app, streamId);
|
||||
gbStreamService.sendCatalogMsg(streamPushItem, CatalogEvent.DEL);
|
||||
|
||||
int delStream = streamPushMapper.del(app, streamId);
|
||||
gbStreamMapper.del(app, streamId);
|
||||
platformGbStreamMapper.delByAppAndStream(app, streamId);
|
||||
gbStreamMapper.del(app, streamId);
|
||||
int delStream = streamPushMapper.del(app, streamId);
|
||||
if (delStream > 0) {
|
||||
MediaServerItem mediaServerItem = mediaServerService.getOne(streamPushItem.getMediaServerId());
|
||||
zlmresTfulUtils.closeStreams(mediaServerItem,app, streamId);
|
||||
@@ -376,6 +383,29 @@ public class StreamPushServiceImpl implements IStreamPushService {
|
||||
.collect(Collectors.toList());
|
||||
|
||||
if (streamPushItemsForPlatform.size() > 0) {
|
||||
// 获取所有平台,平台和目录信息一般不会特别大量。
|
||||
List<ParentPlatform> parentPlatformList = parentPlatformMapper.getParentPlatformList();
|
||||
Map<String, Map<String, PlatformCatalog>> platformInfoMap = new HashMap<>();
|
||||
if (parentPlatformList.size() == 0) {
|
||||
return;
|
||||
}
|
||||
for (ParentPlatform platform : parentPlatformList) {
|
||||
Map<String, PlatformCatalog> catalogMap = new HashMap<>();
|
||||
|
||||
// 创建根节点
|
||||
PlatformCatalog platformCatalog = new PlatformCatalog();
|
||||
platformCatalog.setId(platform.getServerGBId());
|
||||
catalogMap.put(platform.getServerGBId(), platformCatalog);
|
||||
|
||||
// 查询所有节点信息
|
||||
List<PlatformCatalog> platformCatalogs = platformCatalogMapper.selectByPlatForm(platform.getServerGBId());
|
||||
if (platformCatalogs.size() > 0) {
|
||||
for (PlatformCatalog catalog : platformCatalogs) {
|
||||
catalogMap.put(catalog.getId(), catalog);
|
||||
}
|
||||
}
|
||||
platformInfoMap.put(platform.getServerGBId(), catalogMap);
|
||||
}
|
||||
List<StreamPushItem> streamPushItemListFroPlatform = new ArrayList<>();
|
||||
Map<String, List<GbStream>> platformForEvent = new HashMap<>();
|
||||
// 遍历存储结果,查找app+Stream->platformId+catalogId的对应关系,然后执行批量写入
|
||||
@@ -388,6 +418,12 @@ public class StreamPushServiceImpl implements IStreamPushService {
|
||||
streamPushItemForPlatform.setGbStreamId(streamPushItem.getGbStreamId());
|
||||
if (platFormInfoArray.length > 0) {
|
||||
// 数组 platFormInfoArray 0 为平台ID。 1为目录ID
|
||||
// 不存在这个平台,则忽略导入此关联关系
|
||||
if (platformInfoMap.get(platFormInfoArray[0]) == null
|
||||
|| platformInfoMap.get(platFormInfoArray[0]).get(platFormInfoArray[1]) == null) {
|
||||
logger.info("导入数据时不存在平台或目录{}/{},已导入未分配", platFormInfoArray[0], platFormInfoArray[1] );
|
||||
continue;
|
||||
}
|
||||
streamPushItemForPlatform.setPlatformId(platFormInfoArray[0]);
|
||||
|
||||
List<GbStream> gbStreamList = platformForEvent.get(streamPushItem.getPlatformId());
|
||||
@@ -406,8 +442,6 @@ public class StreamPushServiceImpl implements IStreamPushService {
|
||||
streamPushItemForPlatform.setCatalogId(platFormInfoArray[1]);
|
||||
}
|
||||
streamPushItemListFroPlatform.add(streamPushItemForPlatform);
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -432,9 +466,9 @@ public class StreamPushServiceImpl implements IStreamPushService {
|
||||
}
|
||||
gbStreamService.sendCatalogMsgs(gbStreams, CatalogEvent.DEL);
|
||||
|
||||
int delStream = streamPushMapper.delAllForGbStream(gbStreams);
|
||||
gbStreamMapper.batchDelForGbStream(gbStreams);
|
||||
platformGbStreamMapper.delByGbStreams(gbStreams);
|
||||
gbStreamMapper.batchDelForGbStream(gbStreams);
|
||||
int delStream = streamPushMapper.delAllForGbStream(gbStreams);
|
||||
if (delStream > 0) {
|
||||
for (GbStream gbStream : gbStreams) {
|
||||
MediaServerItem mediaServerItem = mediaServerService.getOne(gbStream.getMediaServerId());
|
||||
|
||||
Reference in New Issue
Block a user