From a17ac1c04c229294760d58825ac68dbe044e8278 Mon Sep 17 00:00:00 2001
From: ‘liusuyi’ <1951119284@qq.com>
Date: 星期六, 13 四月 2024 10:12:15 +0800
Subject: [PATCH] 增加本地抓图和录像 增加兴趣点引导上报
---
ard-work/src/main/java/com/ruoyi/utils/sdk/dhsdk/service/impl/DahuaSDK.java | 139 +++++++++++++++++++++++++++++++++++++++++++---
1 files changed, 130 insertions(+), 9 deletions(-)
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 e7ce57e..74f78c8 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
@@ -23,12 +23,14 @@
import com.ruoyi.utils.sdk.common.SdkErrorCodeEnum;
import com.ruoyi.utils.sdk.dhsdk.common.ErrorCode;
import com.ruoyi.utils.sdk.dhsdk.lib.NetSDKLib;
+import com.ruoyi.utils.sdk.dhsdk.lib.ToolKits;
import com.ruoyi.utils.sdk.dhsdk.lib.enumeration.EM_NEW_CONFIG;
import com.ruoyi.utils.sdk.dhsdk.lib.enumeration.NET_EM_CFG_OPERATE_TYPE;
import com.ruoyi.utils.sdk.dhsdk.lib.structure.CFG_INFRARED_INFO;
import com.ruoyi.utils.sdk.dhsdk.lib.structure.CFG_VIDEO_IN_FOCUS;
import com.ruoyi.utils.sdk.dhsdk.lib.structure.DH_OUT_PTZ_VIEW_RANGE_STATUS;
import com.ruoyi.utils.sdk.dhsdk.module.*;
+import com.sun.jna.Native;
import com.sun.jna.Pointer;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
@@ -36,12 +38,14 @@
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
+import javax.servlet.ServletOutputStream;
+import javax.servlet.http.HttpServletResponse;
import java.io.*;
+import java.nio.ByteBuffer;
+import java.nio.file.Files;
+import java.nio.file.Paths;
import java.text.DecimalFormat;
-import java.util.Comparator;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
import java.util.concurrent.PriorityBlockingQueue;
import static com.ruoyi.utils.sdk.dhsdk.lib.NetSDKLib.*;
@@ -550,6 +554,101 @@
}
+ @Override
+ public AjaxResult localCapture(CameraCmd cmd) {
+ try {
+ String cameraId = cmd.getCameraId();
+ Integer chanNo = cmd.getChanNo();
+ if (!GlobalVariable.loginMap.containsKey(cameraId)) {
+ return AjaxResult.error("璁惧鏈櫥褰�");
+ }
+ LLong loginId = (LLong) GlobalVariable.loginMap.get(cameraId);
+ String imagePath = FileUtils.createFile("D:/LocalCaptureTemp/" + cameraId + ".jpeg");
+ fCaptureReceiveCB1 m_CaptureReceiveCB = new fCaptureReceiveCB1(imagePath);
+ CapturePictureModule.setSnapRevCallBack(m_CaptureReceiveCB);
+ boolean b = CapturePictureModule.remoteCapturePicture(loginId, chanNo - 1);
+ if (b) {
+ Thread.sleep(200);
+ byte[] imageBytes = Files.readAllBytes(Paths.get(imagePath));
+ //OutputStream outputStream = response.getOutputStream();
+ //outputStream.write(imageBytes);
+ // 鍒涘缓ByteBuffer骞跺皢瀛楄妭鏁扮粍鍐欏叆鍏朵腑
+ //ByteBuffer jpegBuffer = ByteBuffer.wrap(imageBytes);
+ //Base64.Encoder decoder = Base64.getEncoder();
+ //String png_base64 = decoder.encodeToString(jpegBuffer.array());//杞崲鎴恇ase64涓�
+ return AjaxResult.success(imageBytes);
+ } else {
+ return AjaxResult.error("鏈湴鎶撳浘澶辫触");
+ }
+ } catch (Exception ex) {
+ return AjaxResult.error("鏈湴鎶撳浘寮傚父:" + ex);
+ }
+ }
+
+ //鏈湴褰曞儚寮�濮�
+ @Override
+ public AjaxResult localRecordStart(CameraCmd cmd) {
+ 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 (lRealHandle.longValue() <= 0) {
+ log.error("鍙栨祦澶辫触" + getErrorCodePrint());
+ }
+ log.debug("鏈湴褰曞儚寮�濮嬪彇娴佹垚鍔�");
+ 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);
+ } catch (Exception ex) {
+ log.error("鏈湴褰曞儚寮�濮嬪紓甯�" + ex.getMessage());
+ return AjaxResult.error("鏈湴褰曞儚寮�濮嬪紓甯�" + ex.getMessage());
+ }
+ }
+ //鏈湴褰曞儚鍋滄
+ @Override
+ public AjaxResult localRecordStop(CameraCmd cmd) {
+ try {
+ String cameraId = cmd.getCameraId();
+ 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("璁惧鏈紑濮嬪綍鍍�");
+ }
+ } catch (Exception ex) {
+ log.error("鏈湴褰曞儚鍋滄寮傚父" + ex.getMessage());
+ return AjaxResult.error("鏈湴褰曞儚鍋滄寮傚父" + ex.getMessage());
+ }
+ }
/**
* @鎻忚堪 鐭椂褰曞儚
@@ -739,7 +838,6 @@
}
LLong loginId = (LLong) GlobalVariable.loginMap.get(cameraId);
try {
-
boolean bool = netsdk.CLIENT_DHPTZControlEx(loginId, chanNo - 1, NET_PTZ_POINT_MOVE_CONTROL, 0, PresetIndex, 0, 0);
if (!bool) {
log.error("杞嚦棰勭疆鐐瑰け璐�:" + getErrorCodePrint());
@@ -875,10 +973,6 @@
return AjaxResult.success("璇ュ姛鑳芥湭瀹炵幇");
}
- @Override
- public AjaxResult captureJPEGPicture(CameraCmd cmd) {
- return AjaxResult.success("璇ュ姛鑳芥湭瀹炵幇");
- }
//鍒囨崲閫忛浘
@Override
@@ -1125,4 +1219,31 @@
}
}
+ // 鎶撳浘鎺ユ敹鍥炶皟:褰撴姄鍥炬垚鍔燂紝sdk浼氳皟鐢ㄨ鍑芥暟
+ public static class fCaptureReceiveCB1 implements NetSDKLib.fSnapRev {
+ private String picPath;
+ public fCaptureReceiveCB1(String picPath) {
+ this.picPath = picPath;
+ }
+ public void invoke(LLong lLoginID, Pointer pBuf, int RevLen, int EncodeType, int CmdSerial, Pointer dwUser) {
+ if (pBuf != null && RevLen > 0) {
+ byte[] buf = pBuf.getByteArray(0, RevLen);
+ //瀛樺偍鍒版湰鍦�
+ InputStream input = new ByteArrayInputStream(buf);
+ OutputStream output = null;
+ try {
+ output = new FileOutputStream(picPath);
+ byte[] buffer = new byte[1024];
+ int bytesRead;
+ while ((bytesRead = input.read(buffer)) != -1) {
+ output.write(buffer, 0, bytesRead);
+ }
+ input.close();
+ output.close();
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+ }
+ }
}
--
Gitblit v1.9.3