Kaynağa Gözat

报警回放测试

gao.qiang 1 yıl önce
ebeveyn
işleme
62821f7d1e

+ 88 - 0
business-service/src/main/java/com/ozs/utils/RtspToMP4.java

@@ -0,0 +1,88 @@
+package com.ozs.utils;
+
+
+import org.springframework.stereotype.Component;
+
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.io.OutputStream;
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+
+@Component
+public class RtspToMP4 {
+
+    public class In implements Runnable{
+        private InputStream inputStream;
+
+        public In(InputStream inputStream) {
+            this.inputStream = inputStream;
+        }
+        @Override
+        public void run() {
+            try {
+                //转成字符输入流
+                InputStreamReader inputStreamReader = new InputStreamReader(inputStream, "gbk");
+                int len = -1;
+                char[] c = new char[1024];
+                //读取进程输入流中的内容
+                while ((len = inputStreamReader.read(c)) != -1) {
+                    String s = new String(c, 0, len);
+                    System.out.print(s);
+                }
+            }catch (Exception e) {
+                e.printStackTrace();
+            }
+        }
+    }
+
+    public Process StartRecord(String ffmpegPath,String streamUrl, String FilePath){
+        ProcessBuilder processBuilder = new ProcessBuilder();
+        //定义命令内容
+        List<String> command = new ArrayList<>();
+        command.add(ffmpegPath);
+        command.add("-rtsp_transport");
+        command.add("tcp");
+        command.add("-y");
+        command.add("-i");
+        command.add(streamUrl);
+        command.add("-c");
+        command.add("copy");
+        command.add("-f");
+        command.add("mp4");
+        command.add(FilePath);
+        processBuilder.command(command);
+        System.out.println("脚本:" + command.toString());
+        //将标准输入流和错误输入流合并,通过标准输入流读取信息
+        processBuilder.redirectErrorStream(true);
+        try {
+            //启动进程
+            Process process = processBuilder.start();
+            System.out.println("开始时间:" + new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date(System.currentTimeMillis())));
+            //获取输入流
+            InputStream inputStream = process.getInputStream();
+            Thread inThread = new Thread(new In(inputStream));
+            inThread.start();
+            return process;
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        return null;
+    }
+
+    public boolean stopRecord(Process process) {
+        try {
+            OutputStream os = process.getOutputStream();
+            os.write("q".getBytes());
+            // 一定要刷新
+            os.flush();
+            os.close();
+        } catch (Exception err) {
+            err.printStackTrace();
+            return false;
+        }
+        return true;
+    }
+}

+ 27 - 8
vehicle-admin/src/main/java/com/ozs/web/controller/accountmanagment/BaseCameraManagementController.java

@@ -27,7 +27,9 @@ import com.ozs.system.service.DataScoreUtil;
 import com.ozs.system.service.ISysDeptService;
 import com.ozs.utils.CameraUtil;
 import com.ozs.utils.CaneraConfig;
+import com.ozs.utils.RtspToMP4;
 import com.ozs.web.core.config.GetCameraPreviewURL;
+import io.minio.Result;
 import io.swagger.annotations.ApiOperation;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.BeanUtils;
@@ -75,9 +77,7 @@ public class BaseCameraManagementController extends BaseController {
     @Autowired
     private BaseRailwayManagementService baseRailwayManagementService;
     @Autowired
-    private ServerConfig serverConfig;
-    @Autowired
-    private CaneraConfig caneraConfig;
+    private RtspToMP4 rtspToMP4;
     @Autowired
     private IdempotenceUtils idempotenceUtils;
     @Autowired
@@ -88,6 +88,8 @@ public class BaseCameraManagementController extends BaseController {
     @Autowired
     private CameraUtil cameraUtil;
 
+    private Map<String, Process> map = new HashMap<>();
+
     /**
      * 所有相机列表+权限
      */
@@ -1034,12 +1036,29 @@ public class BaseCameraManagementController extends BaseController {
     @GetMapping(value = "/getAlarmRecord")
     @ApiOperation("报警回放本地测试")
     @Log(title = "相机台账管理", businessType = BusinessType.MESSAGE)
-    public AjaxResult getAlarmRecord() {
-        List<BaseCameraManagement> list = baseCameraManagementService.list(new QueryWrapper<BaseCameraManagement>().eq("line_dir",2));
-        List<String> collect = list.stream().map(BaseCameraManagement::getCameraCode).collect(Collectors.toList());
-        CompletableFuture.runAsync(() -> cameraUtil.playbackURLs(collect));
-        return AjaxResult.success("ok");
+    public AjaxResult getAlarmRecord(){
+        String ffmpegPath = "/usr/bin/ffmpeg";
+        String streamUrl = "rtsp://124.70.58.209:8554/42010001541320000024/42010001541320000024";
+        String FilePath = "/opt/streams/map/42010001541320000024.mp4";
+        Process process = rtspToMP4.StartRecord(ffmpegPath, streamUrl, FilePath);
+        if (null != process) {
+            map.put("42010001541320000024", process);
+            return AjaxResult.success();
+        }
+        return AjaxResult.error();
     }
 
+    @ApiOperation(value = "结束录制")
+    @GetMapping(value = "/stop")
+    public AjaxResult stop(String id) {
+        if (map.containsKey(id)) {
+            Process process = map.get(id);
+            if (null != process) {
+                rtspToMP4.stopRecord(process);
+                return AjaxResult.success();
+            }
+        }
+        return AjaxResult.error();
+    }
 }