소스 검색

feat: 改用了系统自带的上传系统

WANGKANG 10 달 전
부모
커밋
0fa4d1d944

+ 19 - 11
taais-modules/taais-biz/src/main/java/com/taais/biz/controller/Video2imageController.java

@@ -89,25 +89,27 @@ public class Video2imageController extends BaseController {
     @PostMapping
     public CommonResult add(@Validated @RequestBody Video2imageBo video2imageBo) {
         Video2imageBo newVideo2imageBo = new Video2imageBo();
-        if (StringUtils.isEmpty(video2imageBo.getFileId())) {
-            return CommonResult.fail("请上传视频文件!");
-        }
-
-        Path filePath = Paths.get(UPLOAD_DIR, video2imageBo.getFileId());
-        File file = new File(filePath.toString());
-        if (!file.exists() || !file.isFile()) {
-            return CommonResult.fail("视频文件不存在!");
-        }
+        // if (StringUtils.isEmpty(video2imageBo.getFileId())) {
+        //     return CommonResult.fail("请上传视频文件!");
+        // }
+        //
+        // Path filePath = Paths.get(UPLOAD_DIR, video2imageBo.getFileId());
+        // File file = new File(filePath.toString());
+        // if (!file.exists() || !file.isFile()) {
+        //     return CommonResult.fail("视频文件不存在!");
+        // }
         //
         // if (video2imageBo.getFps() >= 60 || video2imageBo.getFps() <= 0) {
         //     return CommonResult.fail("fps值必须在0-60之间!");
         // }
 
         newVideo2imageBo.setName(video2imageBo.getName());
-        newVideo2imageBo.setFileId(video2imageBo.getFileId());
+        // newVideo2imageBo.setFileId(video2imageBo.getFileId());
         newVideo2imageBo.setFps(video2imageBo.getFps());
         newVideo2imageBo.setStatus(NOT_START);
-        newVideo2imageBo.setPath(Paths.get(UPLOAD_DIR, video2imageBo.getFileId()).toString());
+        newVideo2imageBo.setPath(video2imageBo.getUrl());
+        newVideo2imageBo.setUrl(video2imageBo.getUrl());
+        // newVideo2imageBo.setPath(Paths.get(UPLOAD_DIR, video2imageBo.getFileId()).toString());
         newVideo2imageBo.setOutPath(Paths.get(UPLOAD_DIR, video2imageBo.getName(), "images").toString());
         newVideo2imageBo.setRemarks(video2imageBo.getRemarks());
 
@@ -147,6 +149,12 @@ public class Video2imageController extends BaseController {
         return CommonResult.success();
     }
 
+
+    /**
+     * 此函数弃用,改用系统自带的上传系统
+     * @param file
+     * @return
+     */
     @PostMapping("/upload")
     public CommonResult uploadFile(@RequestParam("file") MultipartFile file) {
         if (file.isEmpty()) {

+ 8 - 0
taais-modules/taais-biz/src/main/java/com/taais/biz/domain/Video2image.java

@@ -87,5 +87,13 @@ public class Video2image extends BaseEntity {
      */
     private Long fps;
 
+    /**
+     * 获取视频的url
+     */
+    private String url;
 
+    /**
+     * 图片压缩包路径
+     */
+    private String zipFilePath;
 }

+ 6 - 0
taais-modules/taais-biz/src/main/java/com/taais/biz/domain/bo/Video2imageBo.java

@@ -93,4 +93,10 @@ public class Video2imageBo extends BaseEntity{
      * 视频文件ID
      */
     private String fileId;
+
+    /**
+     * 获取视频的url
+     */
+    @NotBlank(message = "视频url不能为空")
+    private String url;
 }

+ 6 - 6
taais-modules/taais-biz/src/main/java/com/taais/biz/service/impl/Video2imageServiceImpl.java

@@ -181,11 +181,11 @@ public class Video2imageServiceImpl extends BaseServiceImpl<Video2imageMapper, V
         log.info("outPath: " + outPath);
         log.info("fps: " + fps);
 
-        File file = new File(videoPath);
-        if (!file.exists() || !file.isFile()) {
-            log.error("文件不存在...");
-            return false;
-        }
+        // File file = new File(videoPath);
+        // if (!file.exists() || !file.isFile()) {
+        //     log.error("文件不存在...");
+        //     return false;
+        // }
 
         video2image.setStatus(RUNNING);
         video2image.setStartTime(new Date());
@@ -199,7 +199,7 @@ public class Video2imageServiceImpl extends BaseServiceImpl<Video2imageMapper, V
             log_str += "开始截取图片子线程...\n";
             log_str += "开始截取图片...\n";
             try {
-                VideoCapture.startCaputre(videoPath, outPath, fps);
+                VideoCapture.startCaputreFromUrl(videoPath, outPath, fps);
                 log.info("视频转图片结束...");
                 log_str += "视频转图片结束...\n";
 

+ 49 - 9
taais-modules/taais-biz/src/main/java/com/taais/biz/utils/VideoCapture.java

@@ -9,22 +9,22 @@
 
 package com.taais.biz.utils;
 
+import java.io.IOException;
+import java.io.File;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.Paths;
 
 import org.bytedeco.javacv.FFmpegFrameGrabber;
 import org.bytedeco.javacv.Frame;
-import org.bytedeco.javacv.Java2DFrameConverter;
 
-import java.io.IOException;
-import java.io.File;
 import javax.imageio.ImageIO;
 import java.awt.image.BufferedImage;
 
+import org.bytedeco.javacv.Java2DFrameConverter;
 
-import java.nio.file.Files;
-import java.nio.file.Path;
-import java.nio.file.Paths;
 
-import java.util.stream.Stream;
+import org.bytedeco.opencv.opencv_core.Stream;
 
 public class VideoCapture {
     /**
@@ -37,7 +37,7 @@ public class VideoCapture {
      * @throws IOException
      * @throws InterruptedException
      */
-    public static void startCaputre(String filePath, String savePath__, Long fps)
+    public static void startCaputreFromFile(String filePath, String savePath__, Long fps)
         throws IOException {
         FFmpegFrameGrabber grabber = FFmpegFrameGrabber.createDefault(filePath);
 
@@ -76,6 +76,46 @@ public class VideoCapture {
         System.out.println("--- 截图完成---");
     }
 
+    public static void startCaputreFromUrl(String videoUrl, String savePath__, Long fps)
+        throws IOException {
+        FFmpegFrameGrabber grabber = FFmpegFrameGrabber.createDefault(videoUrl);
+        grabber.setOption("rtsp_transport", "tcp"); // 使用tcp的方式,不然会丢包很严重
+
+        Path savePath = Paths.get(savePath__);
+        if (Files.exists(savePath)) {
+            System.out.println("目录已存在: " + savePath);
+            System.out.println("清空里面的内容");
+            try {
+                deleteDirectory(savePath);
+            } catch (Exception e) {
+                e.printStackTrace();
+            }
+        }
+        Files.createDirectories(savePath);
+
+        System.out.println("--- 开始截图 ---");
+        grabber.start();
+        long current_time_stamp = 0;
+        long current_time_stamp_step = 1000000 / fps;
+        int idx = 0;
+        while (true) {
+            Frame frame = grabber.grabImage();
+            if (frame != null) {
+                // System.out.println(frame.timestamp);
+                if (frame.timestamp >= current_time_stamp) {
+                    idx += 1;
+                    current_time_stamp += current_time_stamp_step;
+                    saveImage(frame, savePath__, idx);
+                }
+            } else {
+                break;
+            }
+        }
+        grabber.stop();
+        grabber.release();
+        System.out.println("--- 截图完成---");
+    }
+
     public static boolean saveImage(Frame frame, String savePath, int idx) {
         try {
             Path outPath = Paths.get(savePath, System.currentTimeMillis() + "_" + idx + ".jpg");
@@ -118,7 +158,7 @@ public class VideoCapture {
     private static void deleteDirectory(Path directory) throws Exception {
         if (Files.isDirectory(directory)) {
             // 遍历目录中的所有文件和子目录
-            try (Stream<Path> stream = Files.list(directory)) {
+            try (java.util.stream.Stream<Path> stream = Files.list(directory)) {
                 stream.forEach(path -> {
                     try {
                         deleteDirectory(path);