From a20bc4abb2b913bf03dda03a45d835da090cf9aa Mon Sep 17 00:00:00 2001 From: liusuyi <13324259@qq.com> Date: 星期三, 27 十二月 2023 22:18:11 +0800 Subject: [PATCH] 雷达通过ip和端口关联 --- src/main/java/com/ard/utils/sdk/hiksdk/service/impl/HikClientUtil.java | 272 ++++++++++++++++-------------------------------------- 1 files changed, 80 insertions(+), 192 deletions(-) diff --git a/src/main/java/com/ard/utils/sdk/hiksdk/service/impl/HikClientUtil.java b/src/main/java/com/ard/utils/sdk/hiksdk/service/impl/HikClientUtil.java index f98eddc..ad6ca50 100644 --- a/src/main/java/com/ard/utils/sdk/hiksdk/service/impl/HikClientUtil.java +++ b/src/main/java/com/ard/utils/sdk/hiksdk/service/impl/HikClientUtil.java @@ -4,10 +4,12 @@ import com.ard.alarm.camera.domain.CameraCmd; import com.ard.alarm.external.domain.ArdEquipExternal; import com.ard.utils.minio.MinioUtil; +import com.ard.utils.sdk.hiksdk.domain.ChannelInfo; import com.ard.utils.util.ByteUtils; import com.ard.utils.sdk.hiksdk.common.GlobalVariable; import com.ard.utils.sdk.hiksdk.domain.DeviceInfo; import com.ard.utils.sdk.hiksdk.util.hikSdkUtil.HCNetSDK; +import com.sun.jna.NativeLong; import com.sun.jna.Platform; import com.sun.jna.Pointer; import com.sun.jna.ptr.IntByReference; @@ -16,7 +18,6 @@ import java.io.*; import java.nio.ByteBuffer; import java.util.*; - /** * @ClassName: hikClientServiceImpl @@ -32,58 +33,11 @@ public static HCNetSDK.FMSGCallBack_V31 fMSFCallBack_V31; /** - * @鎻忚堪 娉ㄥ唽鐧诲綍 鍙敮鎸佸悓姝ョ櫥闄嗭紝涓斿畼鏂逛笉寤鸿鐩存帴鍦ㄦ鎺ュ彛涓嬪啓鑰楁椂鎿嶄綔 - * @鍙傛暟 [dvrLogin] - * @杩斿洖鍊� java.lang.Integer - * @鍒涘缓浜� 鍒樿嫃涔� - * @鍒涘缓鏃堕棿 2023/1/17 16:12 - * @淇敼浜哄拰鍏跺畠淇℃伅 - */ - public ArdCameras login1(ArdCameras camera) { - // 鍒濆鍖� - if (!hCNetSDK.NET_DVR_Init()) { - log.error("SDK鍒濆鍖栧け璐�"); - } - - //鎵撳嵃娴峰悍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 { - hCNetSDK.NET_DVR_SetLogToFile(3, "/home/ardLog/hiklog", true); - } - String m_sDeviceIP = camera.getIp(); - String m_sUsername = camera.getUsername(); - String m_sPassword = camera.getPassword(); - short m_sPort = camera.getPort().shortValue(); - //璁剧疆杩炴帴鏃堕棿涓庨噸杩炴椂闂� - hCNetSDK.NET_DVR_SetConnectTime(2000, 1); - hCNetSDK.NET_DVR_SetReconnect(100000, true); - - //璁惧淇℃伅, 杈撳嚭鍙傛暟 - HCNetSDK.NET_DVR_DEVICEINFO_V30 m_strDeviceInfo = new HCNetSDK.NET_DVR_DEVICEINFO_V30(); - int lUserID = hCNetSDK.NET_DVR_Login_V30(m_sDeviceIP, m_sPort, m_sUsername, m_sPassword, m_strDeviceInfo); - if (lUserID < 0) { - //閲婃斁SDK璧勬簮 - hCNetSDK.NET_DVR_Cleanup(); - camera.setLoginId(-1); - } - if (GlobalVariable.loginMap.containsKey(camera.getId())) { - GlobalVariable.loginMap.remove(camera.getId()); - } - GlobalVariable.loginMap.put(camera.getId(), lUserID); - - camera.setLoginId(lUserID); - camera.setChannel((int) m_strDeviceInfo.byStartChan); - return camera; - } - - /** * @鎻忚堪 娉ㄥ唽鐧诲綍 闆嗘垚浜嶯ET_DVR_Login_V30锛屾敮鎸佸悓姝ュ拰寮傛鐧诲綍 * @鍒涘缓浜� 鍒樿嫃涔� * @鍒涘缓鏃堕棿 2023/1/17 16:12 */ - public static void login(DeviceInfo deviceInfo) { + public static int login(DeviceInfo deviceInfo) { // 鍒濆鍖� if (!hCNetSDK.NET_DVR_Init()) { log.error("SDK鍒濆鍖栧け璐�"); @@ -94,6 +48,7 @@ struNET_DVR_LOCAL_GENERAL_CFG.write(); Pointer pStrNET_DVR_LOCAL_GENERAL_CFG = struNET_DVR_LOCAL_GENERAL_CFG.getPointer(); hCNetSDK.NET_DVR_SetSDKLocalCfg(17, pStrNET_DVR_LOCAL_GENERAL_CFG); + //鎵撳嵃娴峰悍sdk鏃ュ織 if (Platform.isWindows()) { String WIN_PATH = System.getProperty("user.dir") + File.separator + "ardLog" + File.separator + "logs" + File.separator; @@ -127,11 +82,12 @@ //寮傛鐧诲綍鍥炶皟 m_strLoginInfo.cbLoginResult = new LoginResultCallBack(deviceInfo); m_strLoginInfo.write(); - int i = hCNetSDK.NET_DVR_Login_V40(m_strLoginInfo, m_strDeviceInfo); - if (i < 0) { + int loginId = hCNetSDK.NET_DVR_Login_V40(m_strLoginInfo, m_strDeviceInfo); + if (loginId < 0) { int errorCode = hCNetSDK.NET_DVR_GetLastError(); log.error("鐧诲綍寮傚父锛�" + errorCode); } + return loginId; } /** @@ -174,12 +130,13 @@ info.setPort(camera.getPort()); info.setUsername(camera.getUsername()); info.setPassword(camera.getPassword()); + info.setDeviceType(camera.getGdType()); login(info); String key = camera.getIp() + ":" + camera.getPort(); GlobalVariable.cameraMap.put(key, camera); } } catch (Exception ex) { - log.error("鍒濆鍖栫櫥褰曠浉鏈哄紓甯革細" + ex.getMessage()); + log.error("鐧诲綍鐩告満寮傚父锛�" + ex.getMessage()); } } @@ -203,147 +160,10 @@ GlobalVariable.cameraMap.remove(key); } } catch (Exception ex) { - log.error("鍒濆鍖栫櫥褰曠浉鏈哄紓甯革細" + ex.getMessage()); + log.error("娉ㄩ攢鐩告満寮傚父锛�" + ex.getMessage()); } } - /** - * @鎻忚堪 鐧诲綍鎵�鏈夋姤璀︿富鏈� - * @鍒涘缓浜� 鍒樿嫃涔� - * @鍒涘缓鏃堕棿 2023/2/3 10:10 - */ - public static void loginAllAlarmHost(List<ArdEquipExternal> ardEquipExternals) { - try { - for (ArdEquipExternal alarmHost : ardEquipExternals) { - Thread.sleep(100); - DeviceInfo info = new DeviceInfo(); - info.setDeviceId(alarmHost.getId()); - info.setIp(alarmHost.getIp()); - info.setPort(alarmHost.getPort()); - info.setUsername(alarmHost.getUsername()); - info.setPassword(alarmHost.getPassword()); - login(info); -// String key=alarmHost.getIp()+":"+alarmHost.getPort(); -// GlobalVariable.alarmHostMap.put(key, alarmHost); - } - } catch (Exception ex) { - log.error("鐧诲綍鎵�鏈夋姤璀︿富鏈哄紓甯革細" + ex.getMessage()); - } - } - - /** - * @鎻忚堪 鐧诲嚭鎵�鏈夋姤璀︿富鏈� - * @鍒涘缓浜� 鍒樿嫃涔� - * @鍒涘缓鏃堕棿 2023/2/3 10:10 - */ - public static void logoutAllAlarmHost(List<ArdEquipExternal> ardEquipExternals) { - try { - for (ArdEquipExternal alarmHost : ardEquipExternals) { - Thread.sleep(100); - DeviceInfo info = new DeviceInfo(); - info.setDeviceId(alarmHost.getId()); - info.setIp(alarmHost.getIp()); - info.setPort(alarmHost.getPort()); - info.setUsername(alarmHost.getUsername()); - info.setPassword(alarmHost.getPassword()); - logout(info); -// String key=alarmHost.getIp()+":"+alarmHost.getPort(); -// GlobalVariable.alarmHostMap.remove(key); - } - } catch (Exception ex) { - log.error("鐧诲嚭鎵�鏈夋姤璀︿富鏈哄紓甯革細" + ex.getMessage()); - } - } - - /** - * @鎻忚堪 鐧诲綍鎵�鏈夐棬绂佷富鏈� - * @鍒涘缓浜� 鍒樿嫃涔� - * @鍒涘缓鏃堕棿 2023/2/3 10:10 - */ - public static void loginAllAccessControlHost(List<ArdEquipExternal> ardEquipExternals) { - try { - for (ArdEquipExternal accessControlHost : ardEquipExternals) { - Thread.sleep(100); - DeviceInfo info = new DeviceInfo(); - info.setDeviceId(accessControlHost.getId()); - info.setIp(accessControlHost.getIp()); - info.setPort(accessControlHost.getPort()); - info.setUsername(accessControlHost.getUsername()); - info.setPassword(accessControlHost.getPassword()); - login(info); - } - } catch (Exception ex) { - log.error("鐧诲綍鎵�鏈夐棬绂佷富鏈哄紓甯革細" + ex.getMessage()); - } - } - - /** - * @鎻忚堪 鐧诲嚭鎵�鏈夐棬绂佷富鏈� - * @鍒涘缓浜� 鍒樿嫃涔� - * @鍒涘缓鏃堕棿 2023/2/3 10:10 - */ - public static void logoutAllAccessControlHost(List<ArdEquipExternal> ardEquipExternals) { - try { - for (ArdEquipExternal accessControlHost : ardEquipExternals) { - Thread.sleep(100); - DeviceInfo info = new DeviceInfo(); - info.setDeviceId(accessControlHost.getId()); - info.setIp(accessControlHost.getIp()); - info.setPort(accessControlHost.getPort()); - info.setUsername(accessControlHost.getUsername()); - info.setPassword(accessControlHost.getPassword()); - logout(info); - } - } catch (Exception ex) { - log.error("鐧诲嚭鎵�鏈夐棬绂佷富鏈哄紓甯革細" + ex.getMessage()); - } - } - - /** - * @鎻忚堪 鐧诲綍鎵�鏈夎秴鑴� - * @鍒涘缓浜� 鍒樿嫃涔� - * @鍒涘缓鏃堕棿 2023/2/3 10:10 - */ - public static void loginAllSuperBrainHost(List<ArdEquipExternal> ardEquipExternals) { - try { - for (ArdEquipExternal superBrainHost : ardEquipExternals) { - Thread.sleep(100); - DeviceInfo info = new DeviceInfo(); - info.setDeviceId(superBrainHost.getId()); - info.setIp(superBrainHost.getIp()); - info.setPort(superBrainHost.getPort()); - info.setUsername(superBrainHost.getUsername()); - info.setPassword(superBrainHost.getPassword()); - login(info); - } - } catch (Exception ex) { - log.error("鐧诲綍鎵�鏈夎秴鑴戝紓甯革細" + ex.getMessage()); - } - } - - /** - * @鎻忚堪 鐧诲嚭鎵�鏈夎秴鑴� - * @鍒涘缓浜� 鍒樿嫃涔� - * @鍒涘缓鏃堕棿 2023/2/3 10:10 - */ - public static void logoutAllSuperBrainHost(List<ArdEquipExternal> ardEquipExternals) { - try { - for (ArdEquipExternal superBrainHost : ardEquipExternals) { - Thread.sleep(100); - DeviceInfo info = new DeviceInfo(); - info.setDeviceId(superBrainHost.getId()); - info.setIp(superBrainHost.getIp()); - info.setPort(superBrainHost.getPort()); - info.setUsername(superBrainHost.getUsername()); - info.setPassword(superBrainHost.getPassword()); - logout(info); -// String key=accessControlHost.getIp()+":"+accessControlHost.getPort(); -// GlobalVariable.accessHostMap.remove(key); - } - } catch (Exception ex) { - log.error("鐧诲嚭鎵�鏈夎秴鑴戝紓甯革細" + ex.getMessage()); - } - } /** * @鎻忚堪 鐧诲綍鎵�鏈夊鑱旇澶� * @鍒涘缓浜� 鍒樿嫃涔� @@ -365,6 +185,7 @@ log.error("鐧诲綍鎵�鏈夊鑱旇澶囧紓甯革細" + ex.getMessage()); } } + /** * @鎻忚堪 鐧诲嚭鎵�鏈夊鑱旇澶� * @鍒涘缓浜� 鍒樿嫃涔� @@ -383,10 +204,9 @@ logout(info); } } catch (Exception ex) { - log.error("鐧诲嚭鎵�鏈夎秴鑴戝紓甯革細" + ex.getMessage()); + log.error("鐧诲嚭鎵�鏈夊鑱旇澶囧紓甯革細" + ex.getMessage()); } } - /** @@ -420,6 +240,11 @@ m_strAlarmInfo.byDeployType = 1; //浜鸿劯鎶ヨ淇℃伅绫诲瀷锛�1- 浜鸿劯渚︽祴鎶ヨ 0- 浜鸿劯鎶撴媿鎶ヨ m_strAlarmInfo.byFaceAlarmDetection = 0; + //鎶ヨ鍥剧墖鏁版嵁绫诲瀷锛屾寜浣嶈〃绀猴細 + //bit0- 浜鸿劯鎶撴媿(鎶ヨ绫诲瀷涓篊OMM_UPLOAD_FACESNAP_RESULT)涓浘鐗囨暟鎹笂浼犵被鍨嬶細0- 浜岃繘鍒朵紶杈擄紝1- URL浼犺緭 + //bit1- EVENT_JSON(鎶ヨ绫诲瀷涓篊OMM_VCA_ALARM)涓浘鐗囨暟鎹笂浼犵被鍨嬶細0- 浜岃繘鍒朵紶杈擄紝1- URL浼犺緭 + //bit2- 浜鸿劯姣斿(鎶ヨ绫诲瀷涓篊OMM_SNAP_MATCH_ALARM)涓浘鐗囨暟鎹笂浼犵被鍨嬶細0- 浜岃繘鍒朵紶杈擄紝1- URL浼犺緭 + m_strAlarmInfo.byAlarmTypeURL = 0; m_strAlarmInfo.write(); // 甯冮槻鎴愬姛锛岃繑鍥炲竷闃叉垚鍔熺殑鏁版嵁浼犺緭閫氶亾鍙� lAlarmHandle = hCNetSDK.NET_DVR_SetupAlarmChan_V41(lUserID, m_strAlarmInfo); @@ -535,4 +360,67 @@ return name; } + //鑾峰彇IP閫氶亾 + public static void getIPChannelInfo(String deviceId, int iUserID) { + try { + GlobalVariable.deviceChanMap.remove(deviceId); + List<ChannelInfo> channelInfoList = new ArrayList<>(); + int chanNum = 64; + 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(iUserID, HCNetSDK.NET_DVR_GET_IPPARACFG_V40, 0, lpIpParaConfig, m_strIpparaCfg.size(), ibrBytesReturned); + m_strIpparaCfg.read(); + //log.debug("璧峰鏁板瓧閫氶亾鍙凤細" + m_strIpparaCfg.dwStartDChan); + for (int iChannum = 0; iChannum < chanNum; iChannum++) { + int channum = iChannum + m_strIpparaCfg.dwStartDChan; + 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(iUserID, HCNetSDK.NET_DVR_GET_PICCFG_V40, lChannel.intValue(), + pStrPicCfg, strPicCfg.size(), pInt); +// if (b_GetPicCfg == false) { +// System.out.println("鑾峰彇鍥惧儚鍙傛暟澶辫触锛岄敊璇爜锛�" + 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(); + + //log.debug("--------------绗�" + (iChannum + 1) + "涓�氶亾------------------"); + int channel = m_strIpparaCfg.struStreamMode[iChannum].uGetStream.struChanInfo.byIPID + m_strIpparaCfg.struStreamMode[iChannum].uGetStream.struChanInfo.byIPIDHigh * 256; + //log.debug("channel:" + channel); + if (channel > 0) { + //log.debug("name锛� " + new String(strPicCfg.sChanName, "GBK").trim()); + //log.debug("ip锛� " + new String(m_strIpparaCfg.struIPDevInfo[channel - 1].struIP.sIpV4).trim()); + //log.debug("port锛� " + m_strIpparaCfg.struIPDevInfo[channel - 1].wDVRPort); + String name = new String(strPicCfg.sChanName, "GBK").trim(); + String ip = new String(m_strIpparaCfg.struIPDevInfo[channel - 1].struIP.sIpV4).trim(); + int port = m_strIpparaCfg.struIPDevInfo[channel - 1].wDVRPort; + ChannelInfo channelInfo = new ChannelInfo(); + channelInfo.setIp(ip); + channelInfo.setPort(port); + channelInfo.setName(name); + channelInfoList.add(channelInfo); + } + if (m_strIpparaCfg.struStreamMode[iChannum].uGetStream.struChanInfo.byEnable == 1) { + //log.debug("IP閫氶亾" + channum + "鍦ㄧ嚎"); + } else { + //log.debug("IP閫氶亾" + channum + "涓嶅湪绾�"); + } + } + } + if (channelInfoList.size() > 0) { + GlobalVariable.deviceChanMap.put(deviceId, channelInfoList); + } + } catch (Exception ex) { + log.error("鑾峰彇IP閫氶亾寮傚父锛�" + ex.getMessage()); + } + } } \ No newline at end of file -- Gitblit v1.9.3