‘liusuyi’
2024-04-20 a919d7e0383efa211bb006f7ec22e5c9c36aa59e
优化本地录像
已修改4个文件
105 ■■■■■ 文件已修改
ard-work/src/main/java/com/ruoyi/device/camera/controller/CameraSdkController.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/java/com/ruoyi/device/camera/domain/CameraCmd.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/java/com/ruoyi/utils/sdk/dhsdk/service/impl/DahuaSDK.java 62 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/java/com/ruoyi/utils/sdk/hiksdk/service/impl/HikvisionSDK.java 39 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
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());
ard-work/src/main/java/com/ruoyi/device/camera/domain/CameraCmd.java
@@ -52,4 +52,6 @@
    String recordBucketName;
    /*录像文件名称*/
    String recordObjectName;
    Long recordId;
}
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());
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());
        }
    }
}