From 133098a6f81de1de99cb0a5c829b7d1b39105e84 Mon Sep 17 00:00:00 2001 From: ‘liusuyi’ <1951119284@qq.com> Date: 星期四, 29 二月 2024 17:03:11 +0800 Subject: [PATCH] 获取附近相机增加数据权限 --- 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