gao.qiang 1 рік тому
батько
коміт
ff71de383a

+ 27 - 26
vehicle-admin/src/main/java/com/ozs/web/core/util/CameraUtil.java

@@ -707,39 +707,40 @@ ffmpeg -i "concat:1.ts|2.ts" -c copy output.mp4
      * HTTP流转RTSP流
      */
     public   void streamConversion(String code) {
+        log.info("ffmpeg -re -i /opt/streams/file/"+code+".mp4  -c:v copy -c:a copy -f rtsp rtsp://124.70.58.209:8554/live/"+code+"s");
+//        cmdCameraUtil.cmd("find /opt/streams/record/flv/*/*/ -mmin +5 -name *.flv -exec rm -rf {} \\;");
+
         try {
-            // 创建ProcessBuilder对象,设置ffmpeg命令及参数
-            ProcessBuilder pb = new ProcessBuilder("/usr/local/bin/ffmpeg", "-re", "-i", "/opt/streams/file/42010001541320000112.mp4", "-c:v", "copy", "-c:a", "copy", "-f", "rtsp", "rtsp://124.70.58.209:8554/live/44");
-            log.info("pb--------------"+pb);
-            // 设置工作目录,如果需要的话
-            // pb.directory(new File("path/to/working/directory"));
-
-            // 启动进程
-            Process process = pb.start();
-
-            // 等待进程执行完成
-            int exitCode = process.waitFor();
-
-            // 打印ffmpeg命令的输出信息
-            BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));
-            String line;
-            while ((line = reader.readLine()) != null) {
-               log.info("line------------"+line);
+            Process proc = Runtime.getRuntime().exec("/bin/bash", null, null);
+            BufferedReader in = new BufferedReader(new InputStreamReader(proc.getInputStream()));
+            PrintWriter out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(proc.getOutputStream())), true);
+            String commit = "ffmpeg -re -i /opt/streams/file/"+code+".mp4  -c:v copy -c:a copy -f rtsp rtsp://124.70.58.209:8554/live/"+code;
+            List<String> commands = new ArrayList<>();
+
+            // 删除
+            commands.add(commit);
+            log.info("HTTP流转RTSP流:{}", commands);
+            for (String line : commands) {
+                out.println(line);
             }
+            out.println("exit");// 这个命令必须执行,否则in流不结束。
+            String rspLine = "";
+            while ((rspLine = in.readLine()) != null) {
+                System.out.println(rspLine);
 
-            // 打印ffmpeg命令的错误信息
-            BufferedReader errorReader = new BufferedReader(new InputStreamReader(process.getErrorStream()));
-            String errorLine;
-            while ((errorLine = errorReader.readLine()) != null) {
-                log.info("errorLine------------"+errorLine);
             }
+            int i = proc.waitFor();
+            log.info("执行结果:{}", i);
 
-            // 打印ffmpeg命令的退出码
-            log.info("Exit Code: " + exitCode);
-        } catch (IOException | InterruptedException e) {
-            log.error("eeee------------"+e.getMessage());
+            in.close();
+            out.close();
+            proc.destroy();
+        } catch (IOException e) {
+            log.error(e.getMessage());
+        } catch (InterruptedException e) {
             e.printStackTrace();
         }
+
     }