From 92e5ed2e30126afc320ddf458c2653c4d41ef61d Mon Sep 17 00:00:00 2001
From: 648540858 <648540858@qq.com>
Date: 星期三, 06 十二月 2023 16:10:32 +0800
Subject: [PATCH] 优化前端云端录像的播放

---
 src/main/java/com/genersoft/iot/vmp/service/impl/CloudRecordServiceImpl.java        |   13 ++++++
 src/main/java/com/genersoft/iot/vmp/vmanager/cloudRecord/CloudRecordController.java |   11 +++++
 src/main/java/com/genersoft/iot/vmp/service/impl/PlayServiceImpl.java               |   18 +--------
 src/main/java/com/genersoft/iot/vmp/service/ICloudRecordService.java                |    5 ++
 src/main/java/com/genersoft/iot/vmp/utils/CloudRecordUtils.java                     |   22 +++++++++++
 src/main/java/com/genersoft/iot/vmp/storager/dao/CloudRecordServiceMapper.java      |    7 +++
 web_src/src/components/CloudRecord.vue                                              |   24 ++++++++++--
 7 files changed, 80 insertions(+), 20 deletions(-)

diff --git a/src/main/java/com/genersoft/iot/vmp/service/ICloudRecordService.java b/src/main/java/com/genersoft/iot/vmp/service/ICloudRecordService.java
index 87798a0..83b1b15 100755
--- a/src/main/java/com/genersoft/iot/vmp/service/ICloudRecordService.java
+++ b/src/main/java/com/genersoft/iot/vmp/service/ICloudRecordService.java
@@ -4,6 +4,7 @@
 import com.genersoft.iot.vmp.media.zlm.dto.MediaServerItem;
 import com.genersoft.iot.vmp.media.zlm.dto.hook.OnRecordMp4HookParam;
 import com.genersoft.iot.vmp.service.bean.CloudRecordItem;
+import com.genersoft.iot.vmp.service.bean.DownloadFileInfo;
 import com.github.pagehelper.PageInfo;
 
 import java.util.List;
@@ -50,4 +51,8 @@
      */
     int changeCollectById(Integer recordId, boolean result);
 
+    /**
+     * 鑾峰彇鎾斁鍦板潃
+     */
+    DownloadFileInfo getPlayUrlPath(Integer recordId);
 }
diff --git a/src/main/java/com/genersoft/iot/vmp/service/impl/CloudRecordServiceImpl.java b/src/main/java/com/genersoft/iot/vmp/service/impl/CloudRecordServiceImpl.java
index d9d6fe3..c9ed173 100644
--- a/src/main/java/com/genersoft/iot/vmp/service/impl/CloudRecordServiceImpl.java
+++ b/src/main/java/com/genersoft/iot/vmp/service/impl/CloudRecordServiceImpl.java
@@ -11,8 +11,10 @@
 import com.genersoft.iot.vmp.service.ICloudRecordService;
 import com.genersoft.iot.vmp.service.IMediaServerService;
 import com.genersoft.iot.vmp.service.bean.CloudRecordItem;
+import com.genersoft.iot.vmp.service.bean.DownloadFileInfo;
 import com.genersoft.iot.vmp.storager.IRedisCatchStorage;
 import com.genersoft.iot.vmp.storager.dao.CloudRecordServiceMapper;
+import com.genersoft.iot.vmp.utils.CloudRecordUtils;
 import com.genersoft.iot.vmp.utils.DateUtil;
 import com.genersoft.iot.vmp.vmanager.bean.ErrorCode;
 import com.github.pagehelper.PageHelper;
@@ -226,4 +228,15 @@
     public int changeCollectById(Integer recordId, boolean result) {
        return cloudRecordServiceMapper.changeCollectById(result, recordId);
     }
+
+    @Override
+    public DownloadFileInfo getPlayUrlPath(Integer recordId) {
+        CloudRecordItem recordItem = cloudRecordServiceMapper.queryOne(recordId);
+        if (recordItem == null) {
+            throw new ControllerException(ErrorCode.ERROR400.getCode(), "璧勬簮涓嶅瓨鍦�");
+        }
+        String filePath = recordItem.getFilePath();
+        MediaServerItem mediaServerItem = mediaServerService.getOne(recordItem.getMediaServerId());
+        return CloudRecordUtils.getDownloadFilePath(mediaServerItem, filePath);
+    }
 }
diff --git a/src/main/java/com/genersoft/iot/vmp/service/impl/PlayServiceImpl.java b/src/main/java/com/genersoft/iot/vmp/service/impl/PlayServiceImpl.java
index 7ca07ee..2d94f30 100755
--- a/src/main/java/com/genersoft/iot/vmp/service/impl/PlayServiceImpl.java
+++ b/src/main/java/com/genersoft/iot/vmp/service/impl/PlayServiceImpl.java
@@ -32,6 +32,7 @@
 import com.genersoft.iot.vmp.storager.IRedisCatchStorage;
 import com.genersoft.iot.vmp.storager.IVideoManagerStorage;
 import com.genersoft.iot.vmp.storager.dao.CloudRecordServiceMapper;
+import com.genersoft.iot.vmp.utils.CloudRecordUtils;
 import com.genersoft.iot.vmp.utils.DateUtil;
 import com.genersoft.iot.vmp.vmanager.bean.ErrorCode;
 import gov.nist.javax.sip.message.SIPResponse;
@@ -728,7 +729,7 @@
                             logger.info("[褰曞儚涓嬭浇] 鏀跺埌褰曞儚鍐欏叆纾佺洏娑堟伅鍐呭锛� " + hookParam);
                             OnRecordMp4HookParam recordMp4HookParam = (OnRecordMp4HookParam)hookParam;
                             String filePath = recordMp4HookParam.getFile_path();
-                            DownloadFileInfo downloadFileInfo = getDownloadFilePath(mediaServerItem, filePath);
+                            DownloadFileInfo downloadFileInfo = CloudRecordUtils.getDownloadFilePath(mediaServerItem, filePath);
                             InviteInfo inviteInfoForNew = inviteStreamService.getInviteInfo(inviteInfo.getType(), inviteInfo.getDeviceId()
                                     , inviteInfo.getChannelId(), inviteInfo.getStream());
                             inviteInfoForNew.getStreamInfo().setDownLoadFilePath(downloadFileInfo);
@@ -822,21 +823,6 @@
         }
         inviteStreamService.updateInviteInfo(inviteInfo);
         return inviteInfo.getStreamInfo();
-    }
-
-    private DownloadFileInfo getDownloadFilePath(MediaServerItem mediaServerItem, String filePath) {
-        DownloadFileInfo downloadFileInfo = new DownloadFileInfo();
-
-        String pathTemplate = "%s://%s:%s/index/api/downloadFile?file_path=" + filePath;
-
-        downloadFileInfo.setHttpPath(String.format(pathTemplate, "http", mediaServerItem.getStreamIp(),
-                mediaServerItem.getHttpPort()));
-
-        if (mediaServerItem.getHttpSSlPort() > 0) {
-            downloadFileInfo.setHttpsPath(String.format(pathTemplate, "https", mediaServerItem.getStreamIp(),
-                    mediaServerItem.getHttpSSlPort()));
-        }
-        return downloadFileInfo;
     }
 
     private StreamInfo onPublishHandlerForDownload(MediaServerItem mediaServerItemInuse, HookParam hookParam, String deviceId, String channelId, String startTime, String endTime) {
diff --git a/src/main/java/com/genersoft/iot/vmp/storager/dao/CloudRecordServiceMapper.java b/src/main/java/com/genersoft/iot/vmp/storager/dao/CloudRecordServiceMapper.java
index 3724fec..08f67ba 100644
--- a/src/main/java/com/genersoft/iot/vmp/storager/dao/CloudRecordServiceMapper.java
+++ b/src/main/java/com/genersoft/iot/vmp/storager/dao/CloudRecordServiceMapper.java
@@ -112,4 +112,11 @@
             "where call_id = #{callId}" +
             " </script>")
     List<CloudRecordItem> getListByCallId(@Param("callId") String callId);
+
+    @Select(" <script>" +
+            "select *" +
+            " from wvp_cloud_record " +
+            "where id = #{id}" +
+            " </script>")
+    CloudRecordItem queryOne(@Param("id") Integer id);
 }
diff --git a/src/main/java/com/genersoft/iot/vmp/utils/CloudRecordUtils.java b/src/main/java/com/genersoft/iot/vmp/utils/CloudRecordUtils.java
new file mode 100644
index 0000000..8954bd7
--- /dev/null
+++ b/src/main/java/com/genersoft/iot/vmp/utils/CloudRecordUtils.java
@@ -0,0 +1,22 @@
+package com.genersoft.iot.vmp.utils;
+
+import com.genersoft.iot.vmp.media.zlm.dto.MediaServerItem;
+import com.genersoft.iot.vmp.service.bean.DownloadFileInfo;
+
+public class CloudRecordUtils {
+
+    public static DownloadFileInfo getDownloadFilePath(MediaServerItem mediaServerItem, String filePath) {
+        DownloadFileInfo downloadFileInfo = new DownloadFileInfo();
+
+        String pathTemplate = "%s://%s:%s/index/api/downloadFile?file_path=" + filePath;
+
+        downloadFileInfo.setHttpPath(String.format(pathTemplate, "http", mediaServerItem.getStreamIp(),
+                mediaServerItem.getHttpPort()));
+
+        if (mediaServerItem.getHttpSSlPort() > 0) {
+            downloadFileInfo.setHttpsPath(String.format(pathTemplate, "https", mediaServerItem.getStreamIp(),
+                    mediaServerItem.getHttpSSlPort()));
+        }
+        return downloadFileInfo;
+    }
+}
diff --git a/src/main/java/com/genersoft/iot/vmp/vmanager/cloudRecord/CloudRecordController.java b/src/main/java/com/genersoft/iot/vmp/vmanager/cloudRecord/CloudRecordController.java
index 41633cf..dd7de2b 100755
--- a/src/main/java/com/genersoft/iot/vmp/vmanager/cloudRecord/CloudRecordController.java
+++ b/src/main/java/com/genersoft/iot/vmp/vmanager/cloudRecord/CloudRecordController.java
@@ -10,6 +10,7 @@
 import com.genersoft.iot.vmp.service.ICloudRecordService;
 import com.genersoft.iot.vmp.service.IMediaServerService;
 import com.genersoft.iot.vmp.service.bean.CloudRecordItem;
+import com.genersoft.iot.vmp.service.bean.DownloadFileInfo;
 import com.genersoft.iot.vmp.vmanager.bean.ErrorCode;
 import com.github.pagehelper.PageInfo;
 import io.swagger.v3.oas.annotations.Operation;
@@ -237,4 +238,14 @@
             return cloudRecordService.changeCollect(false, app, stream, mediaServerId, startTime, endTime, callId);
         }
     }
+
+    @ResponseBody
+    @GetMapping("/play/path")
+    @Operation(summary = "鑾峰彇鎾斁鍦板潃")
+    @Parameter(name = "recordId", description = "褰曞儚璁板綍鐨処D", required = true)
+    public DownloadFileInfo getPlayUrlPath(
+            @RequestParam(required = true) Integer recordId
+    ){
+        return cloudRecordService.getPlayUrlPath(recordId);
+    }
 }
diff --git a/web_src/src/components/CloudRecord.vue b/web_src/src/components/CloudRecord.vue
index ca963e6..4a4a74b 100755
--- a/web_src/src/components/CloudRecord.vue
+++ b/web_src/src/components/CloudRecord.vue
@@ -213,10 +213,26 @@
       console.log(row)
       this.chooseRecord = row;
       this.showPlayer = true;
-      let videoPath = row.filePath.substring(row.filePath.length - 25);
-      console.log(videoPath)
-      this.videoUrl = `${this.getFileBasePath(row)}/download/${row.app}/${row.stream}/${videoPath}`
-      console.log(this.videoUrl)
+      this.$axios({
+        method: 'get',
+        url: `/api/cloud/record/play/path`,
+        params: {
+          recordId: row.id,
+        }
+      }).then((res) => {
+        console.log(res)
+        if (res.data.code === 0) {
+          if (location.protocol === "https:") {
+            this.videoUrl = res.data.data.httpsPath;
+          }else {
+            this.videoUrl = res.data.data.httpPath;
+          }
+          console.log(222 )
+          console.log(this.videoUrl )
+        }
+      }).catch((error) => {
+        console.log(error);
+      });
     },
       getFileBasePath(item) {
           let basePath = ""

--
Gitblit v1.8.0