From a919d7e0383efa211bb006f7ec22e5c9c36aa59e Mon Sep 17 00:00:00 2001
From: ‘liusuyi’ <1951119284@qq.com>
Date: 星期六, 20 四月 2024 10:17:54 +0800
Subject: [PATCH] 优化本地录像

---
 ard-work/src/main/java/com/ruoyi/utils/sdk/hiksdk/service/impl/HikvisionSDK.java   |   39 ++++++++++---------
 ard-work/src/main/java/com/ruoyi/device/camera/domain/CameraCmd.java               |    2 +
 ard-work/src/main/java/com/ruoyi/device/camera/controller/CameraSdkController.java |    2 
 ard-work/src/main/java/com/ruoyi/utils/sdk/dhsdk/service/impl/DahuaSDK.java        |   62 +++++++++++++++++-------------
 4 files changed, 59 insertions(+), 46 deletions(-)

diff --git a/ard-work/src/main/java/com/ruoyi/device/camera/controller/CameraSdkController.java b/ard-work/src/main/java/com/ruoyi/device/camera/controller/CameraSdkController.java
index 1568ce7..8835bad 100644
--- a/ard-work/src/main/java/com/ruoyi/device/camera/controller/CameraSdkController.java
+++ b/ard-work/src/main/java/com/ruoyi/device/camera/controller/CameraSdkController.java
@@ -407,7 +407,7 @@
     @ApiOperation("鏈湴褰曞儚鍋滄")
     @PostMapping("/localRecordStop")
     @Log(title = "鏈湴褰曞儚鍋滄", businessType = BusinessType.CONTROL)
-    @ApiOperationSupport(includeParameters = {"cmd.cameraId", "cmd.chanNo"})
+    @ApiOperationSupport(includeParameters = {"cmd.cameraId", "cmd.chanNo", "cmd.lRealHandle"})
     public @ResponseBody
     void localRecordStop(@RequestBody CameraCmd cmd, HttpServletResponse response) throws IOException {
         cmd.setOperator(SecurityUtils.getUserId());
diff --git a/ard-work/src/main/java/com/ruoyi/device/camera/domain/CameraCmd.java b/ard-work/src/main/java/com/ruoyi/device/camera/domain/CameraCmd.java
index 0469bff..59b8e3a 100644
--- a/ard-work/src/main/java/com/ruoyi/device/camera/domain/CameraCmd.java
+++ b/ard-work/src/main/java/com/ruoyi/device/camera/domain/CameraCmd.java
@@ -52,4 +52,6 @@
     String recordBucketName;
     /*褰曞儚鏂囦欢鍚嶇О*/
     String recordObjectName;
+
+    Long recordId;
 }
diff --git a/ard-work/src/main/java/com/ruoyi/utils/sdk/dhsdk/service/impl/DahuaSDK.java b/ard-work/src/main/java/com/ruoyi/utils/sdk/dhsdk/service/impl/DahuaSDK.java
index 85e0da4..fd31780 100644
--- a/ard-work/src/main/java/com/ruoyi/utils/sdk/dhsdk/service/impl/DahuaSDK.java
+++ b/ard-work/src/main/java/com/ruoyi/utils/sdk/dhsdk/service/impl/DahuaSDK.java
@@ -587,31 +587,31 @@
         try {
             String cameraId = cmd.getCameraId();
             Integer chanNo = cmd.getChanNo();
-            String path = FileUtils.createFile("D:/LocalRecordTemp/" + cameraId + ".mp4");
+
             if (!GlobalVariable.loginMap.containsKey(cameraId)) {
                 return AjaxResult.error("璁惧鏈櫥褰�");
             }
             LLong loginId = (LLong) GlobalVariable.loginMap.get(cameraId);
-            LLong lRealHandle;
-            if (GlobalVariable.previewMap.containsKey(cameraId)) {
-                lRealHandle = new LLong(GlobalVariable.previewMap.get(cameraId));
-                RealPlayModule.stopRealPlay(lRealHandle);
-                GlobalVariable.previewMap.remove(cameraId);
-                log.debug("鍋滄褰撳墠褰曞儚");
-            }
-            lRealHandle = RealPlayModule.startRealPlay(loginId, chanNo - 1, path);
+            //if (GlobalVariable.previewMap.containsKey(cameraId)) {
+            //    lRealHandle = new LLong(GlobalVariable.previewMap.get(cameraId));
+            //    RealPlayModule.stopRealPlay(lRealHandle);
+            //    GlobalVariable.previewMap.remove(cameraId);
+            //    log.debug("鍋滄褰撳墠褰曞儚");
+            //}
+            String path = FileUtils.createFile("D:/LocalRecordTemp/" + cameraId + ".mp4");
+            LLong lRealHandle = RealPlayModule.startRealPlay(loginId, chanNo - 1, path);
             if (lRealHandle.longValue() <= 0) {
                 log.error("鍙栨祦澶辫触" + getErrorCodePrint());
             }
             log.debug("鏈湴褰曞儚寮�濮嬪彇娴佹垚鍔�");
-            GlobalVariable.previewMap.put(cameraId, lRealHandle.intValue());
-            GlobalVariable.threadMap.put(cameraId, Thread.currentThread().getName());
+            //GlobalVariable.previewMap.put(cameraId, lRealHandle.intValue());
+            //GlobalVariable.threadMap.put(cameraId, Thread.currentThread().getName());
             //if (!netsdk.CLIENT_SaveRealData(lRealHandle, path)) {
             //    log.error("淇濆瓨瑙嗛鏂囦欢鍒颁复鏃舵枃浠跺す澶辫触 閿欒鐮佷负:  " +getErrorCodePrint());
             //    return false;
             //}
             log.debug("鏈湴褰曞儚寮�濮�");
-            return AjaxResult.success("鏈湴褰曞儚寮�濮�,褰曞儚ID:"+lRealHandle);
+            return AjaxResult.success("鏈湴褰曞儚寮�濮�",lRealHandle);
         } catch (Exception ex) {
             log.error("鏈湴褰曞儚寮�濮嬪紓甯�" + ex.getMessage());
             return AjaxResult.error("鏈湴褰曞儚寮�濮嬪紓甯�" + ex.getMessage());
@@ -622,24 +622,32 @@
     public AjaxResult localRecordStop(CameraCmd cmd) {
         try {
             String cameraId = cmd.getCameraId();
+            LLong lRealHandle = new LLong(cmd.getRecordId());
             if (!GlobalVariable.loginMap.containsKey(cameraId)) {
                 return AjaxResult.error("璁惧鏈櫥褰�");
             }
-            LLong lRealHandle;
-            if (GlobalVariable.previewMap.containsKey(cameraId)) {
-                lRealHandle = new LLong(GlobalVariable.previewMap.get(cameraId));
-                RealPlayModule.stopRealPlay(lRealHandle);
-                GlobalVariable.previewMap.remove(cameraId);
-                log.debug("鏈湴褰曞儚鍋滄");
-                String recordPath = FileUtils.createFile("D:/LocalRecordTemp/" + cameraId + ".mp4");
-                byte[] imageBytes = Files.readAllBytes(Paths.get(recordPath));
-               // OutputStream outputStream = response.getOutputStream();
-               // outputStream.write(imageBytes);
-                return AjaxResult.success(imageBytes);
-            }
-            else {
-                return AjaxResult.error("璁惧鏈紑濮嬪綍鍍�");
-            }
+
+            RealPlayModule.stopRealPlay(lRealHandle);
+            log.debug("鏈湴褰曞儚鍋滄");
+            String recordPath = FileUtils.createFile("D:/LocalRecordTemp/" + cameraId + ".mp4");
+            byte[] imageBytes = Files.readAllBytes(Paths.get(recordPath));
+            // OutputStream outputStream = response.getOutputStream();
+            // outputStream.write(imageBytes);
+            return AjaxResult.success(imageBytes);
+            //if (GlobalVariable.previewMap.containsKey(cameraId)) {
+            //    lRealHandle = new LLong(GlobalVariable.previewMap.get(cameraId));
+            //    RealPlayModule.stopRealPlay(lRealHandle);
+            //    GlobalVariable.previewMap.remove(cameraId);
+            //    log.debug("鏈湴褰曞儚鍋滄");
+            //    String recordPath = FileUtils.createFile("D:/LocalRecordTemp/" + cameraId + ".mp4");
+            //    byte[] imageBytes = Files.readAllBytes(Paths.get(recordPath));
+            //   // OutputStream outputStream = response.getOutputStream();
+            //   // outputStream.write(imageBytes);
+            //    return AjaxResult.success(imageBytes);
+            //}
+            //else {
+            //    return AjaxResult.error("璁惧鏈紑濮嬪綍鍍�");
+            //}
         } catch (Exception ex) {
             log.error("鏈湴褰曞儚鍋滄寮傚父" + ex.getMessage());
             return AjaxResult.error("鏈湴褰曞儚鍋滄寮傚父" + ex.getMessage());
diff --git a/ard-work/src/main/java/com/ruoyi/utils/sdk/hiksdk/service/impl/HikvisionSDK.java b/ard-work/src/main/java/com/ruoyi/utils/sdk/hiksdk/service/impl/HikvisionSDK.java
index b8dcd9c..77f2a33 100644
--- a/ard-work/src/main/java/com/ruoyi/utils/sdk/hiksdk/service/impl/HikvisionSDK.java
+++ b/ard-work/src/main/java/com/ruoyi/utils/sdk/hiksdk/service/impl/HikvisionSDK.java
@@ -1523,7 +1523,7 @@
             // 鎶撳浘鍒板唴瀛橈紝鍗曞抚鏁版嵁鎹曡幏骞朵繚瀛樻垚JPEG瀛樻斁鍦ㄦ寚瀹氱殑鍐呭瓨绌洪棿涓�
             boolean is = hCNetSDK.NET_DVR_CaptureJPEGPicture_NEW(userId, channelNum, jpeg, jpegBuffer, 1024 * 1024, a);
             //log.debug("-----------杩欓噷寮�濮嬪浘鐗囧瓨鍏ュ唴瀛�----------" + is);
-           // OutputStream outputStream = response.getOutputStream();
+            // OutputStream outputStream = response.getOutputStream();
             //outputStream.write(jpegBuffer.array());
             //Base64.Encoder decoder = Base64.getEncoder();
             //  BASE64Encoder encoder = new BASE64Encoder();
@@ -1965,12 +1965,12 @@
             previewinfo.bBlocked = 0;//0- 闈為樆濉炲彇娴侊紝1-闃诲鍙栨祦
             previewinfo.byNPQMode = 0;//NPQ妯″紡锛�0-鐩磋繛妯″紡锛�1-杩囨祦濯掍綋妯″紡
             previewinfo.write();
-            if (GlobalVariable.previewMap.containsKey(cameraId)) {
-                Integer lRealHandle = GlobalVariable.previewMap.get(cameraId);
-                hCNetSDK.NET_DVR_StopRealPlay(lRealHandle);
-                GlobalVariable.previewMap.remove(cameraId);
-                log.debug("鍋滄褰撳墠褰曞儚");
-            }
+            //if (GlobalVariable.previewMap.containsKey(cameraId)) {
+            //    Integer lRealHandle = GlobalVariable.previewMap.get(cameraId);
+            //    hCNetSDK.NET_DVR_StopRealPlay(lRealHandle);
+            //    GlobalVariable.previewMap.remove(cameraId);
+            //    log.debug("鍋滄褰撳墠褰曞儚");
+            //}
             int lRealHandle = hCNetSDK.NET_DVR_RealPlay_V40(userId, previewinfo, null, null);
             if (lRealHandle == -1) {
                 int code = hCNetSDK.NET_DVR_GetLastError();
@@ -1978,15 +1978,15 @@
                 return AjaxResult.error("鏈湴褰曞儚鍙栨祦澶辫触: errorCode:" + code + " errorInfo:" + SdkErrorCodeEnum.getDescByCode(code));
             }
             log.debug("鏈湴褰曞儚鍙栨祦鎴愬姛");
-            GlobalVariable.threadMap.put(cameraId, Thread.currentThread().getName());
-            GlobalVariable.previewMap.put(cameraId, lRealHandle);
-            if (!hCNetSDK.NET_DVR_SaveRealData_V30(GlobalVariable.previewMap.get(cameraId), 2, path)) {
+            //GlobalVariable.threadMap.put(cameraId, Thread.currentThread().getName());
+            //GlobalVariable.previewMap.put(cameraId, lRealHandle);
+            if (!hCNetSDK.NET_DVR_SaveRealData_V30(lRealHandle, 2, path)) {
                 int code = hCNetSDK.NET_DVR_GetLastError();
                 log.error("淇濆瓨瑙嗛鏂囦欢鍒颁复鏃舵枃浠跺す澶辫触 閿欒鐮佷负:  " + hCNetSDK.NET_DVR_GetLastError());
                 return AjaxResult.error("鏈湴褰曞儚鍙栨祦澶辫触: errorCode:" + code + " errorInfo:" + SdkErrorCodeEnum.getDescByCode(code));
             }
             log.debug("鏈湴褰曞儚寮�濮�");
-            return AjaxResult.success("褰曞儚寮�濮�,褰曞儚ID:" + lRealHandle);
+            return AjaxResult.success("褰曞儚寮�濮�", lRealHandle);
         } catch (Exception ex) {
             log.error("鏈湴褰曞儚寮�濮嬪紓甯�" + ex.getMessage());
             return AjaxResult.error("鏈湴褰曞儚寮�濮嬪紓甯�" + ex.getMessage());
@@ -1999,7 +1999,8 @@
         try {
             String cameraId = cmd.getCameraId();
             Integer channelNum = cmd.getChanNo();
-            String recordPath = FileUtils.createFile("D:/LocalRecordTemp/" + cameraId + ".mp4");
+            Integer lRealHandle = cmd.getRecordId().intValue();
+
             if (!GlobalVariable.loginMap.containsKey(cameraId)) {
                 return AjaxResult.error("璁惧鏈櫥褰�");
             }
@@ -2026,19 +2027,21 @@
             previewinfo.byNPQMode = 0;//NPQ妯″紡锛�0-鐩磋繛妯″紡锛�1-杩囨祦濯掍綋妯″紡
             previewinfo.write();
             //endregion
-            if (GlobalVariable.previewMap.containsKey(cameraId)) {
-                Integer lRealHandle = GlobalVariable.previewMap.get(cameraId);
-                hCNetSDK.NET_DVR_StopRealPlay(lRealHandle);
-                GlobalVariable.previewMap.remove(cameraId);
-            }
+            //if (GlobalVariable.previewMap.containsKey(cameraId)) {
+            //    Integer lRealHandle = GlobalVariable.previewMap.get(cameraId);
+            //    hCNetSDK.NET_DVR_StopRealPlay(lRealHandle);
+            //    GlobalVariable.previewMap.remove(cameraId);
+            //}
+            hCNetSDK.NET_DVR_StopRealPlay(lRealHandle);
             log.debug("鏈湴褰曞儚鍋滄");
+            String recordPath = FileUtils.createFile("D:/LocalRecordTemp/" + cameraId + ".mp4");
             byte[] recordBytes = Files.readAllBytes(Paths.get(recordPath));
             //OutputStream outputStream = response.getOutputStream();
             //outputStream.write(imageBytes);
             return AjaxResult.success(recordBytes);
         } catch (Exception ex) {
             log.error("鏈湴褰曞儚鍋滄寮傚父" + ex.getMessage());
-            return AjaxResult.error("鏈湴褰曞儚鍋滄寮傚父" +ex.getMessage());
+            return AjaxResult.error("鏈湴褰曞儚鍋滄寮傚父" + ex.getMessage());
         }
     }
 }

--
Gitblit v1.9.3