Commit 92e5ed2e30126afc320ddf458c2653c4d41ef61d

Authored by 648540858
1 parent 7e136c9a

优化前端云端录像的播放

src/main/java/com/genersoft/iot/vmp/service/ICloudRecordService.java
... ... @@ -4,6 +4,7 @@ import com.alibaba.fastjson2.JSONArray;
4 4 import com.genersoft.iot.vmp.media.zlm.dto.MediaServerItem;
5 5 import com.genersoft.iot.vmp.media.zlm.dto.hook.OnRecordMp4HookParam;
6 6 import com.genersoft.iot.vmp.service.bean.CloudRecordItem;
  7 +import com.genersoft.iot.vmp.service.bean.DownloadFileInfo;
7 8 import com.github.pagehelper.PageInfo;
8 9  
9 10 import java.util.List;
... ... @@ -50,4 +51,8 @@ public interface ICloudRecordService {
50 51 */
51 52 int changeCollectById(Integer recordId, boolean result);
52 53  
  54 + /**
  55 + * 获取播放地址
  56 + */
  57 + DownloadFileInfo getPlayUrlPath(Integer recordId);
53 58 }
... ...
src/main/java/com/genersoft/iot/vmp/service/impl/CloudRecordServiceImpl.java
... ... @@ -11,8 +11,10 @@ import com.genersoft.iot.vmp.media.zlm.dto.hook.OnRecordMp4HookParam;
11 11 import com.genersoft.iot.vmp.service.ICloudRecordService;
12 12 import com.genersoft.iot.vmp.service.IMediaServerService;
13 13 import com.genersoft.iot.vmp.service.bean.CloudRecordItem;
  14 +import com.genersoft.iot.vmp.service.bean.DownloadFileInfo;
14 15 import com.genersoft.iot.vmp.storager.IRedisCatchStorage;
15 16 import com.genersoft.iot.vmp.storager.dao.CloudRecordServiceMapper;
  17 +import com.genersoft.iot.vmp.utils.CloudRecordUtils;
16 18 import com.genersoft.iot.vmp.utils.DateUtil;
17 19 import com.genersoft.iot.vmp.vmanager.bean.ErrorCode;
18 20 import com.github.pagehelper.PageHelper;
... ... @@ -226,4 +228,15 @@ public class CloudRecordServiceImpl implements ICloudRecordService {
226 228 public int changeCollectById(Integer recordId, boolean result) {
227 229 return cloudRecordServiceMapper.changeCollectById(result, recordId);
228 230 }
  231 +
  232 + @Override
  233 + public DownloadFileInfo getPlayUrlPath(Integer recordId) {
  234 + CloudRecordItem recordItem = cloudRecordServiceMapper.queryOne(recordId);
  235 + if (recordItem == null) {
  236 + throw new ControllerException(ErrorCode.ERROR400.getCode(), "资源不存在");
  237 + }
  238 + String filePath = recordItem.getFilePath();
  239 + MediaServerItem mediaServerItem = mediaServerService.getOne(recordItem.getMediaServerId());
  240 + return CloudRecordUtils.getDownloadFilePath(mediaServerItem, filePath);
  241 + }
229 242 }
... ...
src/main/java/com/genersoft/iot/vmp/service/impl/PlayServiceImpl.java
... ... @@ -32,6 +32,7 @@ import com.genersoft.iot.vmp.service.bean.*;
32 32 import com.genersoft.iot.vmp.storager.IRedisCatchStorage;
33 33 import com.genersoft.iot.vmp.storager.IVideoManagerStorage;
34 34 import com.genersoft.iot.vmp.storager.dao.CloudRecordServiceMapper;
  35 +import com.genersoft.iot.vmp.utils.CloudRecordUtils;
35 36 import com.genersoft.iot.vmp.utils.DateUtil;
36 37 import com.genersoft.iot.vmp.vmanager.bean.ErrorCode;
37 38 import gov.nist.javax.sip.message.SIPResponse;
... ... @@ -728,7 +729,7 @@ public class PlayServiceImpl implements IPlayService {
728 729 logger.info("[录像下载] 收到录像写入磁盘消息内容: " + hookParam);
729 730 OnRecordMp4HookParam recordMp4HookParam = (OnRecordMp4HookParam)hookParam;
730 731 String filePath = recordMp4HookParam.getFile_path();
731   - DownloadFileInfo downloadFileInfo = getDownloadFilePath(mediaServerItem, filePath);
  732 + DownloadFileInfo downloadFileInfo = CloudRecordUtils.getDownloadFilePath(mediaServerItem, filePath);
732 733 InviteInfo inviteInfoForNew = inviteStreamService.getInviteInfo(inviteInfo.getType(), inviteInfo.getDeviceId()
733 734 , inviteInfo.getChannelId(), inviteInfo.getStream());
734 735 inviteInfoForNew.getStreamInfo().setDownLoadFilePath(downloadFileInfo);
... ... @@ -824,21 +825,6 @@ public class PlayServiceImpl implements IPlayService {
824 825 return inviteInfo.getStreamInfo();
825 826 }
826 827  
827   - private DownloadFileInfo getDownloadFilePath(MediaServerItem mediaServerItem, String filePath) {
828   - DownloadFileInfo downloadFileInfo = new DownloadFileInfo();
829   -
830   - String pathTemplate = "%s://%s:%s/index/api/downloadFile?file_path=" + filePath;
831   -
832   - downloadFileInfo.setHttpPath(String.format(pathTemplate, "http", mediaServerItem.getStreamIp(),
833   - mediaServerItem.getHttpPort()));
834   -
835   - if (mediaServerItem.getHttpSSlPort() > 0) {
836   - downloadFileInfo.setHttpsPath(String.format(pathTemplate, "https", mediaServerItem.getStreamIp(),
837   - mediaServerItem.getHttpSSlPort()));
838   - }
839   - return downloadFileInfo;
840   - }
841   -
842 828 private StreamInfo onPublishHandlerForDownload(MediaServerItem mediaServerItemInuse, HookParam hookParam, String deviceId, String channelId, String startTime, String endTime) {
843 829 OnStreamChangedHookParam streamChangedHookParam = (OnStreamChangedHookParam) hookParam;
844 830 StreamInfo streamInfo = onPublishHandler(mediaServerItemInuse, streamChangedHookParam, deviceId, channelId);
... ...
src/main/java/com/genersoft/iot/vmp/storager/dao/CloudRecordServiceMapper.java
... ... @@ -112,4 +112,11 @@ public interface CloudRecordServiceMapper {
112 112 "where call_id = #{callId}" +
113 113 " </script>")
114 114 List<CloudRecordItem> getListByCallId(@Param("callId") String callId);
  115 +
  116 + @Select(" <script>" +
  117 + "select *" +
  118 + " from wvp_cloud_record " +
  119 + "where id = #{id}" +
  120 + " </script>")
  121 + CloudRecordItem queryOne(@Param("id") Integer id);
115 122 }
... ...
src/main/java/com/genersoft/iot/vmp/utils/CloudRecordUtils.java 0 → 100644
  1 +package com.genersoft.iot.vmp.utils;
  2 +
  3 +import com.genersoft.iot.vmp.media.zlm.dto.MediaServerItem;
  4 +import com.genersoft.iot.vmp.service.bean.DownloadFileInfo;
  5 +
  6 +public class CloudRecordUtils {
  7 +
  8 + public static DownloadFileInfo getDownloadFilePath(MediaServerItem mediaServerItem, String filePath) {
  9 + DownloadFileInfo downloadFileInfo = new DownloadFileInfo();
  10 +
  11 + String pathTemplate = "%s://%s:%s/index/api/downloadFile?file_path=" + filePath;
  12 +
  13 + downloadFileInfo.setHttpPath(String.format(pathTemplate, "http", mediaServerItem.getStreamIp(),
  14 + mediaServerItem.getHttpPort()));
  15 +
  16 + if (mediaServerItem.getHttpSSlPort() > 0) {
  17 + downloadFileInfo.setHttpsPath(String.format(pathTemplate, "https", mediaServerItem.getStreamIp(),
  18 + mediaServerItem.getHttpSSlPort()));
  19 + }
  20 + return downloadFileInfo;
  21 + }
  22 +}
... ...
src/main/java/com/genersoft/iot/vmp/vmanager/cloudRecord/CloudRecordController.java
... ... @@ -10,6 +10,7 @@ import com.genersoft.iot.vmp.media.zlm.dto.MediaServerItem;
10 10 import com.genersoft.iot.vmp.service.ICloudRecordService;
11 11 import com.genersoft.iot.vmp.service.IMediaServerService;
12 12 import com.genersoft.iot.vmp.service.bean.CloudRecordItem;
  13 +import com.genersoft.iot.vmp.service.bean.DownloadFileInfo;
13 14 import com.genersoft.iot.vmp.vmanager.bean.ErrorCode;
14 15 import com.github.pagehelper.PageInfo;
15 16 import io.swagger.v3.oas.annotations.Operation;
... ... @@ -237,4 +238,14 @@ public class CloudRecordController {
237 238 return cloudRecordService.changeCollect(false, app, stream, mediaServerId, startTime, endTime, callId);
238 239 }
239 240 }
  241 +
  242 + @ResponseBody
  243 + @GetMapping("/play/path")
  244 + @Operation(summary = "获取播放地址")
  245 + @Parameter(name = "recordId", description = "录像记录的ID", required = true)
  246 + public DownloadFileInfo getPlayUrlPath(
  247 + @RequestParam(required = true) Integer recordId
  248 + ){
  249 + return cloudRecordService.getPlayUrlPath(recordId);
  250 + }
240 251 }
... ...
web_src/src/components/CloudRecord.vue
... ... @@ -213,10 +213,26 @@ export default {
213 213 console.log(row)
214 214 this.chooseRecord = row;
215 215 this.showPlayer = true;
216   - let videoPath = row.filePath.substring(row.filePath.length - 25);
217   - console.log(videoPath)
218   - this.videoUrl = `${this.getFileBasePath(row)}/download/${row.app}/${row.stream}/${videoPath}`
219   - console.log(this.videoUrl)
  216 + this.$axios({
  217 + method: 'get',
  218 + url: `/api/cloud/record/play/path`,
  219 + params: {
  220 + recordId: row.id,
  221 + }
  222 + }).then((res) => {
  223 + console.log(res)
  224 + if (res.data.code === 0) {
  225 + if (location.protocol === "https:") {
  226 + this.videoUrl = res.data.data.httpsPath;
  227 + }else {
  228 + this.videoUrl = res.data.data.httpPath;
  229 + }
  230 + console.log(222 )
  231 + console.log(this.videoUrl )
  232 + }
  233 + }).catch((error) => {
  234 + console.log(error);
  235 + });
220 236 },
221 237 getFileBasePath(item) {
222 238 let basePath = ""
... ...