支持云端录像打包下载

This commit is contained in:
lin
2025-10-23 17:44:49 +08:00
parent 6e739dc7d2
commit 2de4932f1e
10 changed files with 282 additions and 108 deletions

View File

@@ -6,6 +6,7 @@ import com.genersoft.iot.vmp.media.bean.MediaServer;
import com.genersoft.iot.vmp.service.bean.CloudRecordItem;
import com.genersoft.iot.vmp.service.bean.DownloadFileInfo;
import com.genersoft.iot.vmp.service.bean.ErrorCallback;
import com.genersoft.iot.vmp.vmanager.cloudRecord.bean.CloudRecordUrl;
import com.github.pagehelper.PageInfo;
import java.util.List;
@@ -68,4 +69,8 @@ public interface ICloudRecordService {
void deleteFileByIds(Set<Integer> ids);
void loadMP4File(String app, String stream, int cloudRecordId, ErrorCallback<StreamInfo> callback);
List<CloudRecordUrl> getUrlListByIds(List<Integer> ids);
List<CloudRecordUrl> getUrlList(String app, String stream, String callId);
}

View File

@@ -20,6 +20,7 @@ import com.genersoft.iot.vmp.storager.IRedisCatchStorage;
import com.genersoft.iot.vmp.storager.dao.CloudRecordServiceMapper;
import com.genersoft.iot.vmp.utils.DateUtil;
import com.genersoft.iot.vmp.vmanager.bean.ErrorCode;
import com.genersoft.iot.vmp.vmanager.cloudRecord.bean.CloudRecordUrl;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import lombok.extern.slf4j.Slf4j;
@@ -385,4 +386,46 @@ public class CloudRecordServiceImpl implements ICloudRecordService {
throw new ControllerException(ErrorCode.ERROR100.getCode(), stringBuilder.toString());
}
}
@Override
public List<CloudRecordUrl> getUrlListByIds(List<Integer> ids) {
List<CloudRecordItem> cloudRecordItems = cloudRecordServiceMapper.queryRecordByIds(ids);
if (cloudRecordItems.isEmpty()) {
return List.of();
}
return getCloudRecordUrl(cloudRecordItems);
}
@Override
public List<CloudRecordUrl> getUrlList(String app, String stream, String callId) {
List<CloudRecordItem> cloudRecordItems = cloudRecordServiceMapper.queryRecordByAppStreamAndCallId(app, stream, callId);
if (cloudRecordItems.isEmpty()) {
return List.of();
}
return getCloudRecordUrl(cloudRecordItems);
}
private List<CloudRecordUrl> getCloudRecordUrl(List<CloudRecordItem> cloudRecordItems) {
if (cloudRecordItems.isEmpty()) {
return List.of();
}
List<CloudRecordUrl> resultList = new ArrayList<>();
for (CloudRecordItem cloudRecordItem : cloudRecordItems) {
CloudRecordUrl cloudRecordUrl = new CloudRecordUrl();
cloudRecordUrl.setId(cloudRecordItem.getId());
cloudRecordUrl.setFileName(cloudRecordItem.getStartTime() + ".mp4");
cloudRecordUrl.setFilePath(cloudRecordItem.getFilePath());
if (!userSetting.getServerId().equals(cloudRecordItem.getServerId())) {
cloudRecordUrl.setDownloadUrl(redisRpcPlayService.getRecordPlayUrl(cloudRecordItem.getServerId(), cloudRecordItem.getId()).getHttpPath());
}else {
MediaServer mediaServer = mediaServerService.getOne(cloudRecordItem.getMediaServerId());
mediaServer.setStreamIp(mediaServer.getIp());
DownloadFileInfo downloadFilePath = mediaServerService.getDownloadFilePath(mediaServer, RecordInfo.getInstance(cloudRecordItem));
cloudRecordUrl.setDownloadUrl(downloadFilePath.getHttpPath());
}
resultList.add(cloudRecordUrl);
}
return resultList;
}
}