ard-alarm.iml
@@ -97,7 +97,7 @@ <orderEntry type="library" name="Maven: org.springframework:spring-beans:5.3.27" level="project" /> <orderEntry type="library" name="Maven: org.springframework:spring-webmvc:5.3.27" level="project" /> <orderEntry type="library" name="Maven: org.springframework:spring-expression:5.3.27" level="project" /> <orderEntry type="library" name="Maven: net.java.jna:jna:1.0.0" level="project" /> <orderEntry type="library" name="Maven: net.java.dev.jna:jna:5.4.0" level="project" /> <orderEntry type="library" name="Maven: net.java.examples:examples:1.0.0" level="project" /> <orderEntry type="library" name="Maven: com.baomidou:mybatis-plus-generator:3.5.3.1" level="project" /> <orderEntry type="library" name="Maven: org.apache.velocity:velocity-engine-core:2.0" level="project" /> lib/ClientDemoDll/ReadMe.txt
ÎļþÒÑɾ³ý lib/ClientDemoDll/calib.dllBinary files differ
lib/ClientDemoDll/iconv.dllBinary files differ
lib/ClientDemoDll/libcrypto-1_1-x64.dllBinary files differ
lib/ClientDemoDll/libssl-1_1-x64.dllBinary files differ
lib/ClientDemoDll/libxml2.dllBinary files differ
lib/ClientDemoDll/zlib1.dllBinary files differ
lib/OpenAL32.dllBinary files differ
pom.xml
@@ -50,10 +50,11 @@ <!--海康å½åæºäºæ¬¡å¼åä¾èµjarå --> <dependency> <groupId>net.java.jna</groupId> <groupId>net.java.dev.jna</groupId> <artifactId>jna</artifactId> <version>1.0.0</version> <version>5.4.0</version> </dependency> <dependency> <groupId>net.java.examples</groupId> <artifactId>examples</artifactId> src/main/java/com/ard/alarm/camera/service/impl/ArdCamerasServiceImpl.java
@@ -42,8 +42,6 @@ //åå§åæ§è¡ @Override public void run(ApplicationArguments args) { //å è½½sdkåº HikClientUtil.loadHCNetSDKLib(); //è·åå°å çµå°è¯ç»å½ ardCameraList = selectArdCamerasList(new ArdCameras()); HikClientUtil.loginAllCamera(ardCameraList); src/main/java/com/ard/utils/hiksdk/service/impl/HikClientUtil.java
@@ -29,50 +29,9 @@ **/ @Slf4j(topic = "hikSdk") public class HikClientUtil { private static HCNetSDK hCNetSDK; public static HCNetSDK hCNetSDK = HCNetSDK.hCNetSDK; // æ¥è¦åè°å½æ°å®ç° public static HCNetSDK.FMSGCallBack_V31 fMSFCallBack_V31; public static void loadHCNetSDKLib() { try { log.debug("å¼å§å è½½sdkåºæä»¶è·¯å¾"); if (Platform.isWindows()) { String WIN_PATH = System.getProperty("user.dir") + File.separator + "lib" + File.separator + "HCNetSDK.dll"; log.debug("å½åWindowså¹³å°çsdkåºè·¯å¾ï¼" + WIN_PATH); hCNetSDK = (HCNetSDK) Native.loadLibrary(WIN_PATH, HCNetSDK.class); } else { log.debug("Linuxå¹³å°"); String LINUX_PATH = System.getProperty("user.dir") + File.separator + "hiklib" + File.separator + "libhcnetsdk.so"; log.debug("å½åLinuxå¹³å°çsdkåºè·¯å¾ï¼" + LINUX_PATH); hCNetSDK = (HCNetSDK) Native.loadLibrary(LINUX_PATH, HCNetSDK.class); //设置HCNetSDKComç»ä»¶åºæå¨è·¯å¾ //libhcnetsdk.so String strPathCom = "/home/hiklib"; HCNetSDK.NET_DVR_LOCAL_SDK_PATH struComPath = new HCNetSDK.NET_DVR_LOCAL_SDK_PATH(); System.arraycopy(strPathCom.getBytes(), 0, struComPath.sPath, 0, strPathCom.length()); struComPath.write(); hCNetSDK.NET_DVR_SetSDKInitCfg(2, struComPath.getPointer()); //设置libcrypto.soæå¨è·¯å¾ HCNetSDK.BYTE_ARRAY ptrByteArrayCrypto = new HCNetSDK.BYTE_ARRAY(256); String strPathCrypto = "/home/hiklib/libcrypto.so.1.1"; System.arraycopy(strPathCrypto.getBytes(), 0, ptrByteArrayCrypto.byValue, 0, strPathCrypto.length()); ptrByteArrayCrypto.write(); hCNetSDK.NET_DVR_SetSDKInitCfg(3, ptrByteArrayCrypto.getPointer()); //设置libssl.soæå¨è·¯å¾ HCNetSDK.BYTE_ARRAY ptrByteArraySsl = new HCNetSDK.BYTE_ARRAY(256); String strPathSsl = "/home/hiklib/libssl.so.1.1"; System.arraycopy(strPathSsl.getBytes(), 0, ptrByteArraySsl.byValue, 0, strPathSsl.length()); ptrByteArraySsl.write(); hCNetSDK.NET_DVR_SetSDKInitCfg(4, ptrByteArraySsl.getPointer()); } } catch (Exception ex) { log.error("å è½½åºæä»¶å¼å¸¸ï¼" + ex.getMessage()); } } /** * @æè¿° 注åç»å½ åªæ¯æåæ¥ç»éï¼ä¸å®æ¹ä¸å»ºè®®ç´æ¥å¨æ¤æ¥å£ä¸åèæ¶æä½ src/main/java/com/ard/utils/hiksdk/util/hikSdkUtil/HCNetSDK.java
@@ -1,5 +1,6 @@ package com.ard.utils.hiksdk.util.hikSdkUtil; import com.ard.utils.sdk.LibraryLoad; import com.sun.jna.*; import com.sun.jna.examples.win32.W32API; import com.sun.jna.examples.win32.W32API.HWND; @@ -13,7 +14,7 @@ //SDKæ¥å£è¯´æ,HCNetSDK.dll public interface HCNetSDK extends Library { HCNetSDK hCNetSDK = Native.load(LibraryLoad.getLoadLibrary("sdk\\HCNetSDK"), HCNetSDK.class); /*** å®å®ä¹ ***/ //常é src/main/java/com/ard/utils/sdk/DynamicParseUtil.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,127 @@ package com.ard.utils.sdk; import org.xml.sax.Attributes; import org.xml.sax.SAXException; import org.xml.sax.helpers.DefaultHandler; import javax.xml.parsers.ParserConfigurationException; import javax.xml.parsers.SAXParser; import javax.xml.parsers.SAXParserFactory; import java.io.IOException; import java.io.InputStream; import java.util.ArrayList; import java.util.Arrays; import java.util.HashMap; import java.util.List; /** * @author 47081 * @version 1.0 * @description * @date 2021/3/10 */ public class DynamicParseUtil { private DynamicLibParseHandler handler; private SAXParserFactory saxParserFactory; private SAXParser saxParser; /** * éé åç³»ç»å¨æåºå称大å°åä¸å,以ålibåç¼é æçæ¾ä¸å°åºçé®é¢ * * @param currentSystem å½åç³»ç»:win64,win32,linux64,linux32,mac64 * @param libName 卿åºåç§° * @return */ public String compareLibName(String currentSystem, String libName) { String dynamicLibName = libName; List<String> libs = handler.getLibsBySystem(currentSystem); if (currentSystem.toLowerCase().contains("win")) { return findLibs(libs, libName); } if (libName.startsWith("lib")) { dynamicLibName = libName.substring(3); } return findLibs(libs, dynamicLibName); } private String findLibs(List<String> libs, String libName) { for (String lib : libs) { if (libName.equalsIgnoreCase(lib)) { return lib; } } return ""; } public List<String> getLibsSystem(String system) { return handler.getLibsBySystem(system); } private DynamicParseUtil() throws ParserConfigurationException { // è·åSAXåæå¨çå·¥åå®ä¾ï¼ä¸é¨è´è´£å建SAXParseråæå¨ saxParserFactory = SAXParserFactory.newInstance(); // è·åSAXParseråæå¨çå®ä¾ try { saxParser = saxParserFactory.newSAXParser(); handler = new DynamicLibParseHandler(); } catch (Exception e) { e.printStackTrace(); } } public DynamicParseUtil(InputStream inputSteam) throws ParserConfigurationException, IOException, SAXException { this(); saxParser.parse(inputSteam, handler); } /** xmlè§£æhandler */ private class DynamicLibParseHandler extends DefaultHandler { private HashMap<String, List<String>> dynamics = new HashMap<String, List<String>>(); private List<String> systems = Arrays.asList("win64", "win32", "linux64", "linux32", "mac64", "linuxARM"); private String currentDynamicSystem; private List<String> libs; public List<String> getLibsBySystem(String system) { return dynamics.get(system); } @Override public void startDocument() throws SAXException { super.startDocument(); } @Override public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException { super.startElement(uri, localName, qName, attributes); if (systems.contains(qName)) { currentDynamicSystem = qName; if (libs == null) { libs = new ArrayList<String>(); } } } @Override public void endElement(String uri, String localName, String qName) throws SAXException { super.endElement(uri, localName, qName); if (systems.contains(qName)) { // ä¿åå°hashmapä¸ dynamics.put(currentDynamicSystem, libs); // æ¸ é¤libs libs = null; } } @Override public void characters(char[] ch, int start, int length) throws SAXException { super.characters(ch, start, length); String lib = new String(ch, start, length); if (!lib.trim().isEmpty()) { libs.add(lib); } } } } src/main/java/com/ard/utils/sdk/LibraryLoad.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,194 @@ package com.ard.utils.sdk; import lombok.extern.slf4j.Slf4j; import java.io.*; /** * @author 47081 * @version 1.0 * @description 卿åºå è½½ * @date 2020/11/14 */ @Slf4j(topic = "hikSdk") public class LibraryLoad { private static final String ARCH_WINDOWS = "win"; private static final String ARCH_LINUX = "linux"; private static final String ARCH_MAC = "mac"; private static final int PREFIX_64 = 64; private static final int PREFIX_32 = 32; private static final String PREFIX_ARM = "ARM"; private static final String EXTERNAL_WIN = ".dll"; private static final String EXTERNAL_LINUX = ".so"; private static final String EXTERNAL_MAC = ".dylib"; private static DynamicParseUtil dynamicParseUtil; /** å½å读åçç®å½ */ private static String currentFold; /** 卿åºéè¦åå ¥çç®å½ */ private static String EXTRACT_PATH = System.getProperty("java.io.tmpdir"); private static boolean written = false; /** * è®¾ç½®å¨æåºåå ¥çè·¯å¾,éç¨äºéè¦èªå®ä¹å 载路å¾çç¨æ· * * @param path 卿åºåå ¥çæä»¶å¤¹,ä»è¯¥æä»¶å¤¹ä¸å è½½sdkçå¨æåº */ public static void setExtractPath(String path) { EXTRACT_PATH = path; } public static String getExtractPath() { return EXTRACT_PATH; } /** 卿åºè·¯å¾ */ private static String INNER_PATH; // private static final String EXTERNAL_MAC = ".so"; private static String extractNetSDKLib(String libName) { return extractLibrary(libName); } public static String getLoadLibrary(String libraryName) { currentFold = getLibraryFold(); if (dynamicParseUtil == null) { try { dynamicParseUtil = new DynamicParseUtil( LibraryLoad.class.getClassLoader().getResourceAsStream("dynamic-lib-load.xml")); if (!written) { for (String libName : dynamicParseUtil.getLibsSystem(currentFold)) { extractLibrary(libName); } written = true; } } catch (Exception e) { e.printStackTrace(); } } String fullName = getLibraryName(libraryName); String path = EXTRACT_PATH; if (!(EXTRACT_PATH.endsWith("/") || EXTRACT_PATH.endsWith("\\"))) { path = EXTRACT_PATH + "/"; } log.debug("load library: " + path + fullName); return path + fullName; } /** * å°jarå éç卿åºåå ¥å°ç³»ç»ç¼åç®å½,使ç¨ç»å¯¹è·¯å¾å è½½å¨æåº * * @param libName * @return */ private static String extractLibrary(String libName) { return extractLibrary("/lib", libName); } /** * ç¸å¯¹è·¯å¾æä»¶å¤¹ * * @param relativePath ç¸å¯¹è·¯å¾ * @param libName 卿åºè·¯å¾ * @return */ private static String extractLibrary(String relativePath, String libName) { if (libName.trim().equals("")) { return ""; } String libFullName = getLibraryName(libName); String dir = getLibraryFold(); if (!(relativePath.endsWith("/") || relativePath.endsWith("\\"))) { relativePath = relativePath + "/"; } String fileName = relativePath + dir + "/" + libFullName; InputStream in = LibraryLoad.class.getResourceAsStream(fileName); BufferedInputStream reader; FileOutputStream writer; File extractedLibFile = null; try { if (in == null) { in = new FileInputStream(fileName); } String nativeTempDir = EXTRACT_PATH; if (!(nativeTempDir.endsWith("/") || nativeTempDir.endsWith("\\"))) { nativeTempDir = nativeTempDir + "/"; } extractedLibFile = new File(nativeTempDir + libFullName); reader = new BufferedInputStream(in); // æ£æ¥æä»¶å¤¹æ¯å¦åå¨ï¼å¦æä¸åå¨åå建 File parentDir = extractedLibFile.getParentFile(); if (!parentDir.exists()) { parentDir.mkdirs(); } writer = new FileOutputStream(extractedLibFile); byte[] buffer = new byte[1024]; while (true) { int len = reader.read(buffer); if (len == 0 || len == -1) break; writer.write(buffer, 0, len); } reader.close(); writer.close(); in.close(); } catch (Exception e) { log.error("dynamic file[ " + fileName + " ] not found in project.please ensure you need this library."); } return extractedLibFile != null ? extractedLibFile.getAbsolutePath() : ""; } /** * è·å卿åºå®æ´åç§° * * @param libName * @return */ private static String getLibraryName(String libName) { String dir = currentFold; String libPrefix = ""; String libExtension = EXTERNAL_WIN; if (!dir.contains("win")) { libPrefix = "lib"; if (dir.contains("linux")) { libExtension = EXTERNAL_LINUX; } else { // libExtension=".dylib"; libExtension = EXTERNAL_MAC; } } libName = dynamicParseUtil.compareLibName(currentFold, libName); // 卿åºä»¥libå¼å¤´ï¼å䏿·»å libåç¼ // 以libå¼å¤´çåºå䏿·»å libåç¼ return (libName.startsWith("lib") ? "" : libPrefix) + libName + libExtension; } // è·åç³»ç»å¯¹åºçå¨æåºæä»¶å¤¹ private static String getLibraryFold() { String osType; String osName = System.getProperty("os.name"); if (osName.toLowerCase().startsWith("linux")) { osType = ARCH_LINUX; } else if (osName.toLowerCase().startsWith("mac") || osName.toLowerCase().startsWith("darwin")) { osType = ARCH_MAC; } else if (osName.toLowerCase().startsWith("windows")) { osType = ARCH_WINDOWS; } else { osType = ""; } String arch = System.getProperty("os.arch"); arch = arch.toLowerCase().trim(); if ("i386".equals(arch) || "i686".equals(arch)||"x86".equals(arch)) { arch = PREFIX_32 + ""; } else if ("x86_64".equals(arch) || "amd64".equals(arch)) { arch = PREFIX_64 + ""; } else if (arch.startsWith("arm")) { arch = PREFIX_ARM + ""; } return osType + arch; } } src/main/resources/application-dev.yml
@@ -39,7 +39,7 @@ # mqtté ç½® mqtt: host: tcp://192.168.2.15:1883 clientId: client-227 clientId: client-2272 username: admin password: admin timeout: 100 @@ -64,11 +64,11 @@ # æ¥å¿ç级é ç½® logging: level: hikSdk: info hikSdk: debug mqtt: info netty: info external: info camera: info camera: debug tube: info digitization3: info stealAlarm: info src/main/resources/dynamic-lib-load.xml
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,39 @@ <?xml version="1.0" encoding="UTF-8" ?> <dynamic-lib> <win64> <lib>sdk\HCNetSDK</lib> <lib>sdk\HCCore</lib> <lib>sdk\GdiPlus</lib> <lib>sdk\hlog</lib> <lib>sdk\HmMerge</lib> <lib>sdk\/hpr</lib> <lib>sdk\HXVA</lib> <lib>sdk\libcrypto-1_1-x64</lib> <lib>sdk\libmmd</lib> <lib>sdk\libssl-1_1-x64</lib> <lib>sdk\MP_Render</lib> <lib>sdk\NPQos</lib> <lib>sdk\OpenAL32</lib> <lib>sdk\PlayCtrl</lib> <lib>sdk\SuperRender</lib> <lib>sdk\YUVProcess</lib> <lib>sdk\zlib1</lib> <lib>sdk\HCNetSDKCom\AnalyzeData</lib> <lib>sdk\HCNetSDKCom\AudioIntercom</lib> <lib>sdk\HCNetSDKCom\AudioRender</lib> <lib>sdk\HCNetSDKCom\HCAlarm</lib> <lib>sdk\HCNetSDKCom\HCCoreDevCfg</lib> <lib>sdk\HCNetSDKCom\HCDisplay</lib> <lib>sdk\HCNetSDKCom\HCGeneralCfgMgr</lib> <lib>sdk\HCNetSDKCom\HCGeneralCfgMgr</lib> <lib>sdk\HCNetSDKCom\HCIndustry</lib> <lib>sdk\HCNetSDKCom\HCPlayBack</lib> <lib>sdk\HCNetSDKCom\HCPreview</lib> <lib>sdk\HCNetSDKCom\HCVoiceTalk</lib> <lib>sdk\HCNetSDKCom\libiconv2</lib> <lib>sdk\HCNetSDKCom\OpenAL32</lib> <lib>sdk\HCNetSDKCom\StreamTransClient</lib> <lib>sdk\HCNetSDKCom\SystemTransform</lib> </win64> </dynamic-lib> src/main/resources/lib/win64/sdk/AudioRender.dllBinary files differ
src/main/resources/lib/win64/sdk/GdiPlus.dllBinary files differ
src/main/resources/lib/win64/sdk/HCCore.dllBinary files differ
src/main/resources/lib/win64/sdk/HCNetSDK.dllBinary files differ
src/main/resources/lib/win64/sdk/HCNetSDKCom/AnalyzeData.dllBinary files differ
src/main/resources/lib/win64/sdk/HCNetSDKCom/AudioIntercom.dllBinary files differ
src/main/resources/lib/win64/sdk/HCNetSDKCom/AudioRender.dllBinary files differ
src/main/resources/lib/win64/sdk/HCNetSDKCom/HCAlarm.dllBinary files differ
src/main/resources/lib/win64/sdk/HCNetSDKCom/HCAlarm.libBinary files differ
src/main/resources/lib/win64/sdk/HCNetSDKCom/HCCoreDevCfg.dllBinary files differ
src/main/resources/lib/win64/sdk/HCNetSDKCom/HCDisplay.dllBinary files differ
src/main/resources/lib/win64/sdk/HCNetSDKCom/HCGeneralCfgMgr.dllBinary files differ
src/main/resources/lib/win64/sdk/HCNetSDKCom/HCGeneralCfgMgr.libBinary files differ
src/main/resources/lib/win64/sdk/HCNetSDKCom/HCIndustry.dllBinary files differ
src/main/resources/lib/win64/sdk/HCNetSDKCom/HCPlayBack.dllBinary files differ
src/main/resources/lib/win64/sdk/HCNetSDKCom/HCPreview.dllBinary files differ
src/main/resources/lib/win64/sdk/HCNetSDKCom/HCPreview.libBinary files differ
src/main/resources/lib/win64/sdk/HCNetSDKCom/HCVoiceTalk.dllBinary files differ
src/main/resources/lib/win64/sdk/HCNetSDKCom/OpenAL32.dllBinary files differ
src/main/resources/lib/win64/sdk/HCNetSDKCom/StreamTransClient.dllBinary files differ
src/main/resources/lib/win64/sdk/HCNetSDKCom/SystemTransform.dllBinary files differ
src/main/resources/lib/win64/sdk/HCNetSDKCom/libiconv2.dllBinary files differ
src/main/resources/lib/win64/sdk/HXVA.dllBinary files differ
src/main/resources/lib/win64/sdk/HmMerge.dllBinary files differ
src/main/resources/lib/win64/sdk/ImageAlg.dllBinary files differ
src/main/resources/lib/win64/sdk/Infra.dllBinary files differ
src/main/resources/lib/win64/sdk/IvsDrawer.dllBinary files differ
src/main/resources/lib/win64/sdk/MP_Render.dllBinary files differ
src/main/resources/lib/win64/sdk/NPQos.dllBinary files differ
src/main/resources/lib/win64/sdk/OpenAL32.dllcopy from lib/HCNetSDKCom/OpenAL32.dll copy to src/main/resources/lib/win64/sdk/OpenAL32.dll Binary files differ
src/main/resources/lib/win64/sdk/PlayCtrl.dllBinary files differ
src/main/resources/lib/win64/sdk/RenderEngine.dllBinary files differ
src/main/resources/lib/win64/sdk/StreamConvertor.dllBinary files differ
src/main/resources/lib/win64/sdk/SuperRender.dllBinary files differ
src/main/resources/lib/win64/sdk/YUVProcess.dllBinary files differ
src/main/resources/lib/win64/sdk/avnetsdk.dllBinary files differ
src/main/resources/lib/win64/sdk/dhconfigsdk.dllBinary files differ
src/main/resources/lib/win64/sdk/dhnetsdk.dllBinary files differ
src/main/resources/lib/win64/sdk/dhplay.dllBinary files differ
src/main/resources/lib/win64/sdk/hlog.dllBinary files differ
src/main/resources/lib/win64/sdk/hpr.dllBinary files differ
src/main/resources/lib/win64/sdk/libcrypto-1_1-x64.dllBinary files differ
src/main/resources/lib/win64/sdk/libmmd.dllBinary files differ
src/main/resources/lib/win64/sdk/libssl-1_1-x64.dllBinary files differ
src/main/resources/lib/win64/sdk/zlib1.dllBinary files differ