From e7e1edb140096d2cab3067a15a6c78041daab748 Mon Sep 17 00:00:00 2001
From: ‘liusuyi’ <1951119284@qq.com>
Date: 星期二, 30 一月 2024 17:07:56 +0800
Subject: [PATCH] 修改依赖oshi版本由6.4.0降为5.8.6
---
ard-work/src/main/java/com/ruoyi/utils/sdk/hiksdk/service/impl/HikvisionSDK.java | 347 ++++++++++++++++++++++++++++++++++++++++-----------------
1 files changed, 245 insertions(+), 102 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 4992f17..82a6c1d 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
@@ -2,8 +2,11 @@
import com.ruoyi.alarm.global.domain.GuidePriorityQueue;
import com.ruoyi.alarm.global.domain.GuideTask;
+import com.ruoyi.alarm.global.service.impl.QueueHandler;
+import com.ruoyi.common.annotation.SdkOperate;
import com.ruoyi.common.utils.file.FileUtils;
import com.ruoyi.common.utils.file.MimeTypeUtils;
+import com.ruoyi.common.utils.spring.SpringUtils;
import com.ruoyi.common.utils.uuid.IdUtils;
import com.ruoyi.device.camera.service.IArdCamerasService;
import com.ruoyi.device.camera.factory.CameraSDK;
@@ -52,7 +55,10 @@
private IArdChannelService ardChannelService;
@Resource
private IVtduService vtduService;
+ @Resource
+ private QueueHandler queueHandler;
+ public Object _lock = new Object();
public static HCNetSDK hCNetSDK = HCNetSDK.hCNetSDK;
private static HCNetSDK.FExceptionCallBack fExceptionCallBack;//寮傚父鍥炶皟
@@ -140,37 +146,16 @@
camera.setState("1");
camera.setChanNum((int) m_strDeviceInfo.struDeviceV30.byChanNum);
camera.setStartDChan((int) m_strDeviceInfo.struDeviceV30.byStartDChan);
- ardCamerasService.updateArdCameras(camera);
//鑾峰彇鏈�鏂伴�氶亾
- List<ArdChannel> cameraChannelList = getCameraChannelList(camera);
+ List<ArdChannel> cameraChannelList = getIPChannelInfo(camera);
if (cameraChannelList.size() > 0) {
+ camera.setChannelList(cameraChannelList);
for (ArdChannel channel : cameraChannelList) {
channel.setId(IdUtils.simpleUUID());
ardChannelService.insertArdChannel(channel);
}
//娣诲姞鍒版祦濯掍綋
- for (ArdChannel channel : cameraChannelList) {
- String name = camera.getId() + "_" + channel.getChanNo();
- String rtspSource = "rtsp://" + camera.getUsername() + ":" + camera.getPassword() + "@" + camera.getIp() + ":" + camera.getRtspPort() + "/h264/ch" + channel.getChanNo() + "/main/av_stream";
- Vtdu vtdu = vtduService.selectVtduByName(name);
- if (vtdu != null) {
- vtduService.deleteVtduByName(name);
- }
- //娣诲姞鍒版祦濯掍綋
- vtdu = new Vtdu();
- vtdu.setRtspSource(rtspSource);
- vtdu.setName(camera.getId() + "_" + channel.getChanNo());
- CameraCmd cmd = new CameraCmd(camera.getId(), channel.getChanNo());
- Map<String, Object> videoCompressionCfg = getVideoCompressionCfg(cmd);
- if (videoCompressionCfg.get("videoEncType").equals("鏍囧噯h264")) {
- vtdu.setIsCode("0");//榛樿涓嶈浆鐮�
- } else {
- vtdu.setIsCode("1");//榛樿杞爜
- }
- vtdu.setMode("1");//榛樿CPU杞В鐮�
- vtdu.setCameraId(camera.getId());
- vtduService.insertVtdu(vtdu);
- }
+ addVtdu(camera);
}
//鍒涘缓寮曞闃熷垪
if (!GuidePriorityQueue.cameraQueueMap.containsKey(camera.getId())) {
@@ -178,7 +163,7 @@
PriorityBlockingQueue<GuideTask> priorityQueue = new PriorityBlockingQueue<>(1000, comparator);
GuidePriorityQueue.cameraQueueMap.put(camera.getId(), priorityQueue);
}
-
+ ardCamerasService.updateArdCameras(camera);
} catch (Exception ex) {
log.error("娉ㄥ唽璁惧寮傚父", ex);
}
@@ -235,28 +220,29 @@
//鍚屾鐧诲綍
int lUserID = hCNetSDK.NET_DVR_Login_V40(m_strLoginInfo, m_strDeviceInfo);
if (lUserID < 0) {
- log.debug("Login Failed [ " + camera.getIp() + ":" + camera.getPort() + " ],閿欒鐮侊細" + hCNetSDK.NET_DVR_GetLastError());
+ log.debug("Login Failed 銆� " + camera.getIp() + ":" + camera.getPort() + " 銆�,Error Code锛�" + hCNetSDK.NET_DVR_GetLastError());
camera.setChanNum(0);
camera.setLoginId(-1);
camera.setState("0");
//鍒犻櫎绠$悊閫氶亾
ardChannelService.deleteArdChannelByDeviceId(camera.getId());
ardCamerasService.updateArdCameras(camera);
- return ;
+ return;
}
- log.debug("Login Success [ " + camera.getIp() + ":" + camera.getPort() + " ]");
- if (fExceptionCallBack == null) {
- fExceptionCallBack = new ExceptionCallBack();//寮傚父鍥炶皟
- //璁剧疆寮傚父鍥炶皟鍑芥暟(鍙湪鍥炶皟鍑芥暟涓幏鍙栬澶囦笂涓嬬嚎鐘舵�佺瓑)
- if (!hCNetSDK.NET_DVR_SetExceptionCallBack_V30(0, 0, fExceptionCallBack, null)) {
- log.debug("Set fExceptionCallBack function fail");
- return ;
- } else {
- log.debug("Set fExceptionCallBack function successfully!");
+ log.debug("Login Success 銆� " + camera.getIp() + ":" + camera.getPort() + " 銆�");
+ synchronized (_lock) {
+ if (fExceptionCallBack == null) {
+ fExceptionCallBack = new ExceptionCallBack();//寮傚父鍥炶皟
+ //璁剧疆寮傚父鍥炶皟鍑芥暟(鍙湪鍥炶皟鍑芥暟涓幏鍙栬澶囦笂涓嬬嚎鐘舵�佺瓑)
+ if (!hCNetSDK.NET_DVR_SetExceptionCallBack_V30(0, 0, fExceptionCallBack, null)) {
+ log.debug("Set fExceptionCallBack function fail");
+ return;
+ } else {
+ log.debug("Set fExceptionCallBack function successfully!");
+ }
}
}
-
if (GlobalVariable.loginMap.containsKey(camera.getId())) {
GlobalVariable.loginMap.remove(camera.getId());
}
@@ -270,48 +256,71 @@
camera.setState("1");
camera.setChanNum((int) m_strDeviceInfo.struDeviceV30.byChanNum);
camera.setStartDChan((int) m_strDeviceInfo.struDeviceV30.byStartDChan);
- ardCamerasService.updateArdCameras(camera);
+
//鑾峰彇鏈�鏂伴�氶亾
- List<ArdChannel> cameraChannelList = getCameraChannelList(camera);
+ List<ArdChannel> cameraChannelList = getIPChannelInfo(camera);
if (cameraChannelList.size() > 0) {
+ camera.setChannelList(cameraChannelList);
+ camera.setChanNum(cameraChannelList.size());
for (ArdChannel channel : cameraChannelList) {
channel.setId(IdUtils.simpleUUID());
ardChannelService.insertArdChannel(channel);
}
- //娣诲姞鍒版祦濯掍綋
- for (ArdChannel channel : cameraChannelList) {
- String name = camera.getId() + "_" + channel.getChanNo();
- String rtspSource = "rtsp://" + camera.getUsername() + ":" + camera.getPassword() + "@" + camera.getIp() + ":" + camera.getRtspPort() + "/h264/ch" + channel.getChanNo() + "/main/av_stream";
- Vtdu vtdu = vtduService.selectVtduByName(name);
- if (vtdu != null) {
- vtduService.deleteVtduByName(name);
- }
- //娣诲姞鍒版祦濯掍綋
- vtdu = new Vtdu();
- vtdu.setRtspSource(rtspSource);
- vtdu.setName(camera.getId() + "_" + channel.getChanNo());
- CameraCmd cmd = new CameraCmd(camera.getId(), channel.getChanNo());
- Map<String, Object> videoCompressionCfg = getVideoCompressionCfg(cmd);
- if (videoCompressionCfg.get("videoEncType").equals("鏍囧噯h264")) {
- vtdu.setIsCode("0");//榛樿涓嶈浆鐮�
- } else {
- vtdu.setIsCode("1");//榛樿杞爜
- }
- vtdu.setMode("1");//榛樿CPU杞В鐮�
- vtdu.setCameraId(camera.getId());
- vtduService.insertVtdu(vtdu);
- }
}
+ ardCamerasService.updateArdCameras(camera);
+ //娣诲姞鍒版祦濯掍綋
+ addVtdu(camera);
//鍒涘缓寮曞闃熷垪
- if (!GuidePriorityQueue.cameraQueueMap.containsKey(camera.getId())) {
- Comparator<GuideTask> comparator = GuidePriorityQueue.getComparator();
- PriorityBlockingQueue<GuideTask> priorityQueue = new PriorityBlockingQueue<>(1000, comparator);
- GuidePriorityQueue.cameraQueueMap.put(camera.getId(), priorityQueue);
- }
-
+ createGuideQueue(camera);
} catch (Exception ex) {
log.error("娉ㄥ唽璁惧寮傚父", ex);
}
+ }
+
+ //鍒涘缓寮曞闃熷垪
+ 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());
+ }
+ }
+ }
+ }
+
+ //娣诲姞鍒版祦濯掍綋
+ private void addVtdu(ArdCameras camera) {
+ try {
+ for (ArdChannel channel : camera.getChannelList()) {
+ String name = camera.getId() + "_" + channel.getChanNo();
+ String rtspSource = "rtsp://" + camera.getUsername() + ":" + camera.getPassword() + "@" + camera.getIp() + ":" + camera.getRtspPort() + "/h264/ch" + channel.getChanNo() + "/main/av_stream";
+ Vtdu vtdu = vtduService.selectVtduByName(name);
+ if (vtdu != null) {
+ vtduService.deleteVtduByName(name);
+ }
+ //娣诲姞鍒版祦濯掍綋
+ vtdu = new Vtdu();
+ vtdu.setRtspSource(rtspSource);
+ vtdu.setName(camera.getId() + "_" + channel.getChanNo());
+ CameraCmd cmd = new CameraCmd(camera.getId(), channel.getChanNo());
+ Map<String, Object> videoCompressionCfg = getVideoCompressionCfg(cmd);
+ if (videoCompressionCfg.get("videoEncType").equals("鏍囧噯h264")) {
+ vtdu.setIsCode("0");//榛樿涓嶈浆鐮�
+ } else {
+ vtdu.setIsCode("1");//榛樿杞爜
+ }
+ vtdu.setMode("1");//榛樿CPU杞В鐮�
+ vtdu.setCameraId(camera.getId());
+ vtduService.insertVtdu(vtdu);
+ }
+ } catch (Exception ex) {
+ log.error("閫氶亾娣诲姞鍒版祦濯掍綋寮傚父锛�" + ex.getMessage());
+ }
+
}
/**
@@ -366,6 +375,7 @@
* @淇敼浜哄拰鍏跺畠淇℃伅
*/
@Override
+ @SdkOperate
public boolean pTZControl(CameraCmd cmd) {
String cameraId = cmd.getCameraId();
boolean enable = cmd.isEnable();
@@ -881,8 +891,7 @@
* @鍒涘缓鏃堕棿 2023/1/17 16:36
* @淇敼浜哄拰鍏跺畠淇℃伅
*/
- @Override
- public Map<String, Object> getPtz(CameraCmd cmd) {
+ public Map<String, Object> getPtz1(CameraCmd cmd) {
String cameraId = cmd.getCameraId();
Integer channelNum = cmd.getChanNo();
if (!GlobalVariable.loginMap.containsKey(cameraId)) {
@@ -923,6 +932,57 @@
}
/**
+ * @鎻忚堪 鑾峰彇楂樼簿搴tz淇℃伅
+ * @鍙傛暟 [userId, chanNo]
+ * @杩斿洖鍊� boolean
+ * @鍒涘缓浜� 鍒樿嫃涔�
+ * @鍒涘缓鏃堕棿 2023/1/17 16:36
+ * @淇敼浜哄拰鍏跺畠淇℃伅
+ */
+ @Override
+ public Map<String, Object> getPtz(CameraCmd cmd) {
+ Map<String, Object> ptzMap = new HashMap<>();
+ try {
+ String cameraId = cmd.getCameraId();
+ Integer chanNo = cmd.getChanNo();
+ if (!GlobalVariable.loginMap.containsKey(cameraId)) {
+ return new HashMap<>();
+ }
+ IntByReference pchannel = new IntByReference(chanNo);
+ Pointer pChannelNum = pchannel.getPointer();
+ Integer lUserID = (Integer) GlobalVariable.loginMap.get(cameraId);
+ HCNetSDK.NET_DVR_STD_CONFIG lpConfigParam6696 = new HCNetSDK.NET_DVR_STD_CONFIG();
+ HCNetSDK.NET_DVR_PTZABSOLUTEEX_CFG lpPTZAbsoluteEX_cfg = new HCNetSDK.NET_DVR_PTZABSOLUTEEX_CFG();
+ lpConfigParam6696.lpCondBuffer = pChannelNum;
+ lpConfigParam6696.dwCondSize = 4;
+ lpConfigParam6696.lpInBuffer = null;
+ lpConfigParam6696.dwInSize = 0;
+ lpConfigParam6696.lpOutBuffer = lpPTZAbsoluteEX_cfg.getPointer();
+ lpConfigParam6696.dwOutSize = lpPTZAbsoluteEX_cfg.size();
+ lpConfigParam6696.write();
+ boolean res = hCNetSDK.NET_DVR_GetSTDConfig(lUserID, HCNetSDK.NET_DVR_GET_PTZABSOLUTEEX, lpConfigParam6696);
+ if (!res) {
+ log.error("鑾峰彇楂樼簿搴TZ缁濆浣嶇疆閰嶇疆澶辫触锛岄敊璇彿锛�" + hCNetSDK.NET_DVR_GetLastError());
+ } else {
+ lpPTZAbsoluteEX_cfg.read();
+ //log.debug("P锛�" + lpPTZAbsoluteEX_cfg.struPTZCtrl.fPan + " T锛�" + lpPTZAbsoluteEX_cfg.struPTZCtrl.fTilt + " Z锛�" + lpPTZAbsoluteEX_cfg.struPTZCtrl.fZoom
+ // + " 鑱氱劍鍙傛暟锛�" + lpPTZAbsoluteEX_cfg.struPTZCtrl.dwFocus + " 鑱氱劍鑼冨洿锛�" + lpPTZAbsoluteEX_cfg.dwFocalLen + " 姘村钩杞姩閫熷害锛�" + lpPTZAbsoluteEX_cfg.fHorizontalSpeed
+ // + " 鍨傜洿杞姩閫熷害锛�" + lpPTZAbsoluteEX_cfg.fVerticalSpeed + " 闀滃ご鍙樺�嶉厤缃被鍨嬶細" + lpPTZAbsoluteEX_cfg.byZoomType);
+ float p = lpPTZAbsoluteEX_cfg.struPTZCtrl.fPan;
+ float fTilt = lpPTZAbsoluteEX_cfg.struPTZCtrl.fTilt;
+ float t = fTilt < 0 ? fTilt + 360 : fTilt;
+ float z = lpPTZAbsoluteEX_cfg.struPTZCtrl.fZoom;
+ ptzMap.put("p", p);
+ ptzMap.put("t", t);
+ ptzMap.put("z", z);
+ }
+ } catch (Exception ex) {
+ log.error("鑾峰彇楂樼簿搴TZ缁濆浣嶇疆寮傚父:" + ex.getMessage());
+ }
+ return ptzMap;
+ }
+
+ /**
* @鎻忚堪 璁剧疆ptz淇℃伅
* @鍙傛暟 [userId, channelNum]
* @杩斿洖鍊� boolean
@@ -931,7 +991,8 @@
* @淇敼浜哄拰鍏跺畠淇℃伅 娉ㄦ剰淇话瑙掑害璐熷�奸渶瑕佸姞涓�360寰楀埌鐨勬鍊艰繘琛岃缃�
*/
@Override
- public boolean setPtz(CameraCmd cmd) {
+ @SdkOperate
+ public boolean setPtz1(CameraCmd cmd) {
String cameraId = cmd.getCameraId();
Integer channelNum = cmd.getChanNo();
Map<String, Double> ptz = cmd.getPtzMap();
@@ -953,7 +1014,7 @@
boolean bool = hCNetSDK.NET_DVR_SetDVRConfig(userId, NET_DVR_SET_PTZPOS, channelNum, point, m_ptzPosCurrent.size());
if (!bool) {
int code = hCNetSDK.NET_DVR_GetLastError();
- log.error("璁剧疆ptz澶辫触,璇风◢鍚庨噸璇�" + code);
+ log.error("璁剧疆PTZ鍙傛暟澶辫触,璇风◢鍚庨噸璇�:" + code);
}
return bool;
} catch (Exception ex) {
@@ -962,10 +1023,70 @@
}
}
+ /**
+ * @鎻忚堪 璁剧疆楂樼簿搴tz淇℃伅
+ * @鍙傛暟 [userId, channelNum]
+ * @杩斿洖鍊� boolean
+ * @鍒涘缓浜� 鍒樿嫃涔�
+ * @鍒涘缓鏃堕棿 2023/1/17 16:36
+ * @淇敼浜哄拰鍏跺畠淇℃伅 娉ㄦ剰淇话瑙掑害璐熷�煎悜涓嬭礋鍊�
+ */
@Override
+ @SdkOperate
+ public boolean setPtz(CameraCmd cmd) {
+ try {
+ String cameraId = cmd.getCameraId();
+ Integer chanNo = cmd.getChanNo();
+ Map<String, Double> ptz = cmd.getPtzMap();
+ if (!GlobalVariable.loginMap.containsKey(cameraId)) {
+ return false;
+ }
+ Integer lUserID = (Integer) GlobalVariable.loginMap.get(cameraId);
+ IntByReference pchannel = new IntByReference(chanNo);
+ Pointer pChannelNum = pchannel.getPointer();
+
+ HCNetSDK.NET_DVR_STD_CONFIG lpConfigParam6697 = new HCNetSDK.NET_DVR_STD_CONFIG();
+ HCNetSDK.NET_DVR_PTZABSOLUTEEX_CFG lpPTZAbsoluteEX_cfgInfo = new HCNetSDK.NET_DVR_PTZABSOLUTEEX_CFG();
+ lpConfigParam6697.lpCondBuffer = pChannelNum;
+ lpConfigParam6697.dwCondSize = 4;
+ HCNetSDK.BYTE_ARRAY m_szStatusBuf = new HCNetSDK.BYTE_ARRAY(4096 * 4);
+ lpConfigParam6697.lpStatusBuffer = m_szStatusBuf.getPointer();
+ lpConfigParam6697.dwStatusSize = 4096 * 4;
+ lpPTZAbsoluteEX_cfgInfo.dwSize = lpPTZAbsoluteEX_cfgInfo.size();
+ lpPTZAbsoluteEX_cfgInfo.struPTZCtrl.fPan = new Double(ptz.get("p")).floatValue();
+ float t = new Double(ptz.get("t")).floatValue();
+ float t1 = t > 300 ? (t - 360) : t;
+ BigDecimal bigDecimal = new BigDecimal(t1);
+ float t2 = bigDecimal.setScale(2, BigDecimal.ROUND_HALF_UP).floatValue();
+ lpPTZAbsoluteEX_cfgInfo.struPTZCtrl.fTilt = t2;
+ lpPTZAbsoluteEX_cfgInfo.struPTZCtrl.fZoom = new Double(ptz.get("z")).floatValue();
+ lpPTZAbsoluteEX_cfgInfo.struPTZCtrl.dwFocus = 399;
+ lpPTZAbsoluteEX_cfgInfo.dwFocalLen = 1250;
+ lpPTZAbsoluteEX_cfgInfo.fHorizontalSpeed = (float) 10;
+ lpPTZAbsoluteEX_cfgInfo.fVerticalSpeed = (float) 10;
+ lpPTZAbsoluteEX_cfgInfo.byZoomType = 0;
+ lpPTZAbsoluteEX_cfgInfo.write();
+ lpConfigParam6697.lpInBuffer = lpPTZAbsoluteEX_cfgInfo.getPointer();
+ lpConfigParam6697.dwInSize = lpPTZAbsoluteEX_cfgInfo.dwSize;
+ lpConfigParam6697.write();
+ boolean bool = hCNetSDK.NET_DVR_SetSTDConfig(lUserID, NET_DVR_SET_PTZABSOLUTEEX, lpConfigParam6697);
+ if (!bool) {
+ int code = hCNetSDK.NET_DVR_GetLastError();
+ log.error("璁剧疆楂樼簿搴TZ鍙傛暟澶辫触,璇风◢鍚庨噸璇�:" + code);
+ }
+ return bool;
+
+ } catch (Exception ex) {
+ log.error("璁剧疆楂樼簿搴TZ鍙傛暟寮傚父", ex);
+ return false;
+ }
+ }
+
+ @Override
+ @SdkOperate
public boolean guideTargetPosition(CameraCmd cmd) {
String cameraId = cmd.getCameraId();
- Integer channelNum = cmd.getChanNo();
+ Integer chanNo = cmd.getChanNo();
if (!GlobalVariable.loginMap.containsKey(cameraId)) {
return false;
}
@@ -985,7 +1106,7 @@
m_ptzPosCurrent.wZoomPos = (short) (Integer.parseInt(z, 16));
Pointer point = m_ptzPosCurrent.getPointer();
m_ptzPosCurrent.write();
- boolean bool = hCNetSDK.NET_DVR_SetDVRConfig(userId, NET_DVR_SET_PTZPOS, channelNum, point, m_ptzPosCurrent.size());
+ boolean bool = hCNetSDK.NET_DVR_SetDVRConfig(userId, NET_DVR_SET_PTZPOS, chanNo, point, m_ptzPosCurrent.size());
if (!bool) {
int code = hCNetSDK.NET_DVR_GetLastError();
log.error("璁剧疆ptz澶辫触,璇风◢鍚庨噸璇�" + code);
@@ -1037,6 +1158,7 @@
* @淇敼浜哄拰鍏跺畠淇℃伅 娉ㄦ剰淇话瑙掑害璐熷�奸渶瑕佸姞涓�360寰楀埌鐨勬鍊艰繘琛岃缃�
*/
@Override
+ @SdkOperate
public boolean setZeroPtz(CameraCmd cmd) {
String cameraId = cmd.getCameraId();
Integer channelNum = cmd.getChanNo();
@@ -1194,8 +1316,7 @@
if (!bool) {
int code = hCNetSDK.NET_DVR_GetLastError();
log.error("璁剧疆澶滆澶辫触,璇风◢鍚庨噸璇�" + code);
- }
- else {
+ } else {
log.debug("璁剧疆澶滆鎴愬姛");
}
@@ -1682,38 +1803,60 @@
}
//鑾峰彇IP閫氶亾
- @Override
- public List<ArdChannel> getCameraChannelList(ArdCameras camera) {
- /*鑾峰彇閫氶亾*/
+ public List<ArdChannel> getIPChannelInfo(ArdCameras camera) {
+
+ //鑾峰彇閫氶亾
List<ArdChannel> channelList = new ArrayList<>();
try {
- Integer chanNum = camera.getChanNum();
- Integer startDChan = camera.getStartDChan();
- if (chanNum > 0) {
- // 鑾峰彇閫氶亾鍙�
- for (int iChannum = 0; iChannum < chanNum; iChannum++) {
- ArdChannel ardChannel = new ArdChannel();
- int channum = iChannum + startDChan + 1;
- HCNetSDK.NET_DVR_PICCFG_V40 strPicCfg = new HCNetSDK.NET_DVR_PICCFG_V40();
- strPicCfg.dwSize = strPicCfg.size();
- strPicCfg.write();
- Pointer pStrPicCfg = strPicCfg.getPointer();
- NativeLong lChannel = new NativeLong(channum);
- IntByReference pInt = new IntByReference(0);
- boolean b_GetPicCfg = hCNetSDK.NET_DVR_GetDVRConfig(camera.getLoginId(), HCNetSDK.NET_DVR_GET_PICCFG_V40, lChannel.intValue(),
- pStrPicCfg, strPicCfg.size(), pInt);
- if (b_GetPicCfg) {
- strPicCfg.read();
- String channelName = new String(strPicCfg.sChanName, "GBK").trim();
- ardChannel.setName(channelName);
- }
+ if (camera.getGdtype().equals("3")) {
+ camera.setChanNum(64);//瓒呰剳鑾峰彇鍦ㄧ嚎閫氶亾鏁�
+ camera.setStartDChan(0);//瓒呰剳鍒濆閫氶亾涓�0
+ }
+ IntByReference ibrBytesReturned = new IntByReference(0);//鑾峰彇IP鎺ュ叆閰嶇疆鍙傛暟
+ HCNetSDK.NET_DVR_IPPARACFG_V40 m_strIpparaCfg = new HCNetSDK.NET_DVR_IPPARACFG_V40();
+ m_strIpparaCfg.write();
+ //lpIpParaConfig 鎺ユ敹鏁版嵁鐨勭紦鍐叉寚閽�
+ Pointer lpIpParaConfig = m_strIpparaCfg.getPointer();
+ boolean bRet = hCNetSDK.NET_DVR_GetDVRConfig(camera.getLoginId(), HCNetSDK.NET_DVR_GET_IPPARACFG_V40, 0, lpIpParaConfig, m_strIpparaCfg.size(), ibrBytesReturned);
+ m_strIpparaCfg.read();
+ //log.debug("璧峰鏁板瓧閫氶亾鍙凤細" + m_strIpparaCfg.dwStartDChan);//m_strIpparaCfg.dwDChanNum
+ for (int iChannum = 0; iChannum < camera.getChanNum(); iChannum++) {
+ ArdChannel ardChannel = new ArdChannel();
+ int channum = iChannum + camera.getStartDChan() + 1;
+ HCNetSDK.NET_DVR_PICCFG_V40 strPicCfg = new HCNetSDK.NET_DVR_PICCFG_V40();
+ strPicCfg.dwSize = strPicCfg.size();
+ strPicCfg.write();
+ Pointer pStrPicCfg = strPicCfg.getPointer();
+ NativeLong lChannel = new NativeLong(channum);
+ IntByReference pInt = new IntByReference(0);
+ boolean b_GetPicCfg = hCNetSDK.NET_DVR_GetDVRConfig(camera.getLoginId(), HCNetSDK.NET_DVR_GET_PICCFG_V40, lChannel.intValue(),
+ pStrPicCfg, strPicCfg.size(), pInt);
+ if (!b_GetPicCfg) {
+ // log.error("鑾峰彇鍥惧儚鍙傛暟澶辫触锛岄敊璇爜锛�" + hCNetSDK.NET_DVR_GetLastError());
+ }
+ strPicCfg.read();
+ m_strIpparaCfg.struStreamMode[iChannum].read();
+ if (m_strIpparaCfg.struStreamMode[iChannum].byGetStreamType == 0) {
+ m_strIpparaCfg.struStreamMode[iChannum].uGetStream.setType(HCNetSDK.NET_DVR_IPCHANINFO.class);
+ m_strIpparaCfg.struStreamMode[iChannum].uGetStream.struChanInfo.read();
+ int channel = m_strIpparaCfg.struStreamMode[iChannum].uGetStream.struChanInfo.byIPID + m_strIpparaCfg.struStreamMode[iChannum].uGetStream.struChanInfo.byIPIDHigh * 256;
+ String channelName = new String(strPicCfg.sChanName, "GBK").trim();
ardChannel.setDeviceId(camera.getId());
- ardChannel.setChanNo(iChannum + 1);
- channelList.add(ardChannel);
+ ardChannel.setName(channelName);
+ ardChannel.setChanNo(channum);
+ if (camera.getGdtype().equals("3")) {
+ //瓒呰剳鍙幏鍙栧湪绾块�氶亾
+ if (m_strIpparaCfg.struStreamMode[iChannum].uGetStream.struChanInfo.byEnable == 1) {
+ //log.debug("IP閫氶亾" + channum + "鍦ㄧ嚎");
+ channelList.add(ardChannel);
+ }
+ } else {
+ channelList.add(ardChannel);
+ }
}
}
} catch (Exception ex) {
- log.error("鑾峰彇鐩告満閫氶亾寮傚父:" + ex.getMessage());
+ log.error("鑾峰彇IP閫氶亾寮傚父:" + ex.getMessage());
}
return channelList;
}
--
Gitblit v1.9.3