修复心跳异常,支持通道列表,推流列表,拉流代理列表直接查看对应的云端录像,兼容大于INT的ssrc的格式化
This commit is contained in:
0
src/main/java/com/genersoft/iot/vmp/service/IDeviceAlarmService.java
Normal file → Executable file
0
src/main/java/com/genersoft/iot/vmp/service/IDeviceAlarmService.java
Normal file → Executable file
0
src/main/java/com/genersoft/iot/vmp/service/IDeviceChannelService.java
Normal file → Executable file
0
src/main/java/com/genersoft/iot/vmp/service/IDeviceChannelService.java
Normal file → Executable file
0
src/main/java/com/genersoft/iot/vmp/service/IDeviceService.java
Normal file → Executable file
0
src/main/java/com/genersoft/iot/vmp/service/IDeviceService.java
Normal file → Executable file
0
src/main/java/com/genersoft/iot/vmp/service/IGbStreamService.java
Normal file → Executable file
0
src/main/java/com/genersoft/iot/vmp/service/IGbStreamService.java
Normal file → Executable file
0
src/main/java/com/genersoft/iot/vmp/service/IInviteStreamService.java
Normal file → Executable file
0
src/main/java/com/genersoft/iot/vmp/service/IInviteStreamService.java
Normal file → Executable file
0
src/main/java/com/genersoft/iot/vmp/service/ILogService.java
Normal file → Executable file
0
src/main/java/com/genersoft/iot/vmp/service/ILogService.java
Normal file → Executable file
11
src/main/java/com/genersoft/iot/vmp/service/IMediaServerService.java
Normal file → Executable file
11
src/main/java/com/genersoft/iot/vmp/service/IMediaServerService.java
Normal file → Executable file
@@ -6,6 +6,7 @@ import com.genersoft.iot.vmp.media.zlm.dto.MediaServerItem;
|
||||
import com.genersoft.iot.vmp.media.zlm.dto.ServerKeepaliveData;
|
||||
import com.genersoft.iot.vmp.service.bean.MediaServerLoad;
|
||||
import com.genersoft.iot.vmp.service.bean.SSRCInfo;
|
||||
import com.genersoft.iot.vmp.vmanager.bean.RecordFile;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@@ -93,4 +94,14 @@ public interface IMediaServerService {
|
||||
* @return
|
||||
*/
|
||||
MediaServerLoad getLoad(MediaServerItem mediaServerItem);
|
||||
|
||||
/**
|
||||
* 按时间查找录像文件
|
||||
*/
|
||||
List<RecordFile> getRecords(String app, String stream, String startTime, String endTime, List<MediaServerItem> mediaServerItems);
|
||||
|
||||
/**
|
||||
* 查找存在录像文件的时间
|
||||
*/
|
||||
List<String> getRecordDates(String app, String stream, int year, int month, List<MediaServerItem> mediaServerItems);
|
||||
}
|
||||
|
||||
0
src/main/java/com/genersoft/iot/vmp/service/IMediaService.java
Normal file → Executable file
0
src/main/java/com/genersoft/iot/vmp/service/IMediaService.java
Normal file → Executable file
0
src/main/java/com/genersoft/iot/vmp/service/IPlatformChannelService.java
Normal file → Executable file
0
src/main/java/com/genersoft/iot/vmp/service/IPlatformChannelService.java
Normal file → Executable file
0
src/main/java/com/genersoft/iot/vmp/service/IPlatformService.java
Normal file → Executable file
0
src/main/java/com/genersoft/iot/vmp/service/IPlatformService.java
Normal file → Executable file
0
src/main/java/com/genersoft/iot/vmp/service/IPlayService.java
Normal file → Executable file
0
src/main/java/com/genersoft/iot/vmp/service/IPlayService.java
Normal file → Executable file
0
src/main/java/com/genersoft/iot/vmp/service/IRoleService.java
Normal file → Executable file
0
src/main/java/com/genersoft/iot/vmp/service/IRoleService.java
Normal file → Executable file
0
src/main/java/com/genersoft/iot/vmp/service/IStreamProxyService.java
Normal file → Executable file
0
src/main/java/com/genersoft/iot/vmp/service/IStreamProxyService.java
Normal file → Executable file
0
src/main/java/com/genersoft/iot/vmp/service/IStreamPushService.java
Normal file → Executable file
0
src/main/java/com/genersoft/iot/vmp/service/IStreamPushService.java
Normal file → Executable file
0
src/main/java/com/genersoft/iot/vmp/service/IUserService.java
Normal file → Executable file
0
src/main/java/com/genersoft/iot/vmp/service/IUserService.java
Normal file → Executable file
0
src/main/java/com/genersoft/iot/vmp/service/bean/ErrorCallback.java
Normal file → Executable file
0
src/main/java/com/genersoft/iot/vmp/service/bean/ErrorCallback.java
Normal file → Executable file
0
src/main/java/com/genersoft/iot/vmp/service/bean/GPSMsgInfo.java
Normal file → Executable file
0
src/main/java/com/genersoft/iot/vmp/service/bean/GPSMsgInfo.java
Normal file → Executable file
0
src/main/java/com/genersoft/iot/vmp/service/bean/InviteErrorCode.java
Normal file → Executable file
0
src/main/java/com/genersoft/iot/vmp/service/bean/InviteErrorCode.java
Normal file → Executable file
0
src/main/java/com/genersoft/iot/vmp/service/bean/InviteTimeOutCallback.java
Normal file → Executable file
0
src/main/java/com/genersoft/iot/vmp/service/bean/InviteTimeOutCallback.java
Normal file → Executable file
0
src/main/java/com/genersoft/iot/vmp/service/bean/MediaServerLoad.java
Normal file → Executable file
0
src/main/java/com/genersoft/iot/vmp/service/bean/MediaServerLoad.java
Normal file → Executable file
0
src/main/java/com/genersoft/iot/vmp/service/bean/MessageForPushChannel.java
Normal file → Executable file
0
src/main/java/com/genersoft/iot/vmp/service/bean/MessageForPushChannel.java
Normal file → Executable file
0
src/main/java/com/genersoft/iot/vmp/service/bean/MessageForPushChannelResponse.java
Normal file → Executable file
0
src/main/java/com/genersoft/iot/vmp/service/bean/MessageForPushChannelResponse.java
Normal file → Executable file
0
src/main/java/com/genersoft/iot/vmp/service/bean/PlayBackCallback.java
Normal file → Executable file
0
src/main/java/com/genersoft/iot/vmp/service/bean/PlayBackCallback.java
Normal file → Executable file
0
src/main/java/com/genersoft/iot/vmp/service/bean/PlayBackResult.java
Normal file → Executable file
0
src/main/java/com/genersoft/iot/vmp/service/bean/PlayBackResult.java
Normal file → Executable file
0
src/main/java/com/genersoft/iot/vmp/service/bean/PushStreamStatusChangeFromRedisDto.java
Normal file → Executable file
0
src/main/java/com/genersoft/iot/vmp/service/bean/PushStreamStatusChangeFromRedisDto.java
Normal file → Executable file
0
src/main/java/com/genersoft/iot/vmp/service/bean/RequestPushStreamMsg.java
Normal file → Executable file
0
src/main/java/com/genersoft/iot/vmp/service/bean/RequestPushStreamMsg.java
Normal file → Executable file
0
src/main/java/com/genersoft/iot/vmp/service/bean/RequestSendItemMsg.java
Normal file → Executable file
0
src/main/java/com/genersoft/iot/vmp/service/bean/RequestSendItemMsg.java
Normal file → Executable file
0
src/main/java/com/genersoft/iot/vmp/service/bean/ResponseSendItemMsg.java
Normal file → Executable file
0
src/main/java/com/genersoft/iot/vmp/service/bean/ResponseSendItemMsg.java
Normal file → Executable file
0
src/main/java/com/genersoft/iot/vmp/service/bean/SSRCInfo.java
Normal file → Executable file
0
src/main/java/com/genersoft/iot/vmp/service/bean/SSRCInfo.java
Normal file → Executable file
0
src/main/java/com/genersoft/iot/vmp/service/bean/StreamPushItemFromRedis.java
Normal file → Executable file
0
src/main/java/com/genersoft/iot/vmp/service/bean/StreamPushItemFromRedis.java
Normal file → Executable file
0
src/main/java/com/genersoft/iot/vmp/service/bean/ThirdPartyGB.java
Normal file → Executable file
0
src/main/java/com/genersoft/iot/vmp/service/bean/ThirdPartyGB.java
Normal file → Executable file
0
src/main/java/com/genersoft/iot/vmp/service/bean/WvpRedisMsg.java
Normal file → Executable file
0
src/main/java/com/genersoft/iot/vmp/service/bean/WvpRedisMsg.java
Normal file → Executable file
0
src/main/java/com/genersoft/iot/vmp/service/bean/WvpRedisMsgCmd.java
Normal file → Executable file
0
src/main/java/com/genersoft/iot/vmp/service/bean/WvpRedisMsgCmd.java
Normal file → Executable file
0
src/main/java/com/genersoft/iot/vmp/service/impl/DeviceAlarmServiceImpl.java
Normal file → Executable file
0
src/main/java/com/genersoft/iot/vmp/service/impl/DeviceAlarmServiceImpl.java
Normal file → Executable file
0
src/main/java/com/genersoft/iot/vmp/service/impl/DeviceChannelServiceImpl.java
Normal file → Executable file
0
src/main/java/com/genersoft/iot/vmp/service/impl/DeviceChannelServiceImpl.java
Normal file → Executable file
2
src/main/java/com/genersoft/iot/vmp/service/impl/DeviceServiceImpl.java
Normal file → Executable file
2
src/main/java/com/genersoft/iot/vmp/service/impl/DeviceServiceImpl.java
Normal file → Executable file
@@ -210,7 +210,7 @@ public class DeviceServiceImpl implements IDeviceService {
|
||||
redisCatchStorage.updateDevice(device);
|
||||
deviceMapper.update(device);
|
||||
//进行通道离线
|
||||
deviceChannelMapper.offlineByDeviceId(deviceId);
|
||||
// deviceChannelMapper.offlineByDeviceId(deviceId);
|
||||
// 离线释放所有ssrc
|
||||
List<SsrcTransaction> ssrcTransactions = streamSession.getSsrcTransactionForAll(deviceId, null, null, null);
|
||||
if (ssrcTransactions != null && ssrcTransactions.size() > 0) {
|
||||
|
||||
0
src/main/java/com/genersoft/iot/vmp/service/impl/GbStreamServiceImpl.java
Normal file → Executable file
0
src/main/java/com/genersoft/iot/vmp/service/impl/GbStreamServiceImpl.java
Normal file → Executable file
0
src/main/java/com/genersoft/iot/vmp/service/impl/InviteStreamServiceImpl.java
Normal file → Executable file
0
src/main/java/com/genersoft/iot/vmp/service/impl/InviteStreamServiceImpl.java
Normal file → Executable file
0
src/main/java/com/genersoft/iot/vmp/service/impl/LogServiceImpl.java
Normal file → Executable file
0
src/main/java/com/genersoft/iot/vmp/service/impl/LogServiceImpl.java
Normal file → Executable file
101
src/main/java/com/genersoft/iot/vmp/service/impl/MediaServerServiceImpl.java
Normal file → Executable file
101
src/main/java/com/genersoft/iot/vmp/service/impl/MediaServerServiceImpl.java
Normal file → Executable file
@@ -24,23 +24,30 @@ import com.genersoft.iot.vmp.utils.DateUtil;
|
||||
import com.genersoft.iot.vmp.utils.JsonUtil;
|
||||
import com.genersoft.iot.vmp.utils.redis.RedisUtil;
|
||||
import com.genersoft.iot.vmp.vmanager.bean.ErrorCode;
|
||||
import com.genersoft.iot.vmp.vmanager.bean.RecordFile;
|
||||
import okhttp3.OkHttpClient;
|
||||
import okhttp3.Request;
|
||||
import okhttp3.Response;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.beans.factory.annotation.Qualifier;
|
||||
import org.springframework.beans.factory.annotation.Value;
|
||||
import org.springframework.data.redis.core.RedisTemplate;
|
||||
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
|
||||
import org.springframework.scheduling.annotation.Async;
|
||||
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.TransactionDefinition;
|
||||
import org.springframework.transaction.TransactionStatus;
|
||||
import org.springframework.util.Assert;
|
||||
import org.springframework.util.ObjectUtils;
|
||||
|
||||
import java.io.File;
|
||||
import java.time.LocalDateTime;
|
||||
import java.util.*;
|
||||
import java.util.concurrent.CompletableFuture;
|
||||
import java.util.concurrent.ExecutionException;
|
||||
|
||||
/**
|
||||
* 媒体服务器节点管理
|
||||
@@ -104,6 +111,11 @@ public class MediaServerServiceImpl implements IMediaServerService {
|
||||
@Autowired
|
||||
private RedisTemplate<Object, Object> redisTemplate;
|
||||
|
||||
@Qualifier("taskExecutor")
|
||||
@Autowired
|
||||
private ThreadPoolTaskExecutor taskExecutor;
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* 初始化
|
||||
@@ -149,7 +161,7 @@ public class MediaServerServiceImpl implements IMediaServerService {
|
||||
}
|
||||
|
||||
if (streamId == null) {
|
||||
streamId = String.format("%08x", Integer.parseInt(ssrc)).toUpperCase();
|
||||
streamId = String.format("%08x", Long.parseLong(ssrc)).toUpperCase();
|
||||
}
|
||||
int ssrcCheckParam = 0;
|
||||
if (ssrcCheck && tcpMode > 1) {
|
||||
@@ -158,7 +170,7 @@ public class MediaServerServiceImpl implements IMediaServerService {
|
||||
}
|
||||
int rtpServerPort;
|
||||
if (mediaServerItem.isRtpEnable()) {
|
||||
rtpServerPort = zlmServerFactory.createRTPServer(mediaServerItem, streamId, (ssrcCheck && tcpMode == 0)?Integer.parseInt(ssrc):0, port, reUsePort, tcpMode);
|
||||
rtpServerPort = zlmServerFactory.createRTPServer(mediaServerItem, streamId, (ssrcCheck && tcpMode == 0) ? Long.parseLong(ssrc) : 0, port, reUsePort, tcpMode);
|
||||
} else {
|
||||
rtpServerPort = mediaServerItem.getRtpProxyPort();
|
||||
}
|
||||
@@ -749,4 +761,89 @@ public class MediaServerServiceImpl implements IMediaServerService {
|
||||
return result;
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<RecordFile> getRecords(String app, String stream, String startTime, String endTime, List<MediaServerItem> mediaServerItems) {
|
||||
Assert.notNull(app, "app不存在");
|
||||
Assert.notNull(stream, "stream不存在");
|
||||
Assert.notNull(startTime, "startTime不存在");
|
||||
Assert.notNull(endTime, "endTime不存在");
|
||||
Assert.notEmpty(mediaServerItems, "流媒体列表为空");
|
||||
|
||||
CompletableFuture[] completableFutures = new CompletableFuture[mediaServerItems.size()];
|
||||
for (int i = 0; i < mediaServerItems.size(); i++) {
|
||||
completableFutures[i] = getRecordFilesForOne(app, stream, startTime, endTime, mediaServerItems.get(i));
|
||||
}
|
||||
List<RecordFile> result = new ArrayList<>();
|
||||
for (int i = 0; i < completableFutures.length; i++) {
|
||||
try {
|
||||
List<RecordFile> list = (List<RecordFile>) completableFutures[i].get();
|
||||
if (!list.isEmpty()) {
|
||||
for (int g = 0; g < list.size(); g++) {
|
||||
list.get(g).setMediaServerId(mediaServerItems.get(i).getId());
|
||||
}
|
||||
result.addAll(list);
|
||||
}
|
||||
} catch (InterruptedException e) {
|
||||
throw new RuntimeException(e);
|
||||
} catch (ExecutionException e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
}
|
||||
Comparator<RecordFile> comparator = Comparator.comparing(RecordFile::getFileName);
|
||||
result.sort(comparator);
|
||||
return result;
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<String> getRecordDates(String app, String stream, int year, int month, List<MediaServerItem> mediaServerItems) {
|
||||
Assert.notNull(app, "app不存在");
|
||||
Assert.notNull(stream, "stream不存在");
|
||||
Assert.notEmpty(mediaServerItems, "流媒体列表为空");
|
||||
CompletableFuture[] completableFutures = new CompletableFuture[mediaServerItems.size()];
|
||||
|
||||
for (int i = 0; i < mediaServerItems.size(); i++) {
|
||||
completableFutures[i] = getRecordDatesForOne(app, stream, year, month, mediaServerItems.get(i));
|
||||
}
|
||||
List<String> result = new ArrayList<>();
|
||||
CompletableFuture.allOf(completableFutures).join();
|
||||
for (CompletableFuture completableFuture : completableFutures) {
|
||||
try {
|
||||
List<String> list = (List<String>) completableFuture.get();
|
||||
result.addAll(list);
|
||||
} catch (InterruptedException e) {
|
||||
throw new RuntimeException(e);
|
||||
} catch (ExecutionException e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
}
|
||||
Collections.sort(result);
|
||||
return result;
|
||||
}
|
||||
|
||||
@Async
|
||||
public CompletableFuture<List<String>> getRecordDatesForOne(String app, String stream, int year, int month, MediaServerItem mediaServerItem) {
|
||||
JSONObject fileListJson = assistRESTfulUtils.getDateList(mediaServerItem, app, stream, year, month);
|
||||
if (fileListJson != null && !fileListJson.isEmpty()) {
|
||||
if (fileListJson.getString("code") != null && fileListJson.getInteger("code") == 0) {
|
||||
JSONArray data = fileListJson.getJSONArray("data");
|
||||
return CompletableFuture.completedFuture(data.toJavaList(String.class));
|
||||
}
|
||||
}
|
||||
return CompletableFuture.completedFuture(new ArrayList<>());
|
||||
}
|
||||
|
||||
@Async
|
||||
public CompletableFuture<List<RecordFile>> getRecordFilesForOne(String app, String stream, String startTime, String endTime, MediaServerItem mediaServerItem) {
|
||||
JSONObject fileListJson = assistRESTfulUtils.getFileList(mediaServerItem, 1, 100000000, app, stream, startTime, endTime);
|
||||
if (fileListJson != null && !fileListJson.isEmpty()) {
|
||||
if (fileListJson.getString("code") != null && fileListJson.getInteger("code") == 0) {
|
||||
JSONObject data = fileListJson.getJSONObject("data");
|
||||
JSONArray list = data.getJSONArray("list");
|
||||
if (list != null) {
|
||||
return CompletableFuture.completedFuture(list.toJavaList(RecordFile.class));
|
||||
}
|
||||
}
|
||||
}
|
||||
return CompletableFuture.completedFuture(new ArrayList<>());
|
||||
}
|
||||
}
|
||||
|
||||
0
src/main/java/com/genersoft/iot/vmp/service/impl/MediaServiceImpl.java
Normal file → Executable file
0
src/main/java/com/genersoft/iot/vmp/service/impl/MediaServiceImpl.java
Normal file → Executable file
0
src/main/java/com/genersoft/iot/vmp/service/impl/PlatformChannelServiceImpl.java
Normal file → Executable file
0
src/main/java/com/genersoft/iot/vmp/service/impl/PlatformChannelServiceImpl.java
Normal file → Executable file
0
src/main/java/com/genersoft/iot/vmp/service/impl/PlatformServiceImpl.java
Normal file → Executable file
0
src/main/java/com/genersoft/iot/vmp/service/impl/PlatformServiceImpl.java
Normal file → Executable file
0
src/main/java/com/genersoft/iot/vmp/service/impl/PlayServiceImpl.java
Normal file → Executable file
0
src/main/java/com/genersoft/iot/vmp/service/impl/PlayServiceImpl.java
Normal file → Executable file
0
src/main/java/com/genersoft/iot/vmp/service/impl/RoleServerImpl.java
Normal file → Executable file
0
src/main/java/com/genersoft/iot/vmp/service/impl/RoleServerImpl.java
Normal file → Executable file
0
src/main/java/com/genersoft/iot/vmp/service/impl/StreamProxyServiceImpl.java
Normal file → Executable file
0
src/main/java/com/genersoft/iot/vmp/service/impl/StreamProxyServiceImpl.java
Normal file → Executable file
0
src/main/java/com/genersoft/iot/vmp/service/impl/StreamPushServiceImpl.java
Normal file → Executable file
0
src/main/java/com/genersoft/iot/vmp/service/impl/StreamPushServiceImpl.java
Normal file → Executable file
0
src/main/java/com/genersoft/iot/vmp/service/impl/StreamPushUploadFileHandler.java
Normal file → Executable file
0
src/main/java/com/genersoft/iot/vmp/service/impl/StreamPushUploadFileHandler.java
Normal file → Executable file
0
src/main/java/com/genersoft/iot/vmp/service/impl/UserServiceImpl.java
Normal file → Executable file
0
src/main/java/com/genersoft/iot/vmp/service/impl/UserServiceImpl.java
Normal file → Executable file
0
src/main/java/com/genersoft/iot/vmp/service/redisMsg/RedisAlarmMsgListener.java
Normal file → Executable file
0
src/main/java/com/genersoft/iot/vmp/service/redisMsg/RedisAlarmMsgListener.java
Normal file → Executable file
0
src/main/java/com/genersoft/iot/vmp/service/redisMsg/RedisCloseStreamMsgListener.java
Normal file → Executable file
0
src/main/java/com/genersoft/iot/vmp/service/redisMsg/RedisCloseStreamMsgListener.java
Normal file → Executable file
0
src/main/java/com/genersoft/iot/vmp/service/redisMsg/RedisGbPlayMsgListener.java
Normal file → Executable file
0
src/main/java/com/genersoft/iot/vmp/service/redisMsg/RedisGbPlayMsgListener.java
Normal file → Executable file
0
src/main/java/com/genersoft/iot/vmp/service/redisMsg/RedisGpsMsgListener.java
Normal file → Executable file
0
src/main/java/com/genersoft/iot/vmp/service/redisMsg/RedisGpsMsgListener.java
Normal file → Executable file
0
src/main/java/com/genersoft/iot/vmp/service/redisMsg/RedisPushStreamCloseResponseListener.java
Normal file → Executable file
0
src/main/java/com/genersoft/iot/vmp/service/redisMsg/RedisPushStreamCloseResponseListener.java
Normal file → Executable file
0
src/main/java/com/genersoft/iot/vmp/service/redisMsg/RedisPushStreamResponseListener.java
Normal file → Executable file
0
src/main/java/com/genersoft/iot/vmp/service/redisMsg/RedisPushStreamResponseListener.java
Normal file → Executable file
0
src/main/java/com/genersoft/iot/vmp/service/redisMsg/RedisPushStreamStatusListMsgListener.java
Normal file → Executable file
0
src/main/java/com/genersoft/iot/vmp/service/redisMsg/RedisPushStreamStatusListMsgListener.java
Normal file → Executable file
0
src/main/java/com/genersoft/iot/vmp/service/redisMsg/RedisPushStreamStatusMsgListener.java
Normal file → Executable file
0
src/main/java/com/genersoft/iot/vmp/service/redisMsg/RedisPushStreamStatusMsgListener.java
Normal file → Executable file
0
src/main/java/com/genersoft/iot/vmp/service/redisMsg/RedisStreamMsgListener.java
Normal file → Executable file
0
src/main/java/com/genersoft/iot/vmp/service/redisMsg/RedisStreamMsgListener.java
Normal file → Executable file
Reference in New Issue
Block a user