From 7c366e0d5acb41870c6ce6d17795de9e6d0fdcc8 Mon Sep 17 00:00:00 2001 From: liusuyi <1951119284@qq.com> Date: 星期一, 27 五月 2024 15:26:37 +0800 Subject: [PATCH] 适配大华NVR --- ard-work/src/main/java/com/ruoyi/utils/sdk/hiksdk/service/impl/HikvisionSDK.java | 75 ++++++--------- ard-work/src/main/java/com/ruoyi/utils/sdk/dhsdk/module/ConfigModule.java | 51 +++++++++ ard-work/src/main/java/com/ruoyi/device/camera/factory/CameraSDK.java | 2 ard-work/src/main/java/com/ruoyi/utils/sdk/hiksdk/lib/LoginResultCallBack.java | 2 ard-work/src/main/java/com/ruoyi/utils/sdk/dhsdk/service/impl/DahuaSDK.java | 121 ++++++++++++------------ 5 files changed, 141 insertions(+), 110 deletions(-) diff --git a/ard-work/src/main/java/com/ruoyi/device/camera/factory/CameraSDK.java b/ard-work/src/main/java/com/ruoyi/device/camera/factory/CameraSDK.java index c1d51b5..3ab1d8d 100644 --- a/ard-work/src/main/java/com/ruoyi/device/camera/factory/CameraSDK.java +++ b/ard-work/src/main/java/com/ruoyi/device/camera/factory/CameraSDK.java @@ -106,7 +106,7 @@ boolean recordStopNotToMinio(CameraCmd cmd); //鑾峰彇鐩告満閫氶亾淇℃伅 - List<ArdChannel> getIPChannelInfo(ArdCameras camera); + List<ArdChannel> getChannels(ArdCameras camera); //鑾峰彇GIS淇℃伅鏁版嵁 AjaxResult getGisInfo(CameraCmd cmd); diff --git a/ard-work/src/main/java/com/ruoyi/utils/sdk/dhsdk/module/ConfigModule.java b/ard-work/src/main/java/com/ruoyi/utils/sdk/dhsdk/module/ConfigModule.java index c874eaa..645afae 100644 --- a/ard-work/src/main/java/com/ruoyi/utils/sdk/dhsdk/module/ConfigModule.java +++ b/ard-work/src/main/java/com/ruoyi/utils/sdk/dhsdk/module/ConfigModule.java @@ -2,6 +2,8 @@ import com.ruoyi.utils.sdk.dhsdk.lib.NetSDKLib; import com.ruoyi.utils.sdk.dhsdk.lib.ToolKits; +import com.sun.jna.Memory; +import com.sun.jna.Pointer; import com.sun.jna.Structure; import com.sun.jna.ptr.IntByReference; import lombok.extern.slf4j.Slf4j; @@ -63,7 +65,7 @@ int nBufferLen = 2 * 1024 * 1024; byte[] strBuffer = new byte[nBufferLen]; - if (netsdk.CLIENT_GetNewDevConfig(hLoginHandle, strCmd, nChn, strBuffer, nBufferLen, error, 3000)) { + if (netsdk.CLIENT_GetNewDevConfig(hLoginHandle, strCmd, nChn, strBuffer, nBufferLen, error, 6000)) { cmdObject.write(); if (configsdk.CLIENT_ParseData(strCmd, strBuffer, cmdObject.getPointer(), cmdObject.size(), null)) { cmdObject.read(); @@ -90,12 +92,57 @@ if (bRet) { cmdObject.read(); } else { - log.error("Get ["+strCmd+"] Config Failed!Last Error = " + getErrorCodePrint()); + log.error("Get [" + strCmd + "] Config Failed!Last Error = " + getErrorCodePrint()); result = false; } return result; } + public static boolean queryCameraState(NetSDKLib.LLong hLoginHandle, Integer chanNum, Integer chanNo) { + boolean bRet = false; + try { + NetSDKLib.NET_CAMERA_STATE_INFO[] arrCameraStatus = new NetSDKLib.NET_CAMERA_STATE_INFO[chanNum]; + for (int i = 0; i < arrCameraStatus.length; i++) { + arrCameraStatus[i] = new NetSDKLib.NET_CAMERA_STATE_INFO(); + } + + // 鍏ュ弬 + NetSDKLib.NET_IN_GET_CAMERA_STATEINFO stIn = new NetSDKLib.NET_IN_GET_CAMERA_STATEINFO(); + stIn.bGetAllFlag = 0; // 鍏ㄩ儴 + stIn.nValidNum = chanNum; + stIn.nChannels[chanNo - 1] = chanNo - 1; + + // 鍑哄弬 + NetSDKLib.NET_OUT_GET_CAMERA_STATEINFO stOut = new NetSDKLib.NET_OUT_GET_CAMERA_STATEINFO(); + stOut.nMaxNum = chanNum; + stOut.pCameraStateInfo = new Memory(arrCameraStatus[0].size() * chanNum); + stOut.pCameraStateInfo.clear(arrCameraStatus[0].size() * chanNum); + ToolKits.SetStructArrToPointerData(arrCameraStatus, stOut.pCameraStateInfo); // 灏嗘暟缁勫唴瀛樻嫹璐濆埌Pointer + + stIn.write(); + stOut.write(); + + bRet = netsdk.CLIENT_QueryDevInfo(hLoginHandle, NetSDKLib.NET_QUERY_GET_CAMERA_STATE, + stIn.getPointer(), stOut.getPointer(), null, 3000); + if (bRet) { + stOut.read(); + ToolKits.GetPointerDataToStructArr(stOut.pCameraStateInfo, arrCameraStatus); // 灏哖ointer鎷疯礉鍒版暟缁勫唴瀛� + final String[] connectionState = {"鏈煡", "姝e湪杩炴帴", "宸茶繛鎺�", "鏈繛鎺�", "閫氶亾鏈厤缃�,鏃犱俊鎭�", "閫氶亾鏈夐厤缃�,浣嗚绂佺敤"}; + if (connectionState[arrCameraStatus[chanNo - 1].emConnectionState].equals("宸茶繛鎺�")) { + log.debug("閫氶亾" + arrCameraStatus[chanNo - 1].nChannel + connectionState[arrCameraStatus[chanNo - 1].emConnectionState]); + bRet = true; + } else { + bRet = false; + } + } else { + log.error("Query Camera State Failed!" + getErrorCodePrint()); + } + } catch (Exception ex) { + log.error("Query Camera State Failed!" + ex.getMessage()); + } + return bRet; + } + // 鑾峰彇閰嶇疆 public static boolean GetConfig(NetSDKLib.LLong hLoginHandle, int nChn, int type, Structure cmdObject) { boolean result = false; diff --git a/ard-work/src/main/java/com/ruoyi/utils/sdk/dhsdk/service/impl/DahuaSDK.java b/ard-work/src/main/java/com/ruoyi/utils/sdk/dhsdk/service/impl/DahuaSDK.java index e374b7a..5f1695a 100644 --- a/ard-work/src/main/java/com/ruoyi/utils/sdk/dhsdk/service/impl/DahuaSDK.java +++ b/ard-work/src/main/java/com/ruoyi/utils/sdk/dhsdk/service/impl/DahuaSDK.java @@ -105,38 +105,22 @@ log.error("璁惧[" + camera.getIp() + ":" + camera.getPort() + "]鐧诲綍澶辫触:" + getErrorCodePrint()); return AjaxResult.warn(ErrorCode.getErrorCode(LoginModule.netsdk.CLIENT_GetLastError())); } - if (GlobalVariable.loginMap.containsKey(camera.getId())) { - GlobalVariable.loginMap.remove(camera.getId()); - } - //鍒犻櫎绠$悊閫氶亾 - ardChannelService.deleteArdChannelByDeviceId(camera.getId()); +// if (GlobalVariable.loginMap.containsKey(camera.getId())) { +// GlobalVariable.loginMap.remove(camera.getId()); +// } camera.setState("1"); camera.setChanNum(m_stDeviceInfo.byChanNum); camera.setStartDChan(1); camera.setLoginId((int) loginId.longValue()); - ardCamerasService.updateArdCameras(camera); GlobalVariable.loginMap.put(camera.getId(), loginId); - //鑾峰彇鏈�鏂伴�氶亾 - for (int i = 1; i < m_stDeviceInfo.byChanNum + 1; i++) { - ArdChannel channel = new ArdChannel(); - NetSDKLib.AV_CFG_ChannelName av_cfg_channelName = new NetSDKLib.AV_CFG_ChannelName(); - boolean b = ConfigModule.GetNewDevConfig(loginId, i - 1, CFG_CMD_CHANNELTITLE, av_cfg_channelName); - if (b) { - String chanName = ""; - try { - chanName = new String(av_cfg_channelName.szName, "GBK").trim(); - } catch (UnsupportedEncodingException e) { - e.printStackTrace(); - } - channel.setName(chanName.equals("") ? "閫氶亾" + i : chanName); - } - channel.setDeviceId(camera.getId()); - channel.setChanNo(i); - ardChannelService.insertArdChannel(channel); + List<ArdChannel> ardChannelList = getChannels(camera); + if (ardChannelList.size() > 0) { + camera.setChanNum(ardChannelList.size()); + ardCamerasService.updateArdCameras(camera); + //閰嶇疆鍒版祦濯掍綋 + addVtdu(camera); } - //閰嶇疆鍒版祦濯掍綋 - addVtdu(camera); //鍒涘缓寮曞闃熷垪 createGuideQueue(camera); return AjaxResult.success("璁惧鐧诲綍鎴愬姛"); @@ -163,11 +147,9 @@ log.error("璁惧[" + camera.getIp() + ":" + camera.getPort() + "]鐧诲綍澶辫触:" + getErrorCodePrint()); return AjaxResult.warn(getErrorCodePrint()); } - if (GlobalVariable.loginMap.containsKey(camera.getId())) { - GlobalVariable.loginMap.remove(camera.getId()); - } - //鍒犻櫎绠$悊閫氶亾 - ardChannelService.deleteArdChannelByDeviceId(camera.getId()); +// if (GlobalVariable.loginMap.containsKey(camera.getId())) { +// GlobalVariable.loginMap.remove(camera.getId()); +// } camera.setState("1"); camera.setChanNum(m_stDeviceInfo.byChanNum); camera.setStartDChan(1); @@ -176,28 +158,13 @@ GlobalVariable.loginMap.put(camera.getId(), loginId); //鑾峰彇鏈�鏂伴�氶亾 - for (int i = 1; i < m_stDeviceInfo.byChanNum + 1; i++) { - ArdChannel channel = new ArdChannel(); - NetSDKLib.AV_CFG_ChannelName av_cfg_channelName = new NetSDKLib.AV_CFG_ChannelName(); - boolean b = ConfigModule.GetNewDevConfig(loginId, i-1, CFG_CMD_CHANNELTITLE, av_cfg_channelName); - if (!b) { - log.error("鑾峰彇閰嶇疆澶辫触,璇风◢鍚庨噸璇�" + getErrorCodePrint()); - // return AjaxResult.warn(ErrorCode.getErrorCode(LoginModule.netsdk.CLIENT_GetLastError())); - } - String chanName = ""; - try { - chanName = new String(av_cfg_channelName.szName, "GBK").trim(); - } catch (UnsupportedEncodingException e) { - e.printStackTrace(); - } - channel.setName(chanName.equals("") ? "閫氶亾" + i : chanName); - - channel.setDeviceId(camera.getId()); - channel.setChanNo(i); - ardChannelService.insertArdChannel(channel); + List<ArdChannel> ardChannelList = getChannels(camera); + if (ardChannelList.size() > 0) { + camera.setChanNum(ardChannelList.size()); + ardCamerasService.updateArdCameras(camera); + //閰嶇疆鍒版祦濯掍綋 + addVtdu(camera); } - //閰嶇疆鍒版祦濯掍綋 - addVtdu(camera); //鍒涘缓寮曞闃熷垪 createGuideQueue(camera); return AjaxResult.success("鐧诲綍鎴愬姛"); @@ -239,13 +206,49 @@ //鍒涘缓寮曞闃熷垪 private void createGuideQueue(ArdCameras 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); - //鍚姩闃熷垪澶勭悊鍣� - queueHandler.process(camera.getId()); + if (camera.getGdtype().equals("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()); + } } + } + + //鑾峰彇閫氶亾 + public List<ArdChannel> getChannels(ArdCameras camera) { + ardChannelService.deleteArdChannelByDeviceId(camera.getId()); + LLong loginId = new LLong(camera.getLoginId()); + List<ArdChannel> ardChannelList = new ArrayList<>(); + for (int i = 1; i < camera.getChanNum() + 1; i++) { + ArdChannel channel = new ArdChannel(); + NetSDKLib.AV_CFG_ChannelName av_cfg_channelName = new NetSDKLib.AV_CFG_ChannelName(); + boolean b = ConfigModule.GetNewDevConfig(loginId, i - 1, CFG_CMD_CHANNELTITLE, av_cfg_channelName); + if (!b) { + log.error("鑾峰彇閰嶇疆澶辫触,璇风◢鍚庨噸璇�" + getErrorCodePrint()); + // return AjaxResult.warn(ErrorCode.getErrorCode(LoginModule.netsdk.CLIENT_GetLastError())); + } + String chanName = ""; + try { + chanName = new String(av_cfg_channelName.szName, "GBK").trim(); + } catch (UnsupportedEncodingException e) { + e.printStackTrace(); + } + channel.setName(chanName.equals("") ? "閫氶亾" + i : chanName); + channel.setDeviceId(camera.getId()); + channel.setChanNo(i); + if (camera.getGdtype().equals("2")) { + //NVR杩囨护涓嶅湪绾跨殑閫氶亾 + if (!ConfigModule.queryCameraState(loginId, camera.getChanNum(), i)) { + continue; + } + } + ardChannelList.add(channel); + ardChannelService.insertArdChannel(channel); + } + return ardChannelList; } /** @@ -758,10 +761,6 @@ return result; } - @Override - public List<ArdChannel> getIPChannelInfo(ArdCameras camera) { - return null; - } /** * 寮曞鐩爣浣嶇疆 diff --git a/ard-work/src/main/java/com/ruoyi/utils/sdk/hiksdk/lib/LoginResultCallBack.java b/ard-work/src/main/java/com/ruoyi/utils/sdk/hiksdk/lib/LoginResultCallBack.java index 40511ea..8e05ebe 100644 --- a/ard-work/src/main/java/com/ruoyi/utils/sdk/hiksdk/lib/LoginResultCallBack.java +++ b/ard-work/src/main/java/com/ruoyi/utils/sdk/hiksdk/lib/LoginResultCallBack.java @@ -53,7 +53,7 @@ camera.setChanNum((int) lpDeviceinfo.byChanNum); camera.setStartDChan((int) lpDeviceinfo.byStartDChan); //鑾峰彇鏈�鏂伴�氶亾 - List<ArdChannel> cameraChannelList = hikClientService.getIPChannelInfo(camera); + List<ArdChannel> cameraChannelList = hikClientService.getChannels(camera); if (cameraChannelList.size() > 0) { camera.setChanNum(cameraChannelList.size()); //娣诲姞閫氶亾 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 cd34865..fd88459 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 @@ -138,15 +138,11 @@ } } - if (GlobalVariable.loginMap.containsKey(camera.getId())) { - GlobalVariable.loginMap.remove(camera.getId()); - } - - //鍒犻櫎绠$悊閫氶亾 - ardChannelService.deleteArdChannelByDeviceId(camera.getId()); +// if (GlobalVariable.loginMap.containsKey(camera.getId())) { +// GlobalVariable.loginMap.remove(camera.getId()); +// } GlobalVariable.loginMap.put(camera.getId(), lUserID); GlobalVariable.loginCameraMap.put(lUserID, camera); - camera.setLoginId(lUserID); camera.setState("1"); int chanNum = m_strDeviceInfo.struDeviceV30.byChanNum; @@ -158,14 +154,10 @@ camera.setChanNum(chanNum); camera.setStartDChan(startDchan); //鑾峰彇鏈�鏂伴�氶亾 - List<ArdChannel> cameraChannelList = getIPChannelInfo(camera); + List<ArdChannel> cameraChannelList = getChannels(camera); if (cameraChannelList.size() > 0) { camera.setChannelList(cameraChannelList); camera.setChanNum(cameraChannelList.size()); - for (ArdChannel channel : cameraChannelList) { - channel.setId(IdUtils.simpleUUID()); - ardChannelService.insertArdChannel(channel); - } ardCamerasService.updateArdCameras(camera); //娣诲姞鍒版祦濯掍綋 addVtdu(camera); @@ -252,15 +244,11 @@ } } } - if (GlobalVariable.loginMap.containsKey(camera.getId())) { - GlobalVariable.loginMap.remove(camera.getId()); - } - - //鍒犻櫎绠$悊閫氶亾 - ardChannelService.deleteArdChannelByDeviceId(camera.getId()); +// if (GlobalVariable.loginMap.containsKey(camera.getId())) { +// GlobalVariable.loginMap.remove(camera.getId()); +// } GlobalVariable.loginMap.put(camera.getId(), lUserID); GlobalVariable.loginCameraMap.put(lUserID, camera); - camera.setLoginId(lUserID); camera.setState("1"); int chanNum = m_strDeviceInfo.struDeviceV30.byChanNum; @@ -271,21 +259,15 @@ } camera.setChanNum(chanNum); camera.setStartDChan(startDchan); - //鑾峰彇鏈�鏂伴�氶亾 - List<ArdChannel> cameraChannelList = getIPChannelInfo(camera); + List<ArdChannel> cameraChannelList = getChannels(camera); if (cameraChannelList.size() > 0) { camera.setChannelList(cameraChannelList); camera.setChanNum(cameraChannelList.size()); - for (ArdChannel channel : cameraChannelList) { - channel.setId(IdUtils.simpleUUID()); - ardChannelService.insertArdChannel(channel); - } ardCamerasService.updateArdCameras(camera); //娣诲姞鍒版祦濯掍綋 addVtdu(camera); } - //鍒涘缓寮曞闃熷垪 createGuideQueue(camera); return AjaxResult.success("璁惧鐧诲綍鎴愬姛"); @@ -297,12 +279,14 @@ //鍒涘缓寮曞闃熷垪 private void createGuideQueue(ArdCameras 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); - //鍚姩闃熷垪澶勭悊鍣� - queueHandler.process(camera.getId()); + if (camera.getGdtype().equals("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()); + } } } @@ -1259,7 +1243,7 @@ @Override public AjaxResult controlDefogcfg(CameraCmd cmd) { String cameraId = cmd.getCameraId(); - Integer chanNo=cmd.getChanNo(); + Integer chanNo = cmd.getChanNo(); boolean enable = cmd.isEnable(); if (!GlobalVariable.loginMap.containsKey(cameraId)) { return AjaxResult.warn("璁惧鏈櫥褰�"); @@ -1845,10 +1829,12 @@ } //鑾峰彇IP閫氶亾 - public List<ArdChannel> getIPChannelInfo(ArdCameras camera) { + public List<ArdChannel> getChannels(ArdCameras camera) { //鑾峰彇閫氶亾 List<ArdChannel> channelList = new ArrayList<>(); try { + //鍒犻櫎绠$悊閫氶亾 + ardChannelService.deleteArdChannelByDeviceId(camera.getId()); IntByReference ibrBytesReturned = new IntByReference(0);//鑾峰彇IP鎺ュ叆閰嶇疆鍙傛暟 HCNetSDK.NET_DVR_IPPARACFG_V40 m_strIpparaCfg = new HCNetSDK.NET_DVR_IPPARACFG_V40(); m_strIpparaCfg.write(); @@ -1858,7 +1844,7 @@ m_strIpparaCfg.read(); //log.debug("璧峰鏁板瓧閫氶亾鍙凤細" + m_strIpparaCfg.dwStartDChan);//m_strIpparaCfg.dwDChanNum for (int iChannum = 0; iChannum < camera.getChanNum(); iChannum++) { - ArdChannel ardChannel = new ArdChannel(); + ArdChannel channel = new ArdChannel(); int chanNo = iChannum + camera.getStartDChan(); HCNetSDK.NET_DVR_PICCFG_V40 strPicCfg = new HCNetSDK.NET_DVR_PICCFG_V40(); strPicCfg.dwSize = strPicCfg.size(); @@ -1876,22 +1862,21 @@ 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; + int channelNo = m_strIpparaCfg.struStreamMode[iChannum].uGetStream.struChanInfo.byIPID + m_strIpparaCfg.struStreamMode[iChannum].uGetStream.struChanInfo.byIPIDHigh * 256; String channelName = new String(strPicCfg.sChanName, "GBK").trim(); channelName = channelName.equals("") ? "閫氶亾" + chanNo : channelName; - ardChannel.setDeviceId(camera.getId()); - ardChannel.setName(channelName); - ardChannel.setChanNo(chanNo); + channel.setDeviceId(camera.getId()); + channel.setName(channelName); + channel.setChanNo(chanNo); if (camera.getGdtype().equals("3") || camera.getGdtype().equals("2")) { - //NVR鍙幏鍙栧湪绾块�氶亾 - if (m_strIpparaCfg.struStreamMode[iChannum].uGetStream.struChanInfo.byEnable == 1) { - //log.debug("IP閫氶亾" + channum + "鍦ㄧ嚎"); - channelList.add(ardChannel); + //NVR杩囨护绂荤嚎閫氶亾 + if (m_strIpparaCfg.struStreamMode[iChannum].uGetStream.struChanInfo.byEnable != 1) { + continue; } - } else { - channelList.add(ardChannel); } + channelList.add(channel); } + ardChannelService.insertArdChannel(channel); } } catch (Exception ex) { log.error("鑾峰彇IP閫氶亾寮傚父:" + ex.getMessage()); -- Gitblit v1.9.3