gao.qiang пре 1 година
родитељ
комит
6a857bf635

+ 37 - 28
business-service/src/main/java/com/ozs/utils/CameraUtil.java

@@ -271,6 +271,7 @@ ffmpeg -i "concat:1.ts|2.ts" -c copy output.mp4
 
     /**
      * 点播的时候使用
+     *
      * @param cameraCode
      * @param channel
      * @param flay
@@ -279,10 +280,10 @@ ffmpeg -i "concat:1.ts|2.ts" -c copy output.mp4
     public static String getPlayFlvRtsps(String cameraCode, String channel, boolean flay) {
         if (!flay) {
             log.info("-----getPlayFlvRtsps------11------>" + bakUrlRtsp + "/hdl/" + cameraCode + "/" + channel + ".flv");
-            return bakUrlRtsp + "/hdl/" + cameraCode + "/" + channel+".flv";
+            return bakUrlRtsp + "/hdl/" + cameraCode + "/" + channel + ".flv";
         }
         log.info("-------getPlayFlvRtsps----22------>" + bakUrlRtsp + "/hdl/" + cameraCode + "/" + channel + ".flv");
-        return bakUrlRtsp + "/hdl/" + cameraCode + "/" + channel+".flv";
+        return bakUrlRtsp + "/hdl/" + cameraCode + "/" + channel + ".flv";
 
 
 //        if (!flay) {
@@ -386,7 +387,7 @@ ffmpeg -i "concat:1.ts|2.ts" -c copy output.mp4
         return null;
     }
 
-    public String heartbeatgetUrl(String cameraCode, String channel, boolean type) throws Exception{
+    public String heartbeatgetUrl(String cameraCode, String channel, boolean type) throws Exception {
         CompletableFuture<String> future = CompletableFuture.supplyAsync(() -> {
             CamerasVo camerasVo = new CamerasVo();
             camerasVo.setCameraIndexCode(cameraCode);
@@ -400,7 +401,7 @@ ffmpeg -i "concat:1.ts|2.ts" -c copy output.mp4
         return future.get();
     }
 
-    public String heartbeatgetUrls(String cameraCode, String channel, boolean type) throws Exception{
+    public String heartbeatgetUrls(String cameraCode, String channel, boolean type) throws Exception {
         CompletableFuture<String> future = CompletableFuture.supplyAsync(() -> {
             CamerasVo camerasVo = new CamerasVo();
             camerasVo.setCameraIndexCode(cameraCode);
@@ -1080,7 +1081,7 @@ ffmpeg -i "concat:1.ts|2.ts" -c copy output.mp4
         log.info("GetCameraPreviewURL----->" + result);
         long end = System.currentTimeMillis();
         log.info("接受天网接口相应时间: " + sdf.format(new Date(end)));
-        log.info("天网接口请求用时时间:" + (begin - end) / 1000+"秒");
+        log.info("天网接口请求用时时间:" + (begin - end) / 1000 + "秒");
         return result;
     }
 
@@ -1195,36 +1196,39 @@ ffmpeg -i "concat:1.ts|2.ts" -c copy output.mp4
      * @param list
      * @param alarmPlayTimeValue
      */
-    public void playbackURLs(List<String> list, String alarmPlayTimeValue) {
-        log.info("--------------->playbackURLs");
-        log.info("alarmPlayTimeValue------------->" + alarmPlayTimeValue);
-        for (String code : list) {
+    public String playbackURLs(String code, String frontValue, String laterValue) {
+
+        try {
+            TimeUnit.SECONDS.sleep(65 * Integer.parseInt(laterValue));
+            log.info("--------------->playbackURLs");
+            log.info("frontValue------------->" + frontValue);
+            log.info("laterValue------------->" + laterValue);
             PlaybackVo playbackVo = new PlaybackVo();
             playbackVo.setCameraIndexCode(code);
             // 获取当前时间
             OffsetDateTime currentTime = OffsetDateTime.now();
             log.info("currentTime------------->" + currentTime);
-            // 获取当前时间的前10分钟时间
-            OffsetDateTime beforeTenMinutes = currentTime.minusMinutes(Long.parseLong(alarmPlayTimeValue));
+            // 获取报警前的时间
+            OffsetDateTime beforeTenMinutes = currentTime.minusMinutes(Long.parseLong(frontValue));
             log.info("beforeTenMinutes------------->" + beforeTenMinutes);
-            // 获取当前时间的后10分钟时间
-            OffsetDateTime afterTenMinutes = currentTime.plusMinutes(Long.parseLong(alarmPlayTimeValue));
+            // 获取报警后的时间
+            OffsetDateTime afterTenMinutes = currentTime.plusMinutes(Long.parseLong(laterValue));
             log.info("afterTenMinutes------------->" + afterTenMinutes);
             // 格式化时间
             DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSSXXX");
             playbackVo.setBeginTime(beforeTenMinutes.format(formatter));
             log.info("playbackVo.getBeginTime()------------->" + playbackVo.getBeginTime());
-            //现在当前时间:后续需要修改成报警时间的后几分钟
-            playbackVo.setEndTime(currentTime.format(formatter));
+            playbackVo.setEndTime(afterTenMinutes.format(formatter));
             log.info("playbackVo.getEndTime()------------->" + playbackVo.getEndTime());
             // jsonBody.put("protocol","rtsp");
-            //        jsonBody.put("expand","streamform=rtp");
+            // jsonBody.put("expand","streamform=rtp");
             playbackVo.setProtocol("rtsp");
             playbackVo.setExpand("streamform=rtp");
             //对象转换json字符串
             String body = JSONObject.toJSONString(playbackVo);
             //调用天网接口
             log.info("body----->" + body);
+            //获取回放视频的url
             String playbackURLs = getPreviewURLs("/api/video/v1/cameras/playbackURLs", body);
             log.info("playbackURLs----->" + playbackURLs);
             JSONObject outJson = (JSONObject) JSONObject.parse(playbackURLs);
@@ -1233,19 +1237,19 @@ ffmpeg -i "concat:1.ts|2.ts" -c copy output.mp4
                 JSONObject data = outJson.getJSONObject("data");
                 String urls = data.getString("url");
                 log.info("--------------->urls::" + urls);
-
-                String FilePath = "/opt/streams/map/" + code + ".mp4";
-//                String FilePath = "/opt/streams/map/01ea43e6676f4e47bd6c5cd9e02aa006.mp4";
-//            try {
-//                TimeUnit.SECONDS.sleep(62*Integer.parseInt(alarmPlayTimeValue));
-//            } catch (InterruptedException e) {
-//                e.printStackTrace();
-//            }
-                Process process = rtspToMP4.StartRecord(ffmpegPath, urls, FilePath);
-                log.info("------playbackURLs----->>>>:" + process);
-                if (null != process) {
-                    map.put(code, process);
+                //向流媒体推报警回放视频
+                log.info("msg---------->" + httpUrl + "/rtsp/api/pull?target=" + urls + "&streamPath=" + code + "/playback&save=0");
+                String msg = HttpUtils.sendGet(httpUrl + "/rtsp/api/pull?target=" + urls + "&streamPath=" + code + "/playback&save=0");
+                log.info("msg---------->" + msg);
+                if (!msg.equals("ok")) {
+                    return "暂无视频-" + code;
                 }
+//                String FilePath = "/opt/streams/map/" + code + ".mp4";
+//                Process process = rtspToMP4.StartRecord(ffmpegPath, urls, FilePath);
+//                log.info("------playbackURLs----->>>>:" + process);
+//                if (null != process) {
+//                    map.put(code, process);
+//                }
 //                try {
 //                    TimeUnit.SECONDS.sleep(204 * Integer.parseInt(alarmPlayTimeValue));
 //                } catch (InterruptedException e) {
@@ -1253,8 +1257,13 @@ ffmpeg -i "concat:1.ts|2.ts" -c copy output.mp4
 //                }
 //                log.info("------videoCompression----->>>>:");
 //                videoCompression(code);
+            } else {
+                return "天网无视频-" + code;
             }
+        } catch (InterruptedException e) {
+            e.printStackTrace();
         }
+        return null;
     }
 
     public AjaxResult stop(String id) {

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

@@ -1025,7 +1025,7 @@ public class BaseCameraManagementController extends BaseController {
     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,"5"));
+//        CompletableFuture.runAsync(() -> cameraUtil.playbackURLs(collect,"5"));
         return AjaxResult.success("ok");
     }
 

+ 40 - 10
vehicle-sdk/src/main/java/com/ozs/controller/upload/GeoHazardMonitorTokenController.java

@@ -316,9 +316,20 @@ public class GeoHazardMonitorTokenController {
 
             LambdaQueryWrapper<BaseCameraManagement> wrapper = new LambdaQueryWrapper<BaseCameraManagement>();
             if (!ObjectUtils.isEmpty(reqMsgAlarmVo.getAlarmMile())) {
-                wrapper.le(BaseCameraManagement::getBeginMile, reqMsgAlarmVo.getAlarmMile());
-                wrapper.ge(BaseCameraManagement::getEndMile, reqMsgAlarmVo.getAlarmMile());
+                if (reqMsgAlarmVo.getLineDir() == 1) {
+                    wrapper.ge(BaseCameraManagement::getEndMile, reqMsgAlarmVo.getAlarmMile());
+                    wrapper.le(BaseCameraManagement::getBeginMile, reqMsgAlarmVo.getAlarmMile());
+                    wrapper.in(BaseCameraManagement::getMonitoringDirection, 1, 3);
+                    wrapper.orderByAsc(BaseCameraManagement::getInstallMile);
+                }
+                if (reqMsgAlarmVo.getLineDir() == 2) {
+                    wrapper.ge(BaseCameraManagement::getEndMile,reqMsgAlarmVo.getAlarmMile());
+                    wrapper.le(BaseCameraManagement::getBeginMile,reqMsgAlarmVo.getAlarmMile());
+                    wrapper.in(BaseCameraManagement::getMonitoringDirection, 2, 3);
+                    wrapper.orderByDesc(BaseCameraManagement::getInstallMile);
+                }
                 wrapper.eq(BaseCameraManagement::getRailwayCode, reqMsgAlarmVo.getAlarmRailway());
+                wrapper.eq(BaseCameraManagement::getOnline, 2);
                 wrapper.eq(BaseCameraManagement::getEnableOrNot, 1);
             }
             List<BaseCameraManagement> baseCameraManagementList = baseCameraManagementService.list(wrapper);
@@ -377,9 +388,31 @@ public class GeoHazardMonitorTokenController {
                 log.info("->>>>>>>>>>>>>>>>>>>>>>>>>>>>" + result);
                 log.info("result:{}", result);
                 if (!ObjectUtils.isEmpty(baseCameraManagementList)) {
-                    List<String> collect = baseCameraManagementList.stream().map(BaseCameraManagement::getCameraCode).collect(Collectors.toList());
-                    List<SysDictData> data = dictTypeService.selectDictDataByType("alarm_play_time_value");
-                    CompletableFuture.runAsync(() -> cameraUtil.playbackURLs(collect, data.get(0).getDictValue()));
+                    int minDifference = Integer.MAX_VALUE;
+                    String code = null;
+                    for (BaseCameraManagement baseCameraManagement : baseCameraManagementList) {
+                        int difference = Math.abs(baseCameraManagement.getInstallMile() - reqMsgAlarmVo.getAlarmMile());
+                        if (difference < minDifference) {
+                            minDifference = difference;
+                            code = baseCameraManagement.getCameraCode();
+                        }
+                    }
+                    List<SysDictData> frontValue = dictTypeService.selectDictDataByType("alarm_play_time_front_value");
+                    List<SysDictData> laterValue = dictTypeService.selectDictDataByType("alarm_play_time_later_value");
+                    String finalCode = code;
+                    CompletableFuture<String> future =CompletableFuture.supplyAsync(() -> {
+                        String urLs = cameraUtil.playbackURLs(finalCode, frontValue.get(0).getDictValue(), laterValue.get(0).getDictValue());
+                        if (urLs.contains("无视频")) {
+                            return urLs;
+                        }
+                        return null;
+                    });
+                    String url = future.get();
+                    if (url.contains("无视频")) {
+                        jsonObject.put("resultCode", 0);
+                        jsonObject.put("message", url);
+                        return SM4Utils.encryptData_ECB(JSONObject.toJSONString(jsonObject), key);
+                    }
                 }
             } else {
                 BeanUtils.copyProperties(reqMsgAlarmVo, msgAlarmVice);
@@ -391,12 +424,10 @@ public class GeoHazardMonitorTokenController {
             }
             jsonObject.put("resultCode", 1);
             jsonObject.put("message", "ok");
-            jsonObject.put("data", "");
             return SM4Utils.encryptData_ECB(JSONObject.toJSONString(jsonObject), key);
         } else {
             jsonObject.put("resultCode", 2);
             jsonObject.put("message", "token验证失败");
-            jsonObject.put("data", "");
             return JSONObject.toJSONString(jsonObject);
         }
     }
@@ -852,13 +883,12 @@ public class GeoHazardMonitorTokenController {
                         base.last("limit 1");
                         BaseCameraManagement baseCameraManagement = baseCameraManagementService.getOne(base);
                         //根据相机ID找出分组并排序
-                        boolean finalType1 = type;
                         List<BaseCameraManagement> baseCameraManagementList1 = cameraUtil.getBaseCameraManagementList(baseCameraManagement.getId());
                         if (!ObjectUtils.isEmpty(baseCameraManagementList1)) {
                             for (BaseCameraManagement cameraManagement : baseCameraManagementList1) {
-                                String playFlv = cameraUtil.heartbeatgetPlayFlv(cameraManagement.getCameraCode(), cameraManagement.getChannel(), finalType1);
+                                String playFlv = cameraUtil.heartbeatgetPlayFlv(cameraManagement.getCameraCode(), cameraManagement.getChannel(), type);
                                 if (StringUtils.isEmpty(playFlv)) {
-                                    String url = cameraUtil.heartbeatgetUrl(cameraManagement.getCameraCode(), cameraManagement.getChannel(), finalType1);
+                                    String url = cameraUtil.heartbeatgetUrl(cameraManagement.getCameraCode(), cameraManagement.getChannel(), type);
                                     if (url.contains("无视频")) {
                                         jsonObject.put("resultCode", 0);
                                         jsonObject.put("message", url);