Quellcode durchsuchen

新增视频相关回放接口

sptkw vor 1 Jahr
Ursprung
Commit
03dcb15474

+ 15 - 3
iot-module/iot-module-stream/iot-module-stream-biz/src/main/java/com/middle/platform/stream/biz/controller/RecordController.java

@@ -18,7 +18,7 @@ import java.util.List;
  * @date 2023-12-15 08:46:49
  */
 @RestController
-@RequestMapping("/record")
+@RequestMapping(value = "/record", name = "录像回放")
 public class RecordController {
     @Resource
     private StreamMediaService streamMediaService;
@@ -31,7 +31,7 @@ public class RecordController {
      * @param keywords
      * @return
      */
-    @GetMapping(value = "/getDevicePathList", name = "获取设备流标签信息")
+    @GetMapping(value = "/getDevicePathList", name = "获取设备列表(包含流标签信息")
     public Result<Object> getDevicePathList(@RequestParam("keywords") String keywords) {
         List<DevicesPathVo> deviceList = sDeviceService.getDevicePathList(keywords);
         if (!BeanUtil.isEmpty(deviceList)) {
@@ -41,16 +41,28 @@ public class RecordController {
         }
     }
 
-    @PostMapping("/page")
+    @PostMapping(value = "/page", name = "分页查询(根据流标签)")
     public Result<Object> page(@RequestBody StreamRecordPage streamRecordPage) {
         return Result.ok(streamMediaService.recordPage(streamRecordPage));
     }
+
     /**
      * 视频播放
      */
+    @GetMapping(value = "/getVideoUrl", name = "获取回放播放信息")
+    public Result<Object> getVideoUrl(@RequestParam("path") String path) {
+        return Result.ok(streamMediaService.getRecordVideoUrl(path));
+    }
     /**
      * 视频下载
      */
+    @GetMapping(value = "/getDownLoadUrl", name = "获取回放视频下载地址")
+    public Result<Object> getDownLoadUrl(@RequestParam("path") String path) {
+        return Result.ok(streamMediaService.getDownLoadUrl(path));
+    }
+
+
+
     /**
      * 视频删除
      */

+ 40 - 0
iot-module/iot-module-stream/iot-module-stream-biz/src/main/java/com/middle/platform/stream/biz/domain/res/RecordPageRes.java

@@ -0,0 +1,40 @@
+package com.middle.platform.stream.biz.domain.res;
+
+import lombok.Data;
+import lombok.extern.slf4j.Slf4j;
+
+import java.time.LocalDateTime;
+
+/**
+ * @author Aick Spt
+ * @date 2024-05-06 10:31
+ */
+@Slf4j
+@Data
+public class RecordPageRes {
+
+
+
+    /**
+     * 文件名称-path路径重唱
+     */
+    private String path;
+
+    /**
+     * 封面地址
+     */
+    private Long size;
+
+    /**
+     * 封面地址
+     */
+    private LocalDateTime createTime;
+
+
+    public RecordPageRes(String path, Long size, LocalDateTime dateTime) {
+
+        this.path = path;
+        this.size = size;
+        this.createTime = dateTime;
+    }
+}

+ 33 - 0
iot-module/iot-module-stream/iot-module-stream-biz/src/main/java/com/middle/platform/stream/biz/pojo/RecordPage.java

@@ -0,0 +1,33 @@
+package com.middle.platform.stream.biz.pojo;
+
+import com.middle.platform.common.core.modle.BasePara;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.util.List;
+
+/**
+ * @author xucaiqin
+ * @date 2024-04-28 14:26:41
+ */
+@Getter
+@Setter
+public class RecordPage {
+
+    /**
+     * 流分页数据
+     */
+    private List<RecordPageFiles> files;
+
+
+    /**
+     * 总条数
+     */
+    private int totalCount;
+
+
+    /**
+     * 总页数
+     */
+    private int totalPageCount;
+}

+ 30 - 0
iot-module/iot-module-stream/iot-module-stream-biz/src/main/java/com/middle/platform/stream/biz/pojo/RecordPageFiles.java

@@ -0,0 +1,30 @@
+package com.middle.platform.stream.biz.pojo;
+
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * @author xucaiqin
+ * @date 2024-04-28 14:26:41
+ */
+@Getter
+@Setter
+public class RecordPageFiles {
+
+    /**
+     * 文件名-路径
+     */
+    private String path;
+
+    /**
+     * 大小
+     */
+    private Long size;
+
+    /**
+     * 时长
+     */
+    private Long duration;
+
+
+}

+ 2 - 1
iot-module/iot-module-stream/iot-module-stream-biz/src/main/java/com/middle/platform/stream/biz/service/ApiProxy.java

@@ -5,6 +5,7 @@ import com.alibaba.fastjson.JSONObject;
 import com.alibaba.fastjson.TypeReference;
 import com.middle.platform.common.core.utils.OkHttpUtils;
 import com.middle.platform.stream.biz.pojo.ApiInfo;
+import com.middle.platform.stream.biz.pojo.RecordPage;
 import com.middle.platform.stream.biz.properties.StreamMediaProperties;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
@@ -181,7 +182,7 @@ public class ApiProxy {
         });
     }
 
-    public Object recordListPage(String type, int pageSize, int pageNum, String streamPath) {
+    public RecordPage recordListPage(String type, int pageSize, int pageNum, String streamPath) {
         String sync = getHttp(ApiInfo.RECORD_LIST_PAGE, new HashMap<>() {{
             put("type", type);
             put("pageSize", pageSize);

+ 17 - 1
iot-module/iot-module-stream/iot-module-stream-biz/src/main/java/com/middle/platform/stream/biz/service/StreamMediaService.java

@@ -1,5 +1,7 @@
 package com.middle.platform.stream.biz.service;
 
+import com.github.pagehelper.PageInfo;
+import com.middle.platform.stream.biz.domain.res.RecordPageRes;
 import com.middle.platform.stream.biz.pojo.StreamRecordPage;
 
 import java.util.ArrayList;
@@ -15,5 +17,19 @@ public interface StreamMediaService {
      * @param streamRecordPage
      * @return
      */
-    ArrayList<Object> recordPage(StreamRecordPage streamRecordPage);
+    Object recordPage(StreamRecordPage streamRecordPage);
+
+    /**
+     * 获取回放播放信息
+     * @author Aick Spt
+     * @date 2024-05-09 11:35
+     */
+    Object getRecordVideoUrl(String path);
+
+    /**
+     * 获取回放视频下载地址
+     * @author Aick Spt
+     * @date 2024-05-09 11:35
+     */
+    Object getDownLoadUrl(String path);
 }

+ 53 - 7
iot-module/iot-module-stream/iot-module-stream-biz/src/main/java/com/middle/platform/stream/biz/service/impl/StreamMediaServiceImpl.java

@@ -1,13 +1,23 @@
 package com.middle.platform.stream.biz.service.impl;
 
+import com.github.pagehelper.PageInfo;
+import com.middle.platform.stream.biz.domain.res.RecordPageRes;
+import com.middle.platform.stream.biz.pojo.RecordPage;
+import com.middle.platform.stream.biz.pojo.RecordPageFiles;
 import com.middle.platform.stream.biz.pojo.StreamRecordPage;
+import com.middle.platform.stream.biz.properties.StreamMediaProperties;
 import com.middle.platform.stream.biz.service.ApiProxy;
 import com.middle.platform.stream.biz.service.StreamMediaService;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.stereotype.Service;
 
-import java.util.ArrayList;
+import java.time.Instant;
+import java.time.LocalDateTime;
+import java.time.ZoneOffset;
+import java.util.List;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
 
 /**
  * @author xucaiqin
@@ -19,19 +29,55 @@ import java.util.ArrayList;
 public class StreamMediaServiceImpl implements StreamMediaService {
     private final ApiProxy apiProxy;
 
+    private final StreamMediaProperties streamMediaProperties;
 
     @Override
-    public ArrayList<Object> recordPage(StreamRecordPage streamRecordPage) {
+    public Object recordPage(StreamRecordPage streamRecordPage) {
         log.info("recordPage in...");
+        PageInfo<RecordPageRes> pageInfo = new PageInfo<>();
         //API调用
-        Object o = apiProxy.recordListPage("mp4", streamRecordPage.getPage(), streamRecordPage.getPageSize(), streamRecordPage.getPath());
-        log.info("rtmpList:{}", o);
-        return new ArrayList<>() {{
-            add(o);
-        }};
+        RecordPage recordPage = apiProxy.recordListPage("mp4", streamRecordPage.getPage(), streamRecordPage.getPageSize(), streamRecordPage.getPath());
+        log.info("recordPage:{}", recordPage);
+        pageInfo.setPageSize(streamRecordPage.getPageSize());
+        pageInfo.setPages(streamRecordPage.getPage());
+        pageInfo.setTotal(recordPage.getTotalCount());
+        List<RecordPageRes> recordPageResList = new java.util.ArrayList<>();
+        // 匹配字符串中的时间戳
+        Pattern pattern = Pattern.compile("\\d+\\.mp4$");
+        for (RecordPageFiles recordPageFiles : recordPage.getFiles()) {
+            Matcher matcher = pattern.matcher(recordPageFiles.getPath());
+            // 提取时间戳字符串
+            String timestampStr = "";
+            if (matcher.find()) {
+                timestampStr = matcher.group().replace(".mp4", "");
+            }
+            // 转换为LocalDateTime格式
+            LocalDateTime dateTime = LocalDateTime.ofInstant(Instant.ofEpochSecond(Long.parseLong(timestampStr)), ZoneOffset.UTC);
+            recordPageResList.add(new RecordPageRes(recordPageFiles.getPath(), recordPageFiles.getSize(), dateTime));
+        }
+        pageInfo.setList(recordPageResList);
+        return pageInfo;
     }
 
+    /**
+     * 获取回放播放信息
+     * @author Aick Spt
+     * @date 2024-05-09 11:35
+     */
+    @Override
+    public Object getRecordVideoUrl(String path) {
 
+        return streamMediaProperties.getUrl() + path;
+    }
 
+    /**
+     * 获取回放视频下载地址
+     * @author Aick Spt
+     * @date 2024-05-09 11:37
+     */
+    @Override
+    public Object getDownLoadUrl(String path) {
 
+        return streamMediaProperties.getUrl() + path;
+    }
 }