From 7ee6e3feeda334e40da912f0e31898e08b59de46 Mon Sep 17 00:00:00 2001
From: ‘liusuyi’ <1951119284@qq.com>
Date: 星期五, 04 八月 2023 17:28:48 +0800
Subject: [PATCH] 修复雷达引导相机为null的bug
---
ard-work/src/main/java/com/ruoyi/device/hiksdk/service/impl/HikClientServiceImpl.java | 246 +++++++++++++++++++++++++++----------------------
1 files changed, 135 insertions(+), 111 deletions(-)
diff --git a/ard-work/src/main/java/com/ruoyi/device/hiksdk/service/impl/HikClientServiceImpl.java b/ard-work/src/main/java/com/ruoyi/device/hiksdk/service/impl/HikClientServiceImpl.java
index 3a4971f..82a6c73 100644
--- a/ard-work/src/main/java/com/ruoyi/device/hiksdk/service/impl/HikClientServiceImpl.java
+++ b/ard-work/src/main/java/com/ruoyi/device/hiksdk/service/impl/HikClientServiceImpl.java
@@ -2,9 +2,8 @@
import com.ruoyi.common.annotation.SdkOperate;
import com.ruoyi.common.utils.file.FileUtils;
-import com.ruoyi.common.utils.uuid.IdUtils;
import com.ruoyi.device.camera.domain.CameraCmd;
-import com.ruoyi.device.camera.mapper.ArdCamerasMapper;
+import com.ruoyi.device.camera.service.IArdCamerasService;
import com.ruoyi.device.hiksdk.common.GlobalVariable;
import com.ruoyi.device.camera.domain.ArdCameras;
import com.ruoyi.device.hiksdk.config.MinioClientSingleton;
@@ -19,12 +18,10 @@
import com.sun.jna.ptr.IntByReference;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
-import sun.misc.BASE64Encoder;
-
+import java.util.Base64;
import javax.annotation.Resource;
import java.io.*;
import java.math.BigDecimal;
-import java.math.RoundingMode;
import java.nio.ByteBuffer;
import java.text.DecimalFormat;
import java.text.SimpleDateFormat;
@@ -44,7 +41,7 @@
public class HikClientServiceImpl implements IHikClientService {
@Resource
- ArdCamerasMapper ardCamerasMapper;
+ IArdCamerasService ardCamerasService;
private static HCNetSDK hCNetSDK;
@@ -104,6 +101,7 @@
}
//鎵撳嵃娴峰悍sdk鏃ュ織
if (Platform.isWindows()) {
+
String WIN_PATH = System.getProperty("user.dir") + File.separator + "ardLog" + File.separator + "logs" + File.separator;
hCNetSDK.NET_DVR_SetLogToFile(3, WIN_PATH, true);
} else {
@@ -197,7 +195,7 @@
public void loginAll() {
try {
log.debug("鍔犺浇lib瀹屾垚锛�");
- List<ArdCameras> ardCameras = ardCamerasMapper.selectArdCamerasListNoDataScope(new ArdCameras());
+ List<ArdCameras> ardCameras = ardCamerasService.selectArdCamerasListNoDataScope(new ArdCameras());
for (ArdCameras camera : ardCameras) {
Thread.sleep(500);
login(camera);
@@ -618,9 +616,9 @@
NET_DVR_PTZPOS m_ptzPosCurrent = new NET_DVR_PTZPOS();
m_ptzPosCurrent.wAction = 1;
try {
- String p = String.valueOf((int) ((double) ptz.get("p") * 10));
- String t = String.valueOf((int) ((double) ptz.get("t") * 10));
- String z = String.valueOf((int) ((double) ptz.get("z") * 10));
+ String p = String.valueOf((int) (ptz.get("p") * 10));
+ String t = String.valueOf((int) (ptz.get("t") * 10));
+ String z = String.valueOf((int) (ptz.get("z") * 10));
m_ptzPosCurrent.wPanPos = (short) (Integer.parseInt(p, 16));
m_ptzPosCurrent.wTiltPos = (short) (Integer.parseInt(t, 16));
m_ptzPosCurrent.wZoomPos = (short) (Integer.parseInt(z, 16));
@@ -650,7 +648,7 @@
NET_DVR_PTZPOS m_ptzPosCurrent = new NET_DVR_PTZPOS();
m_ptzPosCurrent.wAction = 1;
try {
- ArdCameras cameras = ardCamerasMapper.selectArdCamerasById(cameraId);
+ ArdCameras cameras = ardCamerasService.selectArdCamerasById(cameraId);
double[] cameraPositon = new double[]{cameras.getLongitude(), cameras.getLatitude(), cameras.getAltitude()};
double[] targetPositions = cmd.getTargetPosition();
double[] cameraPTZ = GisUtil.getCameraPTZ(cameraPositon, targetPositions, 20, 150);
@@ -686,11 +684,11 @@
@SdkOperate
public boolean controlLock(CameraCmd cmd) {
String cameraId = cmd.getCameraId();//鐢宠閿佺殑鐩告満
- ArdCameras ardCameras = ardCamerasMapper.selectArdCamerasById(cameraId);
+ ArdCameras ardCameras = ardCamerasService.selectArdCamerasById(cameraId);
Date now = new Date();
now.setTime(now.getTime() + cmd.getExpired() * 1000);
ardCameras.setOperatorExpired(now);//璁剧疆褰撳墠杩囨湡鏃堕棿
- ardCamerasMapper.updateArdCameras(ardCameras);
+ ardCamerasService.updateArdCameras(ardCameras);
return true;
}
@@ -706,11 +704,11 @@
public boolean controlUnLock(CameraCmd cmd) {
String cameraId = cmd.getCameraId();//鐢宠瑙i攣鐨勭浉鏈�
String operator = cmd.getOperator();//鐢宠鑰�
- ArdCameras ardCameras = ardCamerasMapper.selectArdCamerasById(cameraId);
+ ArdCameras ardCameras = ardCamerasService.selectArdCamerasById(cameraId);
if (ardCameras.getOperatorId().equals(operator)) {
//濡傛灉瑙i攣鐩告満鐨勫綋鍓嶇敤鎴锋槸鐢宠鑰咃紝鍒欐竻绌鸿鐩告満鐨勮繃鏈熸椂闂�
ardCameras.setOperatorExpired(null);
- int i = ardCamerasMapper.updateArdCameras(ardCameras);
+ int i = ardCamerasService.updateArdCameras(ardCameras);
if (i > 0) {
log.debug(cameraId + "--瑙i攣鎴愬姛");
}
@@ -745,8 +743,7 @@
return -1;
} else {
netDvrPtzLockcfg.read();
- int byWorkMode = netDvrPtzLockcfg.byWorkMode;
- return byWorkMode;
+ return netDvrPtzLockcfg.byWorkMode;
}
}
@@ -871,7 +868,6 @@
if (!bool) {
int code = hCNetSDK.NET_DVR_GetLastError();
log.info("璁剧疆閫忛浘澶辫触,璇风◢鍚庨噸璇�" + code);
- return false;
}
log.info("璁剧疆閫忛浘鎴愬姛");
return bool;
@@ -920,7 +916,6 @@
if (!bool) {
int code = hCNetSDK.NET_DVR_GetLastError();
log.info("璁剧疆澶滆澶辫触,璇风◢鍚庨噸璇�" + code);
- return false;
}
log.info("璁剧疆澶滆鎴愬姛");
return bool;
@@ -967,7 +962,6 @@
if (!bool) {
int code = hCNetSDK.NET_DVR_GetLastError();
log.info("璁剧疆鑱氱劍妯″紡澶辫触,璇风◢鍚庨噸璇�" + code);
- return false;
}
log.info("璁剧疆鑱氱劍妯″紡鎴愬姛");
return bool;
@@ -1010,7 +1004,7 @@
return false;
}
Integer userId = GlobalVariable.loginMap.get(cameraId);
- Integer dwStop;
+ int dwStop;
if (enable) {
dwStop = 0;//寮�鍚�
} else {
@@ -1020,7 +1014,6 @@
if (!bool) {
int code = hCNetSDK.NET_DVR_GetLastError();
log.info("璁剧疆浜戝彴鍔犵儹澶辫触,璇风◢鍚庨噸璇�" + code);
- return false;
}
log.info("璁剧疆浜戝彴鍔犵儹鎴愬姛");
return bool;
@@ -1064,7 +1057,6 @@
if (!bool) {
int code = hCNetSDK.NET_DVR_GetLastError();
log.info("璁剧疆闀滃ご闄ゅ啺澶辫触,璇风◢鍚庨噸璇�" + code);
- return false;
}
log.info("璁剧疆闀滃ご闄ゅ啺鎴愬姛");
return bool;
@@ -1073,7 +1065,7 @@
/**
* 鎴浘 杩旂粰鍓嶇
*
- * @param cmd
+ * @param cmd 鐩告満鍛戒护
*/
public String captureJPEGPicture(CameraCmd cmd) {
String cameraId = cmd.getCameraId();
@@ -1100,41 +1092,12 @@
boolean is = hCNetSDK.NET_DVR_CaptureJPEGPicture_NEW(userId, channelNum, jpeg, jpegBuffer, 1024 * 1024, a);
log.info("-----------杩欓噷寮�濮嬪浘鐗囧瓨鍏ュ唴瀛�----------" + is);
-
- BASE64Encoder encoder = new BASE64Encoder();
- String png_base64 = encoder.encodeBuffer(jpegBuffer);//杞崲鎴恇ase64涓�
+ 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.info("-----------澶勭悊瀹屾垚鎴浘鏁版嵁----------");
return png_base64;
-
-// ByteArrayInputStream in = new ByteArrayInputStream(jpegBuffer.array(), 0, a.getValue());
-// OutputStream outputStream = null;
-// try {
-// //1銆佽缃畆esponse 鍝嶅簲澶� //璁剧疆椤甸潰涓嶇紦瀛�,娓呯┖buffer
-// response.reset();
-// //瀛楃缂栫爜
-// response.setCharacterEncoding("UTF-8");
-// //浜岃繘鍒朵紶杈撴暟鎹�
-// response.setContentType("multipart/form-data");
-// //璁剧疆鍝嶅簲澶�
-// response.setHeader("Content-Disposition", "attachment;fileName=" + URLEncoder.encode(new SimpleDateFormat("yyyyMMddHHmmss").format(new Date()) + ".jpeg", "UTF-8"));
-//
-// outputStream = response.getOutputStream();
-// // LoginUser loginUser = LoginContext.me().getLoginUser();
-// waterMarkUtil.markImageByIO("", in, outputStream, null, "jpeg");
-// outputStream.flush();
-// } catch (Exception e) {
-// e.printStackTrace();
-// log.error("鎶撳浘澶辫触锛岃绋嶅悗閲嶈瘯");
-// } finally {
-// try {
-// outputStream.close();
-// } catch (IOException e) {
-// log.error("鎶撳浘澶辫触锛岃绋嶅悗閲嶈瘯");
-// }
-// }
-
-
}
/**
@@ -1264,16 +1227,6 @@
GlobalVariable.previewMap.remove(cameraId);
}
log.info("褰曞儚鍋滄");
- //瀛樺叆minio
- String BucketName = cmd.getRecordBucketName();
- String ObjectName = cmd.getRecordObjectName();
- String ContentType = "video/MP4";
- FileInputStream stream = new FileInputStream(path);
- boolean b = MinioUtils.uploadObject(BucketName, ObjectName, stream, stream.available(), ContentType);
- if (b) {
- url = MinioUtils.getBucketObjectUrl(BucketName, ObjectName);
- log.info("涓婁紶鏂囦欢鎴愬姛!" + MinioClientSingleton.domainUrl + "/" + BucketName + "/" + ObjectName);
- }
}
return url;
} catch (Exception ex) {
@@ -1283,14 +1236,13 @@
}
@Override
- public String recordToMinio(CameraCmd cmd) {
+ public void recordStart(CameraCmd cmd) {
try {
String cameraId = cmd.getCameraId();
Integer channelNum = cmd.getChannelNum();
String path = FileUtils.createFile("D:/recordTemp/" + cameraId + ".mp4");
- boolean enable = cmd.isEnable();
if (!GlobalVariable.loginMap.containsKey(cameraId)) {
- return "";
+ return;
}
Integer userId = GlobalVariable.loginMap.get(cameraId);
//寮哄埗I甯х粨鏋勪綋瀵硅薄
@@ -1313,53 +1265,125 @@
previewinfo.bBlocked = 0;//0- 闈為樆濉炲彇娴侊紝1-闃诲鍙栨祦
previewinfo.byNPQMode = 0;//NPQ妯″紡锛�0-鐩磋繛妯″紡锛�1-杩囨祦濯掍綋妯″紡
previewinfo.write();
- if (enable) {
- 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) {
- log.error("鍙栨祦澶辫触" + hCNetSDK.NET_DVR_GetLastError());
- return "";
- }
- 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)) {
- log.error("淇濆瓨瑙嗛鏂囦欢鍒颁复鏃舵枃浠跺す澶辫触 閿欒鐮佷负: " + hCNetSDK.NET_DVR_GetLastError());
- return "";
- }
- log.debug("褰曞儚寮�濮�");
- } else {
- if (GlobalVariable.previewMap.containsKey(cameraId)) {
- Integer lRealHandle = GlobalVariable.previewMap.get(cameraId);
- hCNetSDK.NET_DVR_StopRealPlay(lRealHandle);
- GlobalVariable.previewMap.remove(cameraId);
- }
- log.debug("褰曞儚鍋滄");
- //瀛樺叆minio
- String BucketName = cmd.getRecordBucketName();
- String ObjectName = cmd.getRecordObjectName();
- String ContentType = "video/MP4";
- FileInputStream stream = new FileInputStream(path);
- String simpleUUID = IdUtils.simpleUUID();
- String time = new SimpleDateFormat("yyyyMMdd").format(new Date());
- String recordName = cameraId + "/" + time + "/" + ObjectName + "_" + simpleUUID + ".mp4";
- boolean b = MinioUtils.uploadObject(BucketName, recordName, stream, stream.available(), ContentType);
- if (b) {
- String url = MinioClientSingleton.domainUrl + "/" + BucketName + "/" + recordName;
- log.debug("涓婁紶鏂囦欢鎴愬姛!" + url);
- return url;
- }
+ if (GlobalVariable.previewMap.containsKey(cameraId)) {
+ Integer lRealHandle = GlobalVariable.previewMap.get(cameraId);
+ hCNetSDK.NET_DVR_StopRealPlay(lRealHandle);
+ GlobalVariable.previewMap.remove(cameraId);
+ log.debug("鍋滄褰撳墠褰曞儚");
}
- return "";
+ int lRealHandle = hCNetSDK.NET_DVR_RealPlay_V40(userId, previewinfo, null, null);
+ if (lRealHandle == -1) {
+ log.error("鍙栨祦澶辫触" + hCNetSDK.NET_DVR_GetLastError());
+ return;
+ }
+ 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)) {
+ log.error("淇濆瓨瑙嗛鏂囦欢鍒颁复鏃舵枃浠跺す澶辫触 閿欒鐮佷负: " + hCNetSDK.NET_DVR_GetLastError());
+ return;
+ }
+ log.debug("褰曞儚寮�濮�");
+ } catch (Exception ex) {
+ log.error("寮�濮嬪綍鍍忓紓甯�" + ex.getMessage());
+ }
+ }
+
+ @Override
+ public String recordStopToMinio(CameraCmd cmd) {
+ String url = "";
+ try {
+ String cameraId = cmd.getCameraId();
+ Integer channelNum = cmd.getChannelNum();
+ String path = FileUtils.createFile("D:/recordTemp/" + cameraId + ".mp4");
+ if (!GlobalVariable.loginMap.containsKey(cameraId)) {
+ return "";
+ }
+ Integer userId = 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("褰曞儚鍋滄");
+ //瀛樺叆minio
+ String BucketName = cmd.getRecordBucketName();
+ String ObjectName = cmd.getRecordObjectName();
+ String ContentType = "video/MP4";
+ FileInputStream stream = new FileInputStream(path);
+ String time = new SimpleDateFormat("yyyyMMdd").format(new Date());
+ String recordName = cameraId + "/" + time + "/" + ObjectName + ".mp4";
+ boolean b = MinioUtils.uploadObject(BucketName, recordName, stream, stream.available(), ContentType);
+ if (b) {
+ url = MinioClientSingleton.domainUrl + "/" + BucketName + "/" + recordName;
+ log.debug("涓婁紶鏂囦欢鎴愬姛!" + url);
+ }
+ return url;
} catch (Exception ex) {
log.error("褰曞儚寮傚父" + ex.getMessage());
return "";
}
}
+ @Override
+ public void recordStopNotToMinio(CameraCmd cmd) {
+ try {
+ String cameraId = cmd.getCameraId();
+ Integer channelNum = cmd.getChannelNum();
+ if (!GlobalVariable.loginMap.containsKey(cameraId)) {
+ return;
+ }
+ Integer userId = 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("褰曞儚鍋滄");
+ } catch (Exception ex) {
+ log.error("褰曞儚鍋滄寮傚父" + ex.getMessage());
+ }
+ }
}
\ No newline at end of file
--
Gitblit v1.9.3