From a919d7e0383efa211bb006f7ec22e5c9c36aa59e Mon Sep 17 00:00:00 2001
From: ‘liusuyi’ <1951119284@qq.com>
Date: Sat, 20 Apr 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