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()); } } }