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 | 368 +++++++++++++++++++++++++---------------------------
1 files changed, 176 insertions(+), 192 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 89f336a..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
@@ -1,15 +1,9 @@
package com.ruoyi.device.hiksdk.service.impl;
import com.ruoyi.common.annotation.SdkOperate;
-import com.ruoyi.common.core.domain.entity.SysUser;
-import com.ruoyi.common.core.domain.model.LoginUser;
-import com.ruoyi.common.utils.SecurityUtils;
-import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.common.utils.file.FileUtils;
-import com.ruoyi.common.utils.uuid.IdUtils;
-import com.ruoyi.constant.CamPriority;
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;
@@ -18,15 +12,13 @@
import com.ruoyi.device.hiksdk.service.IHikClientService;
import com.ruoyi.device.hiksdk.util.hikSdkUtil.LoginResultCallBack;
import com.ruoyi.device.hiksdk.util.minio.MinioUtils;
-import com.ruoyi.system.mapper.SysUserMapper;
import com.sun.jna.Native;
import com.sun.jna.Platform;
import com.sun.jna.Pointer;
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;
@@ -49,10 +41,7 @@
public class HikClientServiceImpl implements IHikClientService {
@Resource
- ArdCamerasMapper ardCamerasMapper;
-
- @Resource
- SysUserMapper sysUserMapper;
+ IArdCamerasService ardCamerasService;
private static HCNetSDK hCNetSDK;
@@ -112,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 {
@@ -132,11 +122,8 @@
hCNetSDK.NET_DVR_Cleanup();
camera.setLoginId(-1);
}
- if (GlobalVariable.loginMap.containsKey(camera.getId())) {
- GlobalVariable.loginMap.remove(camera.getId());
- }
+ GlobalVariable.loginMap.remove(camera.getId());
GlobalVariable.loginMap.put(camera.getId(), lUserID);
-
camera.setLoginId(lUserID);
camera.setChannel((int) m_strDeviceInfo.byStartChan);
return camera;
@@ -208,9 +195,9 @@
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(100);
+ Thread.sleep(500);
login(camera);
}
} catch (Exception ex) {
@@ -242,7 +229,7 @@
/**
* 鏄惁鍦ㄧ嚎
*
- * @param cmd
+ * @param cmd 鐩告満鍛戒护
*/
@Override
public boolean isOnLine(CameraCmd cmd) {
@@ -251,8 +238,7 @@
return false;
}
Integer userId = GlobalVariable.loginMap.get(cameraId);
- boolean isOnLine = hCNetSDK.NET_DVR_RemoteControl(userId, HCNetSDK.NET_DVR_CHECK_USER_STATUS, null, 0);
- return isOnLine;
+ return hCNetSDK.NET_DVR_RemoteControl(userId, HCNetSDK.NET_DVR_CHECK_USER_STATUS, null, 0);
}
/**
@@ -277,13 +263,13 @@
return false;
}
Integer userId = GlobalVariable.loginMap.get(cameraId);
- Integer dwStop;
+ int dwStop;
if (enable) {
dwStop = 0;//寮�鍚�
} else {
dwStop = 1;//鍏抽棴
}
- Integer dwPTZCommand = -1;
+ int dwPTZCommand = -1;
switch (code) {
/*鏂瑰悜*/
case 1:
@@ -350,7 +336,7 @@
/**
* 璁剧疆鑱氱劍鍊�
*
- * @param cmd
+ * @param cmd 鐩告満鍛戒护
*/
@Override
@SdkOperate
@@ -378,7 +364,7 @@
/**
* 鑾峰彇鑱氱劍鍊�
*
- * @param cmd
+ * @param cmd 鐩告満鍛戒护
*/
@Override
public Map<String, Object> getFocusPos(CameraCmd cmd) {
@@ -411,7 +397,7 @@
/**
* 璁剧疆棰勭疆鐐�
*
- * @param cmd
+ * @param cmd 鐩告満鍛戒护
*/
@Override
@SdkOperate
@@ -434,7 +420,7 @@
/**
* 杞埌棰勭疆鐐�
*
- * @param cmd
+ * @param cmd 鐩告満鍛戒护
*/
@Override
@SdkOperate
@@ -481,8 +467,8 @@
if (bool) {
resolution.read();
//瑙嗛杈撳嚭鍙e垎杈ㄧ巼锛�0- 1024x768锛�1- 1280x720锛�2-1280x1024锛�3- 1680x1050锛�4- 1920x1080锛�5- 3840*2160
- byte byStreamType = resolution.struNormHighRecordPara.byStreamType;
- int dwVideoBitrate = resolution.struNormHighRecordPara.dwVideoBitrate;
+// byte byStreamType = resolution.struNormHighRecordPara.byStreamType;
+// int dwVideoBitrate = resolution.struNormHighRecordPara.dwVideoBitrate;
int byResolution = resolution.struNormHighRecordPara.byResolution;
switch (byResolution) {
case 0:
@@ -560,7 +546,6 @@
}
/**
- * @return
* @鎻忚堪 鑾峰彇ptz淇℃伅
* @鍙傛暟 [userId, channelNum]
* @杩斿洖鍊� boolean
@@ -584,7 +569,7 @@
boolean bool = hCNetSDK.NET_DVR_GetDVRConfig(userId, HCNetSDK.NET_DVR_GET_PTZPOS, channelNum, pioint, m_ptzPosCurrent.size(), ibrBytesReturned);
if (bool) {
m_ptzPosCurrent.read();
- DecimalFormat df = new DecimalFormat("0.0");//璁剧疆淇濈暀浣嶆暟
+ // DecimalFormat df = new DecimalFormat("0.0");//璁剧疆淇濈暀浣嶆暟
//16杩涘埗杞琁nteger鍚庨櫎10锛屼繚鐣欏皬鏁扮偣1浣�
//瀹為檯鏄剧ず鐨凱TZ鍊兼槸鑾峰彇鍒扮殑鍗佸叚杩涘埗鍊肩殑鍗佸垎涔嬩竴锛�
//濡傝幏鍙栫殑姘村钩鍙傛暟P鐨勫�兼槸0x1750锛屽疄闄呮樉绀虹殑P鍊间负175搴︼紱
@@ -596,7 +581,7 @@
double p = b.setScale(1, BigDecimal.ROUND_HALF_UP).doubleValue();
double t = c.setScale(1, BigDecimal.ROUND_HALF_UP).doubleValue();
double z = d.setScale(1, BigDecimal.ROUND_HALF_UP).doubleValue();
-// log.debug("T鍨傜洿鍙傛暟涓�: " + p + "P姘村钩鍙傛暟涓�: " + t + "Z鍙樺�嶅弬鏁颁负: " + z);
+ //log.debug("T鍨傜洿鍙傛暟涓�: " + p + "P姘村钩鍙傛暟涓�: " + t + "Z鍙樺�嶅弬鏁颁负: " + z);
Map<String, Object> ptzMap = new HashMap<>();
ptzMap.put("p", p);
ptzMap.put("t", t);
@@ -605,7 +590,7 @@
} else {
int code = hCNetSDK.NET_DVR_GetLastError();
log.info("鎺у埗澶辫触,璇风◢鍚庨噸璇�" + code);
- return null;
+ return new HashMap<>();
}
}
@@ -631,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));
@@ -663,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);
@@ -696,64 +681,36 @@
* @淇敼浜哄拰鍏跺畠淇℃伅 0-瑙i攣 1-閿佸畾
*/
@Override
+ @SdkOperate
public boolean controlLock(CameraCmd cmd) {
String cameraId = cmd.getCameraId();//鐢宠閿佺殑鐩告満
- ArdCameras ardCameras = ardCamerasMapper.selectArdCamerasById(cameraId);
- if (StringUtils.isNull(ardCameras)) {
- return false;//鎵句笉鍒扮浉鏈烘嫆缁濇搷鎺�
- }
- Integer expired = cmd.getExpired();//鐢宠鎺у埗鏃堕暱
+ ArdCameras ardCameras = ardCamerasService.selectArdCamerasById(cameraId);
+ Date now = new Date();
+ now.setTime(now.getTime() + cmd.getExpired() * 1000);
+ ardCameras.setOperatorExpired(now);//璁剧疆褰撳墠杩囨湡鏃堕棿
+ ardCamerasService.updateArdCameras(ardCameras);
+ return true;
+ }
+
+ /**
+ * @鎻忚堪 鎿嶆帶瑙i攣
+ * @鍙傛暟 [userId, channelNum]
+ * @杩斿洖鍊� boolean
+ * @鍒涘缓浜� 鍒樿嫃涔�
+ * @鍒涘缓鏃堕棿 2023/6/30 15:36
+ * @淇敼浜哄拰鍏跺畠淇℃伅
+ */
+ @Override
+ public boolean controlUnLock(CameraCmd cmd) {
+ String cameraId = cmd.getCameraId();//鐢宠瑙i攣鐨勭浉鏈�
String operator = cmd.getOperator();//鐢宠鑰�
- String currentOperator = ardCameras.getOperatorId();//鐩告満褰撳墠鎺у埗鑰�
- Date currentExpired = ardCameras.getOperatorExpired();//鐩告満褰撳墠杩囨湡鏃堕棿
- if (currentExpired == null) {
- //璁剧疆褰撳墠鎿嶄綔鐢ㄦ埛ID
- ardCameras.setOperatorId(operator);
- //璁剧疆褰撳墠杩囨湡鏃堕棿
- Date now = new Date();
- now.setTime(now.getTime() + expired * 1000);
- ardCameras.setOperatorExpired(now);
- ardCamerasMapper.updateArdCameras(ardCameras);
- } else {
- //濡傛灉杩囨湡鏃堕棿鏈夊��
- //濡傛灉鏄湰浜虹洿鎺ヤ慨鏀�
- if (currentOperator.equals(operator)) {
- //璁剧疆褰撳墠杩囨湡鏃堕棿
- Date now = new Date();
- now.setTime(now.getTime() + expired * 1000);
- ardCameras.setOperatorExpired(now);
- ardCamerasMapper.updateArdCameras(ardCameras);
- } else {
- //濡傛灉闈炴湰浜烘瘮杈冧紭鍏堢骇
- Integer currentLevel = 0;//褰撳墠鎿嶄綔鑰呯殑浼樺厛绾�
- if (CamPriority.priorityMap.containsKey(currentOperator)) {
- /*褰撳墠鎺у埗鑰呬负绯荤粺鎶ヨ鐢ㄦ埛*/
- currentLevel = (Integer) CamPriority.priorityMap.get(currentOperator);
- } else {
- /*褰撳墠鎺у埗鑰呬负鏅�氱敤鎴�*/
- SysUser sysUser = sysUserMapper.selectUserById(currentOperator);
- currentLevel = sysUser.getCameraPriority();
- }
- Integer operatorLevel = 0;//鑾峰彇鐢宠鑰呯殑浼樺厛绾�
- if (CamPriority.priorityMap.containsKey(operator)) {
- /*鍖呭惈璇存槑褰撳墠鐢宠鎺у埗鑰呬负绯荤粺鎶ヨ鐢ㄦ埛*/
- operatorLevel = (Integer) CamPriority.priorityMap.get(operator);
- } else {
- /*鍚﹀垯鐢宠鎺у埗鑰呬负褰撳墠鐧诲綍鐢ㄦ埛*/
- LoginUser loginUser = SecurityUtils.getLoginUser();
- SysUser user = loginUser.getUser();//鑾峰彇鐧诲綍鐢ㄦ埛鐨勪俊鎭�
- operatorLevel = user.getCameraPriority();
- }
- //鍒ゆ柇浼樺厛绾�
- if (operatorLevel > currentLevel) {
- Date now = new Date();
- now.setTime(now.getTime() + expired * 60);
- ardCameras.setOperatorExpired(now);//璁剧疆褰撳墠杩囨湡鏃堕棿
- ardCameras.setOperatorId(operator);//璁剧疆褰撳墠鐢ㄦ埛
- ardCamerasMapper.updateArdCameras(ardCameras);
- } else {
- return false;//浼樺厛绾т綆鏃犳硶涓婇攣
- }
+ ArdCameras ardCameras = ardCamerasService.selectArdCamerasById(cameraId);
+ if (ardCameras.getOperatorId().equals(operator)) {
+ //濡傛灉瑙i攣鐩告満鐨勫綋鍓嶇敤鎴锋槸鐢宠鑰咃紝鍒欐竻绌鸿鐩告満鐨勮繃鏈熸椂闂�
+ ardCameras.setOperatorExpired(null);
+ int i = ardCamerasService.updateArdCameras(ardCameras);
+ if (i > 0) {
+ log.debug(cameraId + "--瑙i攣鎴愬姛");
}
}
return true;
@@ -786,8 +743,7 @@
return -1;
} else {
netDvrPtzLockcfg.read();
- int byWorkMode = netDvrPtzLockcfg.byWorkMode;
- return byWorkMode;
+ return netDvrPtzLockcfg.byWorkMode;
}
}
@@ -912,7 +868,6 @@
if (!bool) {
int code = hCNetSDK.NET_DVR_GetLastError();
log.info("璁剧疆閫忛浘澶辫触,璇风◢鍚庨噸璇�" + code);
- return false;
}
log.info("璁剧疆閫忛浘鎴愬姛");
return bool;
@@ -961,7 +916,6 @@
if (!bool) {
int code = hCNetSDK.NET_DVR_GetLastError();
log.info("璁剧疆澶滆澶辫触,璇风◢鍚庨噸璇�" + code);
- return false;
}
log.info("璁剧疆澶滆鎴愬姛");
return bool;
@@ -1008,14 +962,12 @@
if (!bool) {
int code = hCNetSDK.NET_DVR_GetLastError();
log.info("璁剧疆鑱氱劍妯″紡澶辫触,璇风◢鍚庨噸璇�" + code);
- return false;
}
log.info("璁剧疆鑱氱劍妯″紡鎴愬姛");
return bool;
}
- public String getFocusMode(CameraCmd cmd)
- {
+ public String getFocusMode(CameraCmd cmd) {
String cameraId = cmd.getCameraId();
Integer channelNum = cmd.getChannelNum();
if (!GlobalVariable.loginMap.containsKey(cameraId)) {
@@ -1033,6 +985,7 @@
log.info("褰撳墠鑱氱劍妯″紡锛�" + struFocusMode.byFocusMode);
return String.valueOf(struFocusMode.byFocusMode);
}
+
/**
* @鎻忚堪 浜戝彴鍔犵儹寮�鍏�
* @鍙傛暟 [userId, channelNum, enable]
@@ -1051,7 +1004,7 @@
return false;
}
Integer userId = GlobalVariable.loginMap.get(cameraId);
- Integer dwStop;
+ int dwStop;
if (enable) {
dwStop = 0;//寮�鍚�
} else {
@@ -1061,7 +1014,6 @@
if (!bool) {
int code = hCNetSDK.NET_DVR_GetLastError();
log.info("璁剧疆浜戝彴鍔犵儹澶辫触,璇风◢鍚庨噸璇�" + code);
- return false;
}
log.info("璁剧疆浜戝彴鍔犵儹鎴愬姛");
return bool;
@@ -1105,7 +1057,6 @@
if (!bool) {
int code = hCNetSDK.NET_DVR_GetLastError();
log.info("璁剧疆闀滃ご闄ゅ啺澶辫触,璇风◢鍚庨噸璇�" + code);
- return false;
}
log.info("璁剧疆闀滃ご闄ゅ啺鎴愬姛");
return bool;
@@ -1114,7 +1065,7 @@
/**
* 鎴浘 杩旂粰鍓嶇
*
- * @param cmd
+ * @param cmd 鐩告満鍛戒护
*/
public String captureJPEGPicture(CameraCmd cmd) {
String cameraId = cmd.getCameraId();
@@ -1141,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("鎶撳浘澶辫触锛岃绋嶅悗閲嶈瘯");
-// }
-// }
-
-
}
/**
@@ -1305,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) {
@@ -1324,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甯х粨鏋勪綋瀵硅薄
@@ -1354,52 +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