From 55a4112533c958492078a5a94c90667e6cf5969c Mon Sep 17 00:00:00 2001
From: ‘liusuyi’ <1951119284@qq.com>
Date: 星期六, 13 四月 2024 10:39:22 +0800
Subject: [PATCH] 修改获取附近车辆bug 修改默认所有相机启动引导队列
---
ard-work/src/main/java/com/ruoyi/utils/sdk/hiksdk/service/impl/HikvisionSDK.java | 196 ++++++++++++++++++++++++++++++++++++++----------
1 files changed, 155 insertions(+), 41 deletions(-)
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 3f8969b..b8dcd9c 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
@@ -32,9 +32,12 @@
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
+import javax.servlet.http.HttpServletResponse;
import java.io.*;
import java.math.BigDecimal;
import java.nio.ByteBuffer;
+import java.nio.file.Files;
+import java.nio.file.Paths;
import java.text.DecimalFormat;
import java.util.*;
import java.util.concurrent.PriorityBlockingQueue;
@@ -284,16 +287,12 @@
//鍒涘缓寮曞闃熷垪
private void createGuideQueue(ArdCameras camera) {
- if (camera.getCamAlarmGuideEnable() != null) {
- if (camera.getCamAlarmGuideEnable() == 1) {
- if (!GuidePriorityQueue.cameraQueueMap.containsKey(camera.getId())) {
- Comparator<GuideTask> comparator = GuidePriorityQueue.getComparator();
- PriorityBlockingQueue<GuideTask> priorityQueue = new PriorityBlockingQueue<>(1000, comparator);
- GuidePriorityQueue.cameraQueueMap.put(camera.getId(), priorityQueue);
- //鍚姩闃熷垪澶勭悊鍣�
- queueHandler.process(camera.getId());
- }
- }
+ if (!GuidePriorityQueue.cameraQueueMap.containsKey(camera.getId())) {
+ Comparator<GuideTask> comparator = GuidePriorityQueue.getComparator();
+ PriorityBlockingQueue<GuideTask> priorityQueue = new PriorityBlockingQueue<>(1000, comparator);
+ GuidePriorityQueue.cameraQueueMap.put(camera.getId(), priorityQueue);
+ //鍚姩闃熷垪澶勭悊鍣�
+ queueHandler.process(camera.getId());
}
}
@@ -1497,38 +1496,45 @@
*
* @param cmd 鐩告満鍛戒护
*/
- public AjaxResult captureJPEGPicture(CameraCmd cmd) {
- String cameraId = cmd.getCameraId();
- Integer channelNum = cmd.getChanNo();
- if (!GlobalVariable.loginMap.containsKey(cameraId)) {
- return AjaxResult.error("璁惧鏈櫥褰�");
+ @Override
+ public AjaxResult localCapture(CameraCmd cmd) {
+ try {
+ String cameraId = cmd.getCameraId();
+ Integer channelNum = cmd.getChanNo();
+ if (!GlobalVariable.loginMap.containsKey(cameraId)) {
+ return AjaxResult.error("璁惧鏈櫥褰�");
+ }
+ Integer userId = (Integer) GlobalVariable.loginMap.get(cameraId);
+ NET_DVR_WORKSTATE_V30 devwork = new NET_DVR_WORKSTATE_V30();
+ if (!hCNetSDK.NET_DVR_GetDVRWorkState_V30(userId, devwork)) {
+ int code = hCNetSDK.NET_DVR_GetLastError();
+ log.error("鑾峰彇璁惧宸ヤ綔鐘舵�佸け璐�: errorCode" + code + " errorInfo" + SdkErrorCodeEnum.getDescByCode(code));
+ return AjaxResult.error("鑾峰彇璁惧宸ヤ綔鐘舵�佸け璐�: errorCode" + code + " errorInfo" + SdkErrorCodeEnum.getDescByCode(code));
+ }
+ //鍥剧墖璐ㄩ噺
+ NET_DVR_JPEGPARA jpeg = new NET_DVR_JPEGPARA();
+ //璁剧疆鍥剧墖鍒嗚鲸鐜�
+ jpeg.wPicSize = 0;
+ //璁剧疆鍥剧墖璐ㄩ噺
+ jpeg.wPicQuality = 0;
+ IntByReference a = new IntByReference();
+ //璁剧疆鍥剧墖澶у皬
+ ByteBuffer jpegBuffer = ByteBuffer.allocate(1024 * 1024);
+ // 鎶撳浘鍒板唴瀛橈紝鍗曞抚鏁版嵁鎹曡幏骞朵繚瀛樻垚JPEG瀛樻斁鍦ㄦ寚瀹氱殑鍐呭瓨绌洪棿涓�
+ boolean is = hCNetSDK.NET_DVR_CaptureJPEGPicture_NEW(userId, channelNum, jpeg, jpegBuffer, 1024 * 1024, a);
+ //log.debug("-----------杩欓噷寮�濮嬪浘鐗囧瓨鍏ュ唴瀛�----------" + is);
+ // OutputStream outputStream = response.getOutputStream();
+ //outputStream.write(jpegBuffer.array());
+ //Base64.Encoder decoder = Base64.getEncoder();
+ // BASE64Encoder encoder = new BASE64Encoder();
+ //String png_base64 = decoder.encodeToString(jpegBuffer.array());//杞崲鎴恇ase64涓�
+ // png_base64 = png_base64.replaceAll("\n", "").replaceAll("\r", "");//鍒犻櫎 \r\n
+ //log.debug("-----------澶勭悊瀹屾垚鎴浘鏁版嵁----------");
+ return AjaxResult.success(jpegBuffer.array());
+ } catch (Exception ex) {
+ log.error("-----------鎴浘澶辫触----------");
+ return AjaxResult.error(ex.getMessage());
}
- Integer userId = (Integer) GlobalVariable.loginMap.get(cameraId);
- NET_DVR_WORKSTATE_V30 devwork = new NET_DVR_WORKSTATE_V30();
- if (!hCNetSDK.NET_DVR_GetDVRWorkState_V30(userId, devwork)) {
- int code = hCNetSDK.NET_DVR_GetLastError();
- log.error("鑾峰彇璁惧宸ヤ綔鐘舵�佸け璐�: errorCode" + code + " errorInfo" + SdkErrorCodeEnum.getDescByCode(code));
- return AjaxResult.error("鑾峰彇璁惧宸ヤ綔鐘舵�佸け璐�: errorCode" + code + " errorInfo" + SdkErrorCodeEnum.getDescByCode(code));
- }
- //鍥剧墖璐ㄩ噺
- NET_DVR_JPEGPARA jpeg = new NET_DVR_JPEGPARA();
- //璁剧疆鍥剧墖鍒嗚鲸鐜�
- jpeg.wPicSize = 0;
- //璁剧疆鍥剧墖璐ㄩ噺
- jpeg.wPicQuality = 0;
- IntByReference a = new IntByReference();
- //璁剧疆鍥剧墖澶у皬
- ByteBuffer jpegBuffer = ByteBuffer.allocate(1024 * 1024);
- // 鎶撳浘鍒板唴瀛橈紝鍗曞抚鏁版嵁鎹曡幏骞朵繚瀛樻垚JPEG瀛樻斁鍦ㄦ寚瀹氱殑鍐呭瓨绌洪棿涓�
- boolean is = hCNetSDK.NET_DVR_CaptureJPEGPicture_NEW(userId, channelNum, jpeg, jpegBuffer, 1024 * 1024, a);
- log.debug("-----------杩欓噷寮�濮嬪浘鐗囧瓨鍏ュ唴瀛�----------" + is);
-
- Base64.Encoder decoder = Base64.getEncoder();
- // BASE64Encoder encoder = new BASE64Encoder();
- String png_base64 = decoder.encodeToString(jpegBuffer.array());//杞崲鎴恇ase64涓�
- png_base64 = png_base64.replaceAll("\n", "").replaceAll("\r", "");//鍒犻櫎 \r\n
- log.debug("-----------澶勭悊瀹屾垚鎴浘鏁版嵁----------");
- return AjaxResult.success(png_base64);
}
/**
@@ -1927,4 +1933,112 @@
return AjaxResult.success(map);
}
+
+ //鏈湴褰曞儚寮�濮�
+ @Override
+ public AjaxResult localRecordStart(CameraCmd cmd) {
+ try {
+ String cameraId = cmd.getCameraId();
+ Integer channelNum = cmd.getChanNo();
+ String path = FileUtils.createFile("D:/LocalRecordTemp/" + cameraId + ".mp4");
+ if (!GlobalVariable.loginMap.containsKey(cameraId)) {
+ return AjaxResult.error("璁惧鏈櫥褰�");
+ }
+ Integer userId = (Integer) GlobalVariable.loginMap.get(cameraId);
+ //寮哄埗I甯х粨鏋勪綋瀵硅薄
+ HCNetSDK.NET_DVR_I_FRAME netDvrIFrame = new HCNetSDK.NET_DVR_I_FRAME(); //鏂板缓缁撴瀯浣撳璞�
+ netDvrIFrame.read();
+ netDvrIFrame.dwChannel = channelNum;//鍥犱负涓婃枃浠g爜涓缃簡閫氶亾鍙凤紝鎸夌収涓婃枃涓殑璁剧疆
+ netDvrIFrame.byStreamType = 0;
+ netDvrIFrame.dwSize = netDvrIFrame.size();
+ netDvrIFrame.write();
+ if (!hCNetSDK.NET_DVR_RemoteControl(userId, 3402, netDvrIFrame.getPointer(), netDvrIFrame.dwSize)) {
+ log.error("寮哄埗I甯� 閿欒鐮佷负: " + hCNetSDK.NET_DVR_GetLastError());
+ }
+ //棰勮鍙傛暟
+ NET_DVR_PREVIEWINFO previewinfo = new NET_DVR_PREVIEWINFO();
+ previewinfo.read();
+ previewinfo.lChannel = channelNum;
+ previewinfo.dwStreamType = 0;//鐮佹祦绫诲瀷锛�0-涓荤爜娴侊紝1-瀛愮爜娴侊紝2-涓夌爜娴侊紝3-铏氭嫙鐮佹祦锛屼互姝ょ被鎺�
+ previewinfo.dwLinkMode = 0;//杩炴帴鏂瑰紡锛�0-TCP鏂瑰紡锛�1-UDP鏂瑰紡锛�2-澶氭挱鏂瑰紡锛�3-RTP鏂瑰紡锛�4-RTP/RTSP锛�5-RTP/HTTP锛�6-HRUDP锛堝彲闈犱紶杈擄級锛�7-RTSP/HTTPS锛�8-NPQ
+ previewinfo.hPlayWnd = null;//鎾斁绐楀彛鐨勫彞鏌勶紝涓篘ULL琛ㄧず涓嶈В鐮佹樉绀恒��
+ 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("鍋滄褰撳墠褰曞儚");
+ }
+ int lRealHandle = hCNetSDK.NET_DVR_RealPlay_V40(userId, previewinfo, null, null);
+ if (lRealHandle == -1) {
+ int code = hCNetSDK.NET_DVR_GetLastError();
+ log.error("鏈湴褰曞儚鍙栨祦澶辫触" + hCNetSDK.NET_DVR_GetLastError());
+ 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)) {
+ 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);
+ } catch (Exception ex) {
+ log.error("鏈湴褰曞儚寮�濮嬪紓甯�" + ex.getMessage());
+ return AjaxResult.error("鏈湴褰曞儚寮�濮嬪紓甯�" + ex.getMessage());
+ }
+ }
+
+ //鏈湴褰曞儚鍋滄
+ @Override
+ public AjaxResult localRecordStop(CameraCmd cmd) {
+ try {
+ String cameraId = cmd.getCameraId();
+ Integer channelNum = cmd.getChanNo();
+ String recordPath = FileUtils.createFile("D:/LocalRecordTemp/" + cameraId + ".mp4");
+ if (!GlobalVariable.loginMap.containsKey(cameraId)) {
+ return AjaxResult.error("璁惧鏈櫥褰�");
+ }
+ Integer userId = (Integer) GlobalVariable.loginMap.get(cameraId);
+ //region 寮哄埗I甯�
+ HCNetSDK.NET_DVR_I_FRAME netDvrIFrame = new HCNetSDK.NET_DVR_I_FRAME(); //鏂板缓缁撴瀯浣撳璞�
+ netDvrIFrame.read();
+ netDvrIFrame.dwChannel = channelNum;//鍥犱负涓婃枃浠g爜涓缃簡閫氶亾鍙凤紝鎸夌収涓婃枃涓殑璁剧疆
+ netDvrIFrame.byStreamType = 0;
+ netDvrIFrame.dwSize = netDvrIFrame.size();
+ netDvrIFrame.write();
+ if (!hCNetSDK.NET_DVR_RemoteControl(userId, 3402, netDvrIFrame.getPointer(), netDvrIFrame.dwSize)) {
+ log.error("寮哄埗I甯� 閿欒鐮佷负: " + hCNetSDK.NET_DVR_GetLastError());
+ }
+ //endregion
+ //region 棰勮鍙傛暟
+ NET_DVR_PREVIEWINFO previewinfo = new NET_DVR_PREVIEWINFO();
+ previewinfo.read();
+ previewinfo.lChannel = channelNum;
+ previewinfo.dwStreamType = 0;//鐮佹祦绫诲瀷锛�0-涓荤爜娴侊紝1-瀛愮爜娴侊紝2-涓夌爜娴侊紝3-铏氭嫙鐮佹祦锛屼互姝ょ被鎺�
+ previewinfo.dwLinkMode = 0;//杩炴帴鏂瑰紡锛�0-TCP鏂瑰紡锛�1-UDP鏂瑰紡锛�2-澶氭挱鏂瑰紡锛�3-RTP鏂瑰紡锛�4-RTP/RTSP锛�5-RTP/HTTP锛�6-HRUDP锛堝彲闈犱紶杈擄級锛�7-RTSP/HTTPS锛�8-NPQ
+ previewinfo.hPlayWnd = null;//鎾斁绐楀彛鐨勫彞鏌勶紝涓篘ULL琛ㄧず涓嶈В鐮佹樉绀恒��
+ previewinfo.bBlocked = 0;//0- 闈為樆濉炲彇娴侊紝1-闃诲鍙栨祦
+ 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);
+ }
+ log.debug("鏈湴褰曞儚鍋滄");
+ 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());
+ }
+ }
}
--
Gitblit v1.9.3