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

+ 16 - 7
vehicle-admin/src/main/java/com/ozs/web/controller/sdk/GeoHazardMonitorTokenController.java

@@ -138,6 +138,8 @@ public class GeoHazardMonitorTokenController {
     private SysUserMapper sysUserMapper;
     @Autowired
     WebSocketCommon webSocketCommon;
+    @Autowired
+    private CameraUtil cameraUtil;
     @Resource
     private SkynetHeartbeatLogMapper synetHeartbeatLogMapper;
     @Resource
@@ -648,8 +650,10 @@ public class GeoHazardMonitorTokenController {
                     List<AlarmListVo> listVos = new ArrayList<>();
                     if (baseCameraManagementList.size() > 0) {
                         //获取视频点播地址
-                        String playFlv = CameraUtil.getPlayFlvRtsp(baseCameraManagementList.get(0).getCameraCode(), baseCameraManagementList.get(0).getChannel(), false);
-                        respHeartbeatVo.setCurrentStream(playFlv);
+//                        String playFlv = CameraUtil.getPlayFlvRtsp(baseCameraManagementList.get(0).getCameraCode(), baseCameraManagementList.get(0).getChannel(), false);
+                        cameraUtil.streamConversion(baseCameraManagementList.get(0).getCameraCode());
+//                        respHeartbeatVo.setCurrentStream(playFlv);
+                        respHeartbeatVo.setCurrentStream(baseCameraManagementList.get(0).getRtspUrl());
                         respHeartbeatVo.setIsAlarm(1);
                         respHeartbeatVo.setCameraCode(baseCameraManagementList.get(0).getCameraCode());
 //                        twoMap.put("currentStream", playFlv);
@@ -705,7 +709,8 @@ public class GeoHazardMonitorTokenController {
                         List<BaseCameraManagement> baseList = baseCameraManagementService.list(ment);
                         if (baseList.size() > 0) {
                             for (int o = 0; o < baseList.size(); o++) {
-                                String flv = CameraUtil.getPlayFlvRtsp(baseList.get(o).getCameraCode(), baseList.get(o).getChannel(), false);
+//                                String flv = CameraUtil.getPlayFlvRtsp(baseList.get(o).getCameraCode(), baseList.get(o).getChannel(), false);
+                                cameraUtil.streamConversion(baseCameraManagementList.get(o).getCameraCode());
                                 AlarmListVo alarmListVo = new AlarmListVo();
                                 //alarmList对象
 //                                alarmListVo.setCameraStream(flv);
@@ -762,14 +767,16 @@ public class GeoHazardMonitorTokenController {
                         return SM4Utils.encryptData_ECB(JSONObject.toJSONString(jsonObject), key);
                     }
                     CameraUtil.invite(list1.get(0).getCameraCode(), list1.get(0).getChannel());
-                    String flv = CameraUtil.getPlayFlvRtsp(list1.get(0).getCameraCode(), list1.get(0).getChannel(), false);
-//                    twoMap.put("currentStream", flv);
+//                    String flv = CameraUtil.getPlayFlvRtsp(list1.get(0).getCameraCode(), list1.get(0).getChannel(), false);
+                    cameraUtil.streamConversion(list1.get(0).getCameraCode());
+                    //twoMap.put("currentStream", flv);
                     twoMap.put("currentStream", list1.get(0).getRtspUrl());
                     twoMap.put("cameraCode", list1.get(0).getCameraCode());
                     for (BaseCameraManagement baseCameraManagement : list1) {
-                        String flv1 = CameraUtil.getPlayFlvRtsp(baseCameraManagement.getCameraCode(), baseCameraManagement.getChannel(), false);
+//                        String flv1 = CameraUtil.getPlayFlvRtsp(baseCameraManagement.getCameraCode(), baseCameraManagement.getChannel(), false);
                         CameraUtil.invite(baseCameraManagement.getCameraCode(), baseCameraManagement.getChannel());
                     }
+                    cameraUtil.streamConversion(list1.get(0).getCameraCode());
                     respHeartbeatVo.setCurrentStream(list1.get(0).getRtspUrl());
                     respHeartbeatVo.setIsAlarm(2);
                     respHeartbeatVo.setCameraCode(list1.get(0).getCameraCode());
@@ -1001,7 +1008,8 @@ public class GeoHazardMonitorTokenController {
                 jsonObject.put("data", "没有该相机编码的相机或已离线");
                 return SM4Utils.encryptData_ECB(JSONObject.toJSONString(jsonObject), key);
             }
-            String flv = CameraUtil.getPlayFlvRtsp(one.getCameraCode(), one.getChannel(), false);
+//            String flv = CameraUtil.getPlayFlvRtsp(one.getCameraCode(), one.getChannel(), false);
+            cameraUtil.streamConversion(one.getCameraCode());
 //            map.put("url", flv);
             map.put("url",one.getRtspUrl());
             jsonObject.put("resultCode", 1);
@@ -1148,6 +1156,7 @@ public class GeoHazardMonitorTokenController {
                     List<BaseCameraManagement> baseCameraManagementList = baseCameraManagementService.list(camera);
                     if (baseCameraManagementList.size() > 0) {
                         BaseCameraManagement baseCameraManagement = baseCameraManagementList.get(0);
+                        cameraUtil.streamConversion(baseCameraManagement.getCameraCode());
 //                        long time = one.getAlarmTime().getTime();
 //                        long time2 = time - 600000L;
 //                        one.setAlarmTime(new Date(time2));

+ 21 - 23
vehicle-admin/src/main/java/com/ozs/web/core/util/CameraUtil.java

@@ -32,8 +32,12 @@ import java.io.*;
 import java.text.ParseException;
 import java.text.SimpleDateFormat;
 import java.util.*;
+import java.util.concurrent.Callable;
+import java.util.concurrent.ExecutionException;
 import java.util.concurrent.ExecutorService;
 import java.util.concurrent.Executors;
+import java.util.concurrent.TimeUnit;
+import java.util.concurrent.TimeoutException;
 import java.util.stream.Collectors;
 import java.util.stream.Stream;
 
@@ -707,33 +711,27 @@ ffmpeg -i "concat:1.ts|2.ts" -c copy output.mp4
      * HTTP流转RTSP流
      */
     public void streamConversion(String code) {
-        log.info(ffmpegPath + " -re -i /opt/streams/file/" + code + ".mp4  -c:v copy -c:a copy -f rtsp rtsp://124.70.58.209:8554/live/" + code);
 
+        ExecutorService executor = Executors.newSingleThreadExecutor();
+        Callable<String> task = new Callable<String>() {
+            @Override
+            public String call() throws Exception {
+                // 执行网络请求...
+                log.info(ffmpegPath + " -re -i /opt/streams/file/" + code + ".mp4  -c:v copy -c:a copy -f rtsp rtsp://124.70.58.209:8554/live/" + code);
+                cmdCameraUtil.cmd(ffmpegPath + " -re -i /opt/streams/file/" + code + ".mp4  -c:v copy -c:a copy -f rtsp rtsp://124.70.58.209:8554/live/" + code);
+                return "Response";
+            }
+        };
 
-        BufferedReader br = null;
         try {
-            String basePath = "/usr/bin/ffmpeg ";
-            String command = basePath + " -re -i /opt/streams/file/" + code + ".mp4  -c:v copy -c:a copy -f rtsp rtsp://124.70.58.209:8554/live/" + code;
-            log.info("【command】:{}",command);
-            log.info("rtmp://127.0.0.1/live/"+code);
-            Process process = Runtime.getRuntime().exec(command);
-            br = new BufferedReader(new InputStreamReader(process.getErrorStream()));
-            String line = null;
-            while ((line = br.readLine()) != null) {
-                log.info("视频推流信息{}", line);
-            }
-        } catch (Exception e) {
-            log.error("ffmpeg推流失败:",e);
-        } finally {
-            if (br != null) {
-                try {
-                    br.close();
-                } catch (IOException e) {
-                    log.error("RequestUtil,IOException:",e);
-                }
-            }
+            String result = executor.submit(task).get(2, TimeUnit.SECONDS); // 设置5秒超时时间
+            System.out.println("Response: " + result);
+        } catch (InterruptedException | ExecutionException | TimeoutException e) {
+            // 请求超时处理逻辑
+            System.out.println("Request timeout");
         }
-        
+
+        executor.shutdown();
 
 //        try {
 //            Process proc = Runtime.getRuntime().exec("/bin/bash", null, null);

+ 1 - 1
vehicle-admin/src/main/resources/application.yml

@@ -19,7 +19,7 @@ base:
   dbname: vehicle #数据库名
   #图片路径前缀
   imgUrl: http://124.71.171.71:18801/picbucket
-  ffmpegPath: /usr/bin/ffmpeg
+  ffmpegPath: /usr/local/ffmpeg/bin/ffmpeg
   filePath: /opt/streams/record/flv/
   webUrl: http://124.70.58.209:18812
   bakUrl: http://124.70.58.209:18891