‘liusuyi’
2023-10-25 c8b6f74ecc29022a7f52a2ee35aa25eef3312f39
海康动态链接库集成
已修改6个文件
已删除8个文件
已重命名35个文件
已添加12个文件
已复制1个文件
23794 ■■■■ 文件已修改
ard-alarm.iml 298 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lib/ClientDemoDll/ReadMe.txt 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lib/ClientDemoDll/calib.dll 补丁 | 查看 | 原始文档 | blame | 历史
lib/ClientDemoDll/iconv.dll 补丁 | 查看 | 原始文档 | blame | 历史
lib/ClientDemoDll/libcrypto-1_1-x64.dll 补丁 | 查看 | 原始文档 | blame | 历史
lib/ClientDemoDll/libssl-1_1-x64.dll 补丁 | 查看 | 原始文档 | blame | 历史
lib/ClientDemoDll/libxml2.dll 补丁 | 查看 | 原始文档 | blame | 历史
lib/ClientDemoDll/zlib1.dll 补丁 | 查看 | 原始文档 | blame | 历史
lib/OpenAL32.dll 补丁 | 查看 | 原始文档 | blame | 历史
pom.xml 331 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ard/alarm/camera/service/impl/ArdCamerasServiceImpl.java 266 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ard/utils/hiksdk/service/impl/HikClientUtil.java 931 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ard/utils/hiksdk/util/hikSdkUtil/HCNetSDK.java 21459 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ard/utils/sdk/DynamicParseUtil.java 127 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ard/utils/sdk/LibraryLoad.java 194 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/application-dev.yml 148 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/dynamic-lib-load.xml 39 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/lib/win64/sdk/AudioRender.dll 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/lib/win64/sdk/GdiPlus.dll 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/lib/win64/sdk/HCCore.dll 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/lib/win64/sdk/HCNetSDK.dll 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/lib/win64/sdk/HCNetSDKCom/AnalyzeData.dll 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/lib/win64/sdk/HCNetSDKCom/AudioIntercom.dll 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/lib/win64/sdk/HCNetSDKCom/AudioRender.dll 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/lib/win64/sdk/HCNetSDKCom/HCAlarm.dll 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/lib/win64/sdk/HCNetSDKCom/HCAlarm.lib 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/lib/win64/sdk/HCNetSDKCom/HCCoreDevCfg.dll 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/lib/win64/sdk/HCNetSDKCom/HCDisplay.dll 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/lib/win64/sdk/HCNetSDKCom/HCGeneralCfgMgr.dll 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/lib/win64/sdk/HCNetSDKCom/HCGeneralCfgMgr.lib 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/lib/win64/sdk/HCNetSDKCom/HCIndustry.dll 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/lib/win64/sdk/HCNetSDKCom/HCPlayBack.dll 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/lib/win64/sdk/HCNetSDKCom/HCPreview.dll 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/lib/win64/sdk/HCNetSDKCom/HCPreview.lib 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/lib/win64/sdk/HCNetSDKCom/HCVoiceTalk.dll 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/lib/win64/sdk/HCNetSDKCom/OpenAL32.dll 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/lib/win64/sdk/HCNetSDKCom/StreamTransClient.dll 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/lib/win64/sdk/HCNetSDKCom/SystemTransform.dll 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/lib/win64/sdk/HCNetSDKCom/libiconv2.dll 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/lib/win64/sdk/HXVA.dll 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/lib/win64/sdk/HmMerge.dll 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/lib/win64/sdk/ImageAlg.dll 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/lib/win64/sdk/Infra.dll 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/lib/win64/sdk/IvsDrawer.dll 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/lib/win64/sdk/MP_Render.dll 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/lib/win64/sdk/NPQos.dll 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/lib/win64/sdk/OpenAL32.dll 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/lib/win64/sdk/PlayCtrl.dll 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/lib/win64/sdk/RenderEngine.dll 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/lib/win64/sdk/StreamConvertor.dll 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/lib/win64/sdk/SuperRender.dll 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/lib/win64/sdk/YUVProcess.dll 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/lib/win64/sdk/avnetsdk.dll 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/lib/win64/sdk/dhconfigsdk.dll 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/lib/win64/sdk/dhnetsdk.dll 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/lib/win64/sdk/dhplay.dll 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/lib/win64/sdk/hlog.dll 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/lib/win64/sdk/hpr.dll 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/lib/win64/sdk/libcrypto-1_1-x64.dll 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/lib/win64/sdk/libmmd.dll 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/lib/win64/sdk/libssl-1_1-x64.dll 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/lib/win64/sdk/zlib1.dll 补丁 | 查看 | 原始文档 | blame | 历史
ard-alarm.iml
@@ -1,150 +1,150 @@
<?xml version="1.0" encoding="UTF-8"?>
<module org.jetbrains.idea.maven.project.MavenProjectsManager.isMavenModule="true" type="JAVA_MODULE" version="4">
  <component name="FacetManager">
    <facet type="web" name="Web">
      <configuration>
        <webroots />
        <sourceRoots>
          <root url="file://$MODULE_DIR$/src/main/java" />
          <root url="file://$MODULE_DIR$/src/main/resources" />
        </sourceRoots>
      </configuration>
    </facet>
    <facet type="Spring" name="Spring">
      <configuration />
    </facet>
  </component>
  <component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_1_8">
    <output url="file://$MODULE_DIR$/target/classes" />
    <output-test url="file://$MODULE_DIR$/target/test-classes" />
    <content url="file://$MODULE_DIR$">
      <sourceFolder url="file://$MODULE_DIR$/src/main/java" isTestSource="false" />
      <sourceFolder url="file://$MODULE_DIR$/src/main/resources" type="java-resource" />
      <sourceFolder url="file://$MODULE_DIR$/src/test/java" isTestSource="true" />
      <excludeFolder url="file://$MODULE_DIR$/target" />
    </content>
    <orderEntry type="inheritedJdk" />
    <orderEntry type="sourceFolder" forTests="false" />
    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter:2.7.12" level="project" />
    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot:2.7.12" level="project" />
    <orderEntry type="library" name="Maven: org.springframework:spring-context:5.3.27" level="project" />
    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-autoconfigure:2.7.12" level="project" />
    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-logging:2.7.12" level="project" />
    <orderEntry type="library" name="Maven: ch.qos.logback:logback-classic:1.2.12" level="project" />
    <orderEntry type="library" name="Maven: ch.qos.logback:logback-core:1.2.12" level="project" />
    <orderEntry type="library" name="Maven: org.apache.logging.log4j:log4j-to-slf4j:2.17.2" level="project" />
    <orderEntry type="library" name="Maven: org.apache.logging.log4j:log4j-api:2.17.2" level="project" />
    <orderEntry type="library" name="Maven: org.slf4j:jul-to-slf4j:1.7.36" level="project" />
    <orderEntry type="library" name="Maven: jakarta.annotation:jakarta.annotation-api:1.3.5" level="project" />
    <orderEntry type="library" name="Maven: org.springframework:spring-core:5.3.27" level="project" />
    <orderEntry type="library" name="Maven: org.springframework:spring-jcl:5.3.27" level="project" />
    <orderEntry type="library" name="Maven: org.yaml:snakeyaml:1.30" level="project" />
    <orderEntry type="library" name="Maven: io.netty:netty-all:4.1.92.Final" level="project" />
    <orderEntry type="library" name="Maven: io.netty:netty-buffer:4.1.92.Final" level="project" />
    <orderEntry type="library" name="Maven: io.netty:netty-codec:4.1.92.Final" level="project" />
    <orderEntry type="library" name="Maven: io.netty:netty-codec-dns:4.1.92.Final" level="project" />
    <orderEntry type="library" name="Maven: io.netty:netty-codec-haproxy:4.1.92.Final" level="project" />
    <orderEntry type="library" name="Maven: io.netty:netty-codec-http:4.1.92.Final" level="project" />
    <orderEntry type="library" name="Maven: io.netty:netty-codec-http2:4.1.92.Final" level="project" />
    <orderEntry type="library" name="Maven: io.netty:netty-codec-memcache:4.1.92.Final" level="project" />
    <orderEntry type="library" name="Maven: io.netty:netty-codec-mqtt:4.1.92.Final" level="project" />
    <orderEntry type="library" name="Maven: io.netty:netty-codec-redis:4.1.92.Final" level="project" />
    <orderEntry type="library" name="Maven: io.netty:netty-codec-smtp:4.1.92.Final" level="project" />
    <orderEntry type="library" name="Maven: io.netty:netty-codec-socks:4.1.92.Final" level="project" />
    <orderEntry type="library" name="Maven: io.netty:netty-codec-stomp:4.1.92.Final" level="project" />
    <orderEntry type="library" name="Maven: io.netty:netty-codec-xml:4.1.92.Final" level="project" />
    <orderEntry type="library" name="Maven: io.netty:netty-common:4.1.92.Final" level="project" />
    <orderEntry type="library" name="Maven: io.netty:netty-handler:4.1.92.Final" level="project" />
    <orderEntry type="library" name="Maven: io.netty:netty-transport-native-unix-common:4.1.92.Final" level="project" />
    <orderEntry type="library" name="Maven: io.netty:netty-handler-proxy:4.1.92.Final" level="project" />
    <orderEntry type="library" name="Maven: io.netty:netty-handler-ssl-ocsp:4.1.92.Final" level="project" />
    <orderEntry type="library" name="Maven: io.netty:netty-resolver:4.1.92.Final" level="project" />
    <orderEntry type="library" name="Maven: io.netty:netty-resolver-dns:4.1.92.Final" level="project" />
    <orderEntry type="library" name="Maven: io.netty:netty-transport:4.1.92.Final" level="project" />
    <orderEntry type="library" name="Maven: io.netty:netty-transport-rxtx:4.1.92.Final" level="project" />
    <orderEntry type="library" name="Maven: io.netty:netty-transport-sctp:4.1.92.Final" level="project" />
    <orderEntry type="library" name="Maven: io.netty:netty-transport-udt:4.1.92.Final" level="project" />
    <orderEntry type="library" name="Maven: io.netty:netty-transport-classes-epoll:4.1.92.Final" level="project" />
    <orderEntry type="library" name="Maven: io.netty:netty-transport-classes-kqueue:4.1.92.Final" level="project" />
    <orderEntry type="library" name="Maven: io.netty:netty-resolver-dns-classes-macos:4.1.92.Final" level="project" />
    <orderEntry type="library" scope="RUNTIME" name="Maven: io.netty:netty-transport-native-epoll:linux-x86_64:4.1.92.Final" level="project" />
    <orderEntry type="library" scope="RUNTIME" name="Maven: io.netty:netty-transport-native-epoll:linux-aarch_64:4.1.92.Final" level="project" />
    <orderEntry type="library" scope="RUNTIME" name="Maven: io.netty:netty-transport-native-kqueue:osx-x86_64:4.1.92.Final" level="project" />
    <orderEntry type="library" scope="RUNTIME" name="Maven: io.netty:netty-transport-native-kqueue:osx-aarch_64:4.1.92.Final" level="project" />
    <orderEntry type="library" scope="RUNTIME" name="Maven: io.netty:netty-resolver-dns-native-macos:osx-x86_64:4.1.92.Final" level="project" />
    <orderEntry type="library" scope="RUNTIME" name="Maven: io.netty:netty-resolver-dns-native-macos:osx-aarch_64:4.1.92.Final" level="project" />
    <orderEntry type="library" name="Maven: org.springframework.integration:spring-integration-mqtt:6.0.3" level="project" />
    <orderEntry type="library" name="Maven: org.springframework.integration:spring-integration-core:5.5.18" level="project" />
    <orderEntry type="library" name="Maven: org.springframework:spring-aop:5.3.27" level="project" />
    <orderEntry type="library" name="Maven: org.springframework:spring-messaging:5.3.27" level="project" />
    <orderEntry type="library" name="Maven: org.springframework:spring-tx:5.3.27" level="project" />
    <orderEntry type="library" name="Maven: org.springframework.retry:spring-retry:1.3.4" level="project" />
    <orderEntry type="library" name="Maven: io.projectreactor:reactor-core:3.4.29" level="project" />
    <orderEntry type="library" name="Maven: org.reactivestreams:reactive-streams:1.0.4" level="project" />
    <orderEntry type="library" name="Maven: org.eclipse.paho:org.eclipse.paho.client.mqttv3:1.2.5" level="project" />
    <orderEntry type="library" name="Maven: com.alibaba.fastjson2:fastjson2:2.0.23" level="project" />
    <orderEntry type="library" name="Maven: org.projectlombok:lombok:1.18.26" level="project" />
    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-web:2.7.12" level="project" />
    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-json:2.7.12" level="project" />
    <orderEntry type="library" name="Maven: com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.13.5" level="project" />
    <orderEntry type="library" name="Maven: com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.13.5" level="project" />
    <orderEntry type="library" name="Maven: com.fasterxml.jackson.module:jackson-module-parameter-names:2.13.5" level="project" />
    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-tomcat:2.7.12" level="project" />
    <orderEntry type="library" name="Maven: org.apache.tomcat.embed:tomcat-embed-core:9.0.75" level="project" />
    <orderEntry type="library" name="Maven: org.apache.tomcat.embed:tomcat-embed-el:9.0.75" level="project" />
    <orderEntry type="library" name="Maven: org.apache.tomcat.embed:tomcat-embed-websocket:9.0.75" level="project" />
    <orderEntry type="library" name="Maven: org.springframework:spring-web:5.3.27" level="project" />
    <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.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" />
    <orderEntry type="library" name="Maven: org.slf4j:slf4j-api:1.7.36" level="project" />
    <orderEntry type="library" name="Maven: com.baomidou:mybatis-plus-boot-starter:3.5.1" level="project" />
    <orderEntry type="library" name="Maven: com.baomidou:mybatis-plus:3.5.1" level="project" />
    <orderEntry type="library" name="Maven: com.baomidou:mybatis-plus-extension:3.5.1" level="project" />
    <orderEntry type="library" name="Maven: com.baomidou:mybatis-plus-core:3.5.1" level="project" />
    <orderEntry type="library" name="Maven: com.baomidou:mybatis-plus-annotation:3.5.1" level="project" />
    <orderEntry type="library" name="Maven: com.github.jsqlparser:jsqlparser:4.3" level="project" />
    <orderEntry type="library" name="Maven: org.mybatis:mybatis:3.5.9" level="project" />
    <orderEntry type="library" name="Maven: org.mybatis:mybatis-spring:2.0.6" level="project" />
    <orderEntry type="library" name="Maven: com.oracle.ojdbc:ojdbc8:19.3.0.0" level="project" />
    <orderEntry type="library" name="Maven: com.oracle.ojdbc:ucp:19.3.0.0" level="project" />
    <orderEntry type="library" name="Maven: com.oracle.ojdbc:oraclepki:19.3.0.0" level="project" />
    <orderEntry type="library" name="Maven: com.oracle.ojdbc:osdt_cert:19.3.0.0" level="project" />
    <orderEntry type="library" name="Maven: com.oracle.ojdbc:osdt_core:19.3.0.0" level="project" />
    <orderEntry type="library" name="Maven: com.oracle.ojdbc:simplefan:19.3.0.0" level="project" />
    <orderEntry type="library" name="Maven: com.oracle.ojdbc:ons:19.3.0.0" level="project" />
    <orderEntry type="library" name="Maven: com.oracle.database.nls:orai18n:21.1.0.0" level="project" />
    <orderEntry type="library" name="Maven: io.minio:minio:8.3.5" level="project" />
    <orderEntry type="library" name="Maven: com.carrotsearch.thirdparty:simple-xml-safe:2.7.1" level="project" />
    <orderEntry type="library" name="Maven: com.google.guava:guava:30.1.1-jre" level="project" />
    <orderEntry type="library" name="Maven: com.google.guava:failureaccess:1.0.1" level="project" />
    <orderEntry type="library" name="Maven: com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava" level="project" />
    <orderEntry type="library" name="Maven: com.google.code.findbugs:jsr305:3.0.2" level="project" />
    <orderEntry type="library" name="Maven: com.google.errorprone:error_prone_annotations:2.5.1" level="project" />
    <orderEntry type="library" name="Maven: com.google.j2objc:j2objc-annotations:1.3" level="project" />
    <orderEntry type="library" name="Maven: com.squareup.okhttp3:okhttp:4.9.3" level="project" />
    <orderEntry type="library" name="Maven: com.squareup.okio:okio:2.8.0" level="project" />
    <orderEntry type="library" name="Maven: org.jetbrains.kotlin:kotlin-stdlib-common:1.6.21" level="project" />
    <orderEntry type="library" name="Maven: org.jetbrains.kotlin:kotlin-stdlib:1.6.21" level="project" />
    <orderEntry type="library" name="Maven: org.jetbrains:annotations:13.0" level="project" />
    <orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-annotations:2.13.5" level="project" />
    <orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-core:2.13.5" level="project" />
    <orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-databind:2.13.5" level="project" />
    <orderEntry type="library" name="Maven: org.bouncycastle:bcprov-jdk15on:1.69" level="project" />
    <orderEntry type="library" name="Maven: org.apache.commons:commons-compress:1.21" level="project" />
    <orderEntry type="library" name="Maven: org.xerial.snappy:snappy-java:1.1.8.4" level="project" />
    <orderEntry type="library" name="Maven: org.apache.commons:commons-lang3:3.12.0" level="project" />
    <orderEntry type="library" name="Maven: org.gavaghan:geodesy:1.1.3" level="project" />
    <orderEntry type="library" name="Maven: com.alibaba:druid-spring-boot-starter:1.2.14" level="project" />
    <orderEntry type="library" name="Maven: com.alibaba:druid:1.2.14" level="project" />
    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-jdbc:2.7.12" level="project" />
    <orderEntry type="library" name="Maven: com.zaxxer:HikariCP:4.0.3" level="project" />
    <orderEntry type="library" name="Maven: org.springframework:spring-jdbc:5.3.27" level="project" />
    <orderEntry type="library" name="Maven: org.postgresql:postgresql:42.3.8" level="project" />
    <orderEntry type="library" name="Maven: org.checkerframework:checker-qual:3.5.0" level="project" />
  </component>
<?xml version="1.0" encoding="UTF-8"?>
<module org.jetbrains.idea.maven.project.MavenProjectsManager.isMavenModule="true" type="JAVA_MODULE" version="4">
  <component name="FacetManager">
    <facet type="web" name="Web">
      <configuration>
        <webroots />
        <sourceRoots>
          <root url="file://$MODULE_DIR$/src/main/java" />
          <root url="file://$MODULE_DIR$/src/main/resources" />
        </sourceRoots>
      </configuration>
    </facet>
    <facet type="Spring" name="Spring">
      <configuration />
    </facet>
  </component>
  <component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_1_8">
    <output url="file://$MODULE_DIR$/target/classes" />
    <output-test url="file://$MODULE_DIR$/target/test-classes" />
    <content url="file://$MODULE_DIR$">
      <sourceFolder url="file://$MODULE_DIR$/src/main/java" isTestSource="false" />
      <sourceFolder url="file://$MODULE_DIR$/src/main/resources" type="java-resource" />
      <sourceFolder url="file://$MODULE_DIR$/src/test/java" isTestSource="true" />
      <excludeFolder url="file://$MODULE_DIR$/target" />
    </content>
    <orderEntry type="inheritedJdk" />
    <orderEntry type="sourceFolder" forTests="false" />
    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter:2.7.12" level="project" />
    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot:2.7.12" level="project" />
    <orderEntry type="library" name="Maven: org.springframework:spring-context:5.3.27" level="project" />
    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-autoconfigure:2.7.12" level="project" />
    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-logging:2.7.12" level="project" />
    <orderEntry type="library" name="Maven: ch.qos.logback:logback-classic:1.2.12" level="project" />
    <orderEntry type="library" name="Maven: ch.qos.logback:logback-core:1.2.12" level="project" />
    <orderEntry type="library" name="Maven: org.apache.logging.log4j:log4j-to-slf4j:2.17.2" level="project" />
    <orderEntry type="library" name="Maven: org.apache.logging.log4j:log4j-api:2.17.2" level="project" />
    <orderEntry type="library" name="Maven: org.slf4j:jul-to-slf4j:1.7.36" level="project" />
    <orderEntry type="library" name="Maven: jakarta.annotation:jakarta.annotation-api:1.3.5" level="project" />
    <orderEntry type="library" name="Maven: org.springframework:spring-core:5.3.27" level="project" />
    <orderEntry type="library" name="Maven: org.springframework:spring-jcl:5.3.27" level="project" />
    <orderEntry type="library" name="Maven: org.yaml:snakeyaml:1.30" level="project" />
    <orderEntry type="library" name="Maven: io.netty:netty-all:4.1.92.Final" level="project" />
    <orderEntry type="library" name="Maven: io.netty:netty-buffer:4.1.92.Final" level="project" />
    <orderEntry type="library" name="Maven: io.netty:netty-codec:4.1.92.Final" level="project" />
    <orderEntry type="library" name="Maven: io.netty:netty-codec-dns:4.1.92.Final" level="project" />
    <orderEntry type="library" name="Maven: io.netty:netty-codec-haproxy:4.1.92.Final" level="project" />
    <orderEntry type="library" name="Maven: io.netty:netty-codec-http:4.1.92.Final" level="project" />
    <orderEntry type="library" name="Maven: io.netty:netty-codec-http2:4.1.92.Final" level="project" />
    <orderEntry type="library" name="Maven: io.netty:netty-codec-memcache:4.1.92.Final" level="project" />
    <orderEntry type="library" name="Maven: io.netty:netty-codec-mqtt:4.1.92.Final" level="project" />
    <orderEntry type="library" name="Maven: io.netty:netty-codec-redis:4.1.92.Final" level="project" />
    <orderEntry type="library" name="Maven: io.netty:netty-codec-smtp:4.1.92.Final" level="project" />
    <orderEntry type="library" name="Maven: io.netty:netty-codec-socks:4.1.92.Final" level="project" />
    <orderEntry type="library" name="Maven: io.netty:netty-codec-stomp:4.1.92.Final" level="project" />
    <orderEntry type="library" name="Maven: io.netty:netty-codec-xml:4.1.92.Final" level="project" />
    <orderEntry type="library" name="Maven: io.netty:netty-common:4.1.92.Final" level="project" />
    <orderEntry type="library" name="Maven: io.netty:netty-handler:4.1.92.Final" level="project" />
    <orderEntry type="library" name="Maven: io.netty:netty-transport-native-unix-common:4.1.92.Final" level="project" />
    <orderEntry type="library" name="Maven: io.netty:netty-handler-proxy:4.1.92.Final" level="project" />
    <orderEntry type="library" name="Maven: io.netty:netty-handler-ssl-ocsp:4.1.92.Final" level="project" />
    <orderEntry type="library" name="Maven: io.netty:netty-resolver:4.1.92.Final" level="project" />
    <orderEntry type="library" name="Maven: io.netty:netty-resolver-dns:4.1.92.Final" level="project" />
    <orderEntry type="library" name="Maven: io.netty:netty-transport:4.1.92.Final" level="project" />
    <orderEntry type="library" name="Maven: io.netty:netty-transport-rxtx:4.1.92.Final" level="project" />
    <orderEntry type="library" name="Maven: io.netty:netty-transport-sctp:4.1.92.Final" level="project" />
    <orderEntry type="library" name="Maven: io.netty:netty-transport-udt:4.1.92.Final" level="project" />
    <orderEntry type="library" name="Maven: io.netty:netty-transport-classes-epoll:4.1.92.Final" level="project" />
    <orderEntry type="library" name="Maven: io.netty:netty-transport-classes-kqueue:4.1.92.Final" level="project" />
    <orderEntry type="library" name="Maven: io.netty:netty-resolver-dns-classes-macos:4.1.92.Final" level="project" />
    <orderEntry type="library" scope="RUNTIME" name="Maven: io.netty:netty-transport-native-epoll:linux-x86_64:4.1.92.Final" level="project" />
    <orderEntry type="library" scope="RUNTIME" name="Maven: io.netty:netty-transport-native-epoll:linux-aarch_64:4.1.92.Final" level="project" />
    <orderEntry type="library" scope="RUNTIME" name="Maven: io.netty:netty-transport-native-kqueue:osx-x86_64:4.1.92.Final" level="project" />
    <orderEntry type="library" scope="RUNTIME" name="Maven: io.netty:netty-transport-native-kqueue:osx-aarch_64:4.1.92.Final" level="project" />
    <orderEntry type="library" scope="RUNTIME" name="Maven: io.netty:netty-resolver-dns-native-macos:osx-x86_64:4.1.92.Final" level="project" />
    <orderEntry type="library" scope="RUNTIME" name="Maven: io.netty:netty-resolver-dns-native-macos:osx-aarch_64:4.1.92.Final" level="project" />
    <orderEntry type="library" name="Maven: org.springframework.integration:spring-integration-mqtt:6.0.3" level="project" />
    <orderEntry type="library" name="Maven: org.springframework.integration:spring-integration-core:5.5.18" level="project" />
    <orderEntry type="library" name="Maven: org.springframework:spring-aop:5.3.27" level="project" />
    <orderEntry type="library" name="Maven: org.springframework:spring-messaging:5.3.27" level="project" />
    <orderEntry type="library" name="Maven: org.springframework:spring-tx:5.3.27" level="project" />
    <orderEntry type="library" name="Maven: org.springframework.retry:spring-retry:1.3.4" level="project" />
    <orderEntry type="library" name="Maven: io.projectreactor:reactor-core:3.4.29" level="project" />
    <orderEntry type="library" name="Maven: org.reactivestreams:reactive-streams:1.0.4" level="project" />
    <orderEntry type="library" name="Maven: org.eclipse.paho:org.eclipse.paho.client.mqttv3:1.2.5" level="project" />
    <orderEntry type="library" name="Maven: com.alibaba.fastjson2:fastjson2:2.0.23" level="project" />
    <orderEntry type="library" name="Maven: org.projectlombok:lombok:1.18.26" level="project" />
    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-web:2.7.12" level="project" />
    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-json:2.7.12" level="project" />
    <orderEntry type="library" name="Maven: com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.13.5" level="project" />
    <orderEntry type="library" name="Maven: com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.13.5" level="project" />
    <orderEntry type="library" name="Maven: com.fasterxml.jackson.module:jackson-module-parameter-names:2.13.5" level="project" />
    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-tomcat:2.7.12" level="project" />
    <orderEntry type="library" name="Maven: org.apache.tomcat.embed:tomcat-embed-core:9.0.75" level="project" />
    <orderEntry type="library" name="Maven: org.apache.tomcat.embed:tomcat-embed-el:9.0.75" level="project" />
    <orderEntry type="library" name="Maven: org.apache.tomcat.embed:tomcat-embed-websocket:9.0.75" level="project" />
    <orderEntry type="library" name="Maven: org.springframework:spring-web:5.3.27" level="project" />
    <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.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" />
    <orderEntry type="library" name="Maven: org.slf4j:slf4j-api:1.7.36" level="project" />
    <orderEntry type="library" name="Maven: com.baomidou:mybatis-plus-boot-starter:3.5.1" level="project" />
    <orderEntry type="library" name="Maven: com.baomidou:mybatis-plus:3.5.1" level="project" />
    <orderEntry type="library" name="Maven: com.baomidou:mybatis-plus-extension:3.5.1" level="project" />
    <orderEntry type="library" name="Maven: com.baomidou:mybatis-plus-core:3.5.1" level="project" />
    <orderEntry type="library" name="Maven: com.baomidou:mybatis-plus-annotation:3.5.1" level="project" />
    <orderEntry type="library" name="Maven: com.github.jsqlparser:jsqlparser:4.3" level="project" />
    <orderEntry type="library" name="Maven: org.mybatis:mybatis:3.5.9" level="project" />
    <orderEntry type="library" name="Maven: org.mybatis:mybatis-spring:2.0.6" level="project" />
    <orderEntry type="library" name="Maven: com.oracle.ojdbc:ojdbc8:19.3.0.0" level="project" />
    <orderEntry type="library" name="Maven: com.oracle.ojdbc:ucp:19.3.0.0" level="project" />
    <orderEntry type="library" name="Maven: com.oracle.ojdbc:oraclepki:19.3.0.0" level="project" />
    <orderEntry type="library" name="Maven: com.oracle.ojdbc:osdt_cert:19.3.0.0" level="project" />
    <orderEntry type="library" name="Maven: com.oracle.ojdbc:osdt_core:19.3.0.0" level="project" />
    <orderEntry type="library" name="Maven: com.oracle.ojdbc:simplefan:19.3.0.0" level="project" />
    <orderEntry type="library" name="Maven: com.oracle.ojdbc:ons:19.3.0.0" level="project" />
    <orderEntry type="library" name="Maven: com.oracle.database.nls:orai18n:21.1.0.0" level="project" />
    <orderEntry type="library" name="Maven: io.minio:minio:8.3.5" level="project" />
    <orderEntry type="library" name="Maven: com.carrotsearch.thirdparty:simple-xml-safe:2.7.1" level="project" />
    <orderEntry type="library" name="Maven: com.google.guava:guava:30.1.1-jre" level="project" />
    <orderEntry type="library" name="Maven: com.google.guava:failureaccess:1.0.1" level="project" />
    <orderEntry type="library" name="Maven: com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava" level="project" />
    <orderEntry type="library" name="Maven: com.google.code.findbugs:jsr305:3.0.2" level="project" />
    <orderEntry type="library" name="Maven: com.google.errorprone:error_prone_annotations:2.5.1" level="project" />
    <orderEntry type="library" name="Maven: com.google.j2objc:j2objc-annotations:1.3" level="project" />
    <orderEntry type="library" name="Maven: com.squareup.okhttp3:okhttp:4.9.3" level="project" />
    <orderEntry type="library" name="Maven: com.squareup.okio:okio:2.8.0" level="project" />
    <orderEntry type="library" name="Maven: org.jetbrains.kotlin:kotlin-stdlib-common:1.6.21" level="project" />
    <orderEntry type="library" name="Maven: org.jetbrains.kotlin:kotlin-stdlib:1.6.21" level="project" />
    <orderEntry type="library" name="Maven: org.jetbrains:annotations:13.0" level="project" />
    <orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-annotations:2.13.5" level="project" />
    <orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-core:2.13.5" level="project" />
    <orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-databind:2.13.5" level="project" />
    <orderEntry type="library" name="Maven: org.bouncycastle:bcprov-jdk15on:1.69" level="project" />
    <orderEntry type="library" name="Maven: org.apache.commons:commons-compress:1.21" level="project" />
    <orderEntry type="library" name="Maven: org.xerial.snappy:snappy-java:1.1.8.4" level="project" />
    <orderEntry type="library" name="Maven: org.apache.commons:commons-lang3:3.12.0" level="project" />
    <orderEntry type="library" name="Maven: org.gavaghan:geodesy:1.1.3" level="project" />
    <orderEntry type="library" name="Maven: com.alibaba:druid-spring-boot-starter:1.2.14" level="project" />
    <orderEntry type="library" name="Maven: com.alibaba:druid:1.2.14" level="project" />
    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-jdbc:2.7.12" level="project" />
    <orderEntry type="library" name="Maven: com.zaxxer:HikariCP:4.0.3" level="project" />
    <orderEntry type="library" name="Maven: org.springframework:spring-jdbc:5.3.27" level="project" />
    <orderEntry type="library" name="Maven: org.postgresql:postgresql:42.3.8" level="project" />
    <orderEntry type="library" name="Maven: org.checkerframework:checker-qual:3.5.0" level="project" />
  </component>
</module>
lib/ClientDemoDll/ReadMe.txt
ÎļþÒÑɾ³ý
lib/ClientDemoDll/calib.dll
Binary files differ
lib/ClientDemoDll/iconv.dll
Binary files differ
lib/ClientDemoDll/libcrypto-1_1-x64.dll
Binary files differ
lib/ClientDemoDll/libssl-1_1-x64.dll
Binary files differ
lib/ClientDemoDll/libxml2.dll
Binary files differ
lib/ClientDemoDll/zlib1.dll
Binary files differ
lib/OpenAL32.dll
Binary files differ
pom.xml
@@ -1,165 +1,166 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.7.12</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.ard</groupId>
    <artifactId>ard-alarm</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>ard-alarm</name>
    <description>ard-alarm</description>
    <properties>
        <java.version>1.8</java.version>
        <docker.image.prefix>ard</docker.image.prefix>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>
        <!-- netty依赖 springboot2.x自动导入版本 -->
        <dependency>
            <groupId>io.netty</groupId>
            <artifactId>netty-all</artifactId>
        </dependency>
        <!--mqtt-->
        <dependency>
            <groupId>org.springframework.integration</groupId>
            <artifactId>spring-integration-mqtt</artifactId>
            <version>6.0.3</version>
        </dependency>
        <dependency>
            <groupId>com.alibaba.fastjson2</groupId>
            <artifactId>fastjson2</artifactId>
            <version>2.0.23</version>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <!--海康录像机二次开发依赖jar包-->
        <dependency>
            <groupId>net.java.jna</groupId>
            <artifactId>jna</artifactId>
            <version>1.0.0</version>
        </dependency>
        <dependency>
            <groupId>net.java.examples</groupId>
            <artifactId>examples</artifactId>
            <version>1.0.0</version>
        </dependency>
        <!--MP代码生成器依赖-->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-generator</artifactId>
            <version>3.5.3.1</version>
        </dependency>
        <!--velocity模板引擎-->
        <dependency>
            <groupId>org.apache.velocity</groupId>
            <artifactId>velocity-engine-core</artifactId>
            <version>2.0</version>
        </dependency>
        <!--mybatis-plus依赖-->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.5.1</version>
        </dependency>
        <!--Oracle jdbc-->
        <!--这里注意,某些ojdbc的版本不支持jdk1.8,遇到过,网上说这个ojdbc8支持,所以这里使用它-->
        <dependency>
            <groupId>com.oracle.ojdbc</groupId>
            <artifactId>ojdbc8</artifactId>
            <version>19.3.0.0</version>
        </dependency>
        <dependency>
            <groupId>com.oracle.database.nls</groupId>
            <artifactId>orai18n</artifactId>
            <version>21.1.0.0</version>
        </dependency>
        <!--minio依赖-->
        <dependency>
            <groupId>io.minio</groupId>
            <artifactId>minio</artifactId>
            <version>8.3.5</version>
        </dependency>
        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-lang3</artifactId>
            <version>3.12.0</version>
        </dependency>
        <dependency>
            <groupId>org.gavaghan</groupId>
            <artifactId>geodesy</artifactId>
            <version>1.1.3</version>
        </dependency>
        <!--druid依赖-->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid-spring-boot-starter</artifactId>
            <version>1.2.14</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-jdbc</artifactId>
        </dependency>
        <dependency>
            <groupId>org.postgresql</groupId>
            <artifactId>postgresql</artifactId>
        </dependency>
    </dependencies>
    <build>
        <!-- é¡¹ç›®æ‰“包名称 -->
        <finalName>ard_alarm</finalName>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <configuration>
                    <excludes>
                        <exclude>
                            <groupId>org.projectlombok</groupId>
                            <artifactId>lombok</artifactId>
                        </exclude>
                    </excludes>
                </configuration>
            </plugin>
            <plugin>
                <groupId>com.spotify</groupId>
                <artifactId>dockerfile-maven-plugin</artifactId>
                <version>1.3.6</version>
                <configuration>
                    <repository>${docker.image.prefix}/${project.artifactId}</repository>
                    <buildArgs>
                        <JAR_FILE>target/${project.build.finalName}.jar</JAR_FILE>
                    </buildArgs>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.mybatis.generator</groupId>
                <artifactId>mybatis-generator-maven-plugin</artifactId>
                <version>1.4.1</version>
                <configuration>
                    <!--配置文件位置-->
                    <configurationFile>src/main/resources/GeneratorMapper.xml</configurationFile>
                    <verbose>true</verbose>
                    <overwrite>true</overwrite>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.7.12</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.ard</groupId>
    <artifactId>ard-alarm</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>ard-alarm</name>
    <description>ard-alarm</description>
    <properties>
        <java.version>1.8</java.version>
        <docker.image.prefix>ard</docker.image.prefix>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>
        <!-- netty依赖 springboot2.x自动导入版本 -->
        <dependency>
            <groupId>io.netty</groupId>
            <artifactId>netty-all</artifactId>
        </dependency>
        <!--mqtt-->
        <dependency>
            <groupId>org.springframework.integration</groupId>
            <artifactId>spring-integration-mqtt</artifactId>
            <version>6.0.3</version>
        </dependency>
        <dependency>
            <groupId>com.alibaba.fastjson2</groupId>
            <artifactId>fastjson2</artifactId>
            <version>2.0.23</version>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <!--海康录像机二次开发依赖jar包-->
        <dependency>
            <groupId>net.java.dev.jna</groupId>
            <artifactId>jna</artifactId>
            <version>5.4.0</version>
        </dependency>
        <dependency>
            <groupId>net.java.examples</groupId>
            <artifactId>examples</artifactId>
            <version>1.0.0</version>
        </dependency>
        <!--MP代码生成器依赖-->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-generator</artifactId>
            <version>3.5.3.1</version>
        </dependency>
        <!--velocity模板引擎-->
        <dependency>
            <groupId>org.apache.velocity</groupId>
            <artifactId>velocity-engine-core</artifactId>
            <version>2.0</version>
        </dependency>
        <!--mybatis-plus依赖-->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.5.1</version>
        </dependency>
        <!--Oracle jdbc-->
        <!--这里注意,某些ojdbc的版本不支持jdk1.8,遇到过,网上说这个ojdbc8支持,所以这里使用它-->
        <dependency>
            <groupId>com.oracle.ojdbc</groupId>
            <artifactId>ojdbc8</artifactId>
            <version>19.3.0.0</version>
        </dependency>
        <dependency>
            <groupId>com.oracle.database.nls</groupId>
            <artifactId>orai18n</artifactId>
            <version>21.1.0.0</version>
        </dependency>
        <!--minio依赖-->
        <dependency>
            <groupId>io.minio</groupId>
            <artifactId>minio</artifactId>
            <version>8.3.5</version>
        </dependency>
        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-lang3</artifactId>
            <version>3.12.0</version>
        </dependency>
        <dependency>
            <groupId>org.gavaghan</groupId>
            <artifactId>geodesy</artifactId>
            <version>1.1.3</version>
        </dependency>
        <!--druid依赖-->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid-spring-boot-starter</artifactId>
            <version>1.2.14</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-jdbc</artifactId>
        </dependency>
        <dependency>
            <groupId>org.postgresql</groupId>
            <artifactId>postgresql</artifactId>
        </dependency>
    </dependencies>
    <build>
        <!-- é¡¹ç›®æ‰“包名称 -->
        <finalName>ard_alarm</finalName>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <configuration>
                    <excludes>
                        <exclude>
                            <groupId>org.projectlombok</groupId>
                            <artifactId>lombok</artifactId>
                        </exclude>
                    </excludes>
                </configuration>
            </plugin>
            <plugin>
                <groupId>com.spotify</groupId>
                <artifactId>dockerfile-maven-plugin</artifactId>
                <version>1.3.6</version>
                <configuration>
                    <repository>${docker.image.prefix}/${project.artifactId}</repository>
                    <buildArgs>
                        <JAR_FILE>target/${project.build.finalName}.jar</JAR_FILE>
                    </buildArgs>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.mybatis.generator</groupId>
                <artifactId>mybatis-generator-maven-plugin</artifactId>
                <version>1.4.1</version>
                <configuration>
                    <!--配置文件位置-->
                    <configurationFile>src/main/resources/GeneratorMapper.xml</configurationFile>
                    <verbose>true</verbose>
                    <overwrite>true</overwrite>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>
src/main/java/com/ard/alarm/camera/service/impl/ArdCamerasServiceImpl.java
@@ -1,134 +1,132 @@
package com.ard.alarm.camera.service.impl;
import java.util.*;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
import java.util.stream.Collectors;
import com.ard.alarm.camera.domain.ArdCameras;
import com.ard.alarm.camera.mapper.ArdCamerasMapper;
import com.ard.alarm.camera.service.IArdCamerasService;
import com.ard.alarm.external.domain.ArdEquipExternal;
import com.ard.alarm.external.mapper.ArdEquipExternalMapper;
import com.ard.utils.hiksdk.service.impl.HikClientUtil;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import lombok.extern.slf4j.Slf4j;
import org.springframework.boot.ApplicationArguments;
import org.springframework.boot.ApplicationRunner;
import org.springframework.core.annotation.Order;
import org.springframework.stereotype.Service;
import javax.annotation.PostConstruct;
import javax.annotation.Resource;
/**
 * ç›¸æœºè®¾å¤‡Service业务层处理
 *
 * @author åˆ˜è‹ä¹‰
 * @date 2023-02-11
 */
@Service
@Slf4j(topic = "camera")
@Order(4)
public class ArdCamerasServiceImpl implements IArdCamerasService, ApplicationRunner {
    private final static ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1);
    public static List<ArdCameras> ardCameraList = new ArrayList<>();
    @Resource
    private ArdCamerasMapper ardCamerasMapper;
    //初始化执行
    @Override
    public void run(ApplicationArguments args) {
        //加载sdk库
        HikClientUtil.loadHCNetSDKLib();
        //获取小光电尝试登录
        ardCameraList = selectArdCamerasList(new ArdCameras());
        HikClientUtil.loginAllCamera(ardCameraList);
        syncCameraListTask();
    }
    /**
     * åŒæ­¥ç›¸æœºåˆ—表任务
     * å®žæ—¶èŽ·å–åœ¨çº¿çš„å°å…‰ç”µ
     * åˆ˜è‹ä¹‰
     * 2023/8/11 9:09:27
     */
    private void syncCameraListTask() {
        scheduler.scheduleAtFixedRate(() -> {
            try {
                //region å®šæ—¶åŒæ­¥å°å…‰ç”µ
                List<ArdCameras> newArdCameraList = selectArdCamerasList(new ArdCameras());
                //需要更新的数据
                List<ArdCameras> updateList = sameListWithDifferent(ardCameraList, newArdCameraList);
                if (updateList.size() > 0) {
                    HikClientUtil.logoutAllCamera(updateList);
                    HikClientUtil.loginAllCamera(updateList);
                    ardCameraList.clear();
                    ardCameraList.addAll(newArdCameraList);
                }
                //需要删除的数据
                List<ArdCameras> delList = diffList(ardCameraList, newArdCameraList);
                if (delList.size() > 0) {
                    HikClientUtil.logoutAllCamera(delList);
                    for (ArdCameras ardCameras : delList) {
                        ardCameraList.remove(ardCameras);
                    }
                }
                //需要新增的数据
                List<ArdCameras> inserList = diffList(newArdCameraList, ardCameraList);
                if (inserList.size() > 0) {
                    HikClientUtil.loginAllCamera(inserList);
                    for (ArdCameras ardCameras : inserList) {
                        ardCameraList.add(ardCameras);
                    }
                }
                //endregion
            } catch (Exception e) {
                log.error("同步相机任务执行出错" + e.getMessage());
            }
        }, 10, 10, TimeUnit.SECONDS);
    }
    /**
     * æŸ¥è¯¢ç›¸æœºè®¾å¤‡åˆ—表
     *
     * @param ardCamera ç›¸æœºè®¾å¤‡
     * @return ç›¸æœºè®¾å¤‡
     */
    @Override
    public List<ArdCameras> selectArdCamerasList(ArdCameras ardCamera) {
        ardCamera.setGdType("0");
        ardCamera.setFactory("1");
        Wrapper<ArdCameras> queryWrapper=new QueryWrapper<>(ardCamera);
        return ardCamerasMapper.selectList(queryWrapper);
    }
    //  æ±‚两个对象List的差集
    private List<ArdCameras> diffList(List<ArdCameras> oldArrayList, List<ArdCameras> newArrayList) {
        List<ArdCameras> resultList = oldArrayList.stream()
                .filter(item -> !newArrayList.stream().map(e -> e.getId()).collect(Collectors.toList()).contains(item.getId()))
                .collect(Collectors.toList());
        return resultList;
    }
    //求两个对象List的交集字段不同Id相同
    private List<ArdCameras> sameListWithDifferent(List<ArdCameras> oldList, List<ArdCameras> newList) {
        List<ArdCameras> differentFieldsList = newList.stream()
                .filter(newItem -> {
                    ArdCameras oldItem = oldList.stream()
                            .filter(item -> item.getId().equals(newItem.getId()))
                            .findFirst()
                            .orElse(null);
                    return oldItem == null || !Objects.equals(oldItem.getUpdateTime(), newItem.getUpdateTime());
                })
                .collect(Collectors.toList());
        return differentFieldsList;
    }
}
package com.ard.alarm.camera.service.impl;
import java.util.*;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
import java.util.stream.Collectors;
import com.ard.alarm.camera.domain.ArdCameras;
import com.ard.alarm.camera.mapper.ArdCamerasMapper;
import com.ard.alarm.camera.service.IArdCamerasService;
import com.ard.alarm.external.domain.ArdEquipExternal;
import com.ard.alarm.external.mapper.ArdEquipExternalMapper;
import com.ard.utils.hiksdk.service.impl.HikClientUtil;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import lombok.extern.slf4j.Slf4j;
import org.springframework.boot.ApplicationArguments;
import org.springframework.boot.ApplicationRunner;
import org.springframework.core.annotation.Order;
import org.springframework.stereotype.Service;
import javax.annotation.PostConstruct;
import javax.annotation.Resource;
/**
 * ç›¸æœºè®¾å¤‡Service业务层处理
 *
 * @author åˆ˜è‹ä¹‰
 * @date 2023-02-11
 */
@Service
@Slf4j(topic = "camera")
@Order(4)
public class ArdCamerasServiceImpl implements IArdCamerasService, ApplicationRunner {
    private final static ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1);
    public static List<ArdCameras> ardCameraList = new ArrayList<>();
    @Resource
    private ArdCamerasMapper ardCamerasMapper;
    //初始化执行
    @Override
    public void run(ApplicationArguments args) {
        //获取小光电尝试登录
        ardCameraList = selectArdCamerasList(new ArdCameras());
        HikClientUtil.loginAllCamera(ardCameraList);
        syncCameraListTask();
    }
    /**
     * åŒæ­¥ç›¸æœºåˆ—表任务
     * å®žæ—¶èŽ·å–åœ¨çº¿çš„å°å…‰ç”µ
     * åˆ˜è‹ä¹‰
     * 2023/8/11 9:09:27
     */
    private void syncCameraListTask() {
        scheduler.scheduleAtFixedRate(() -> {
            try {
                //region å®šæ—¶åŒæ­¥å°å…‰ç”µ
                List<ArdCameras> newArdCameraList = selectArdCamerasList(new ArdCameras());
                //需要更新的数据
                List<ArdCameras> updateList = sameListWithDifferent(ardCameraList, newArdCameraList);
                if (updateList.size() > 0) {
                    HikClientUtil.logoutAllCamera(updateList);
                    HikClientUtil.loginAllCamera(updateList);
                    ardCameraList.clear();
                    ardCameraList.addAll(newArdCameraList);
                }
                //需要删除的数据
                List<ArdCameras> delList = diffList(ardCameraList, newArdCameraList);
                if (delList.size() > 0) {
                    HikClientUtil.logoutAllCamera(delList);
                    for (ArdCameras ardCameras : delList) {
                        ardCameraList.remove(ardCameras);
                    }
                }
                //需要新增的数据
                List<ArdCameras> inserList = diffList(newArdCameraList, ardCameraList);
                if (inserList.size() > 0) {
                    HikClientUtil.loginAllCamera(inserList);
                    for (ArdCameras ardCameras : inserList) {
                        ardCameraList.add(ardCameras);
                    }
                }
                //endregion
            } catch (Exception e) {
                log.error("同步相机任务执行出错" + e.getMessage());
            }
        }, 10, 10, TimeUnit.SECONDS);
    }
    /**
     * æŸ¥è¯¢ç›¸æœºè®¾å¤‡åˆ—表
     *
     * @param ardCamera ç›¸æœºè®¾å¤‡
     * @return ç›¸æœºè®¾å¤‡
     */
    @Override
    public List<ArdCameras> selectArdCamerasList(ArdCameras ardCamera) {
        ardCamera.setGdType("0");
        ardCamera.setFactory("1");
        Wrapper<ArdCameras> queryWrapper=new QueryWrapper<>(ardCamera);
        return ardCamerasMapper.selectList(queryWrapper);
    }
    //  æ±‚两个对象List的差集
    private List<ArdCameras> diffList(List<ArdCameras> oldArrayList, List<ArdCameras> newArrayList) {
        List<ArdCameras> resultList = oldArrayList.stream()
                .filter(item -> !newArrayList.stream().map(e -> e.getId()).collect(Collectors.toList()).contains(item.getId()))
                .collect(Collectors.toList());
        return resultList;
    }
    //求两个对象List的交集字段不同Id相同
    private List<ArdCameras> sameListWithDifferent(List<ArdCameras> oldList, List<ArdCameras> newList) {
        List<ArdCameras> differentFieldsList = newList.stream()
                .filter(newItem -> {
                    ArdCameras oldItem = oldList.stream()
                            .filter(item -> item.getId().equals(newItem.getId()))
                            .findFirst()
                            .orElse(null);
                    return oldItem == null || !Objects.equals(oldItem.getUpdateTime(), newItem.getUpdateTime());
                })
                .collect(Collectors.toList());
        return differentFieldsList;
    }
}
src/main/java/com/ard/utils/hiksdk/service/impl/HikClientUtil.java
@@ -1,487 +1,446 @@
package com.ard.utils.hiksdk.service.impl;
import com.ard.alarm.camera.domain.ArdCameras;
import com.ard.alarm.camera.domain.CameraCmd;
import com.ard.alarm.external.domain.ArdEquipExternal;
import com.ard.utils.minio.MinioUtil;
import com.ard.utils.other.ByteUtils;
import com.ard.utils.hiksdk.common.GlobalVariable;
import com.ard.utils.hiksdk.domain.DeviceInfo;
import com.ard.utils.hiksdk.util.hikSdkUtil.HCNetSDK;
import com.ard.utils.spring.SpringUtils;
import com.sun.jna.Native;
import com.sun.jna.Platform;
import com.sun.jna.Pointer;
import com.sun.jna.ptr.IntByReference;
import lombok.extern.slf4j.Slf4j;
import java.io.*;
import java.nio.ByteBuffer;
import java.util.*;
/**
 * @ClassName: hikClientServiceImpl
 * @Description: æµ·åº·æ“ä½œå®¢æˆ·ç«¯å®žçŽ°ç±»
 * @Author: Administrator
 * @Date: 2023å¹´01月17日 11:25
 * @Version: 1.2
 **/
@Slf4j(topic = "hikSdk")
public class HikClientUtil {
    private static 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());
        }
    }
    /**
     * @描述 æ³¨å†Œç™»å½• åªæ”¯æŒåŒæ­¥ç™»é™†ï¼Œä¸”官方不建议直接在此接口下写耗时操作
     * @参数 [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;
    }
    /**
     * @描述 æ³¨å†Œç™»å½• é›†æˆäºŽNET_DVR_Login_V30,支持同步和异步登录
     * @创建人 åˆ˜è‹ä¹‰
     * @创建时间 2023/1/17 16:12
     */
    public static void login(DeviceInfo deviceInfo) {
        // åˆå§‹åŒ–
        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 = deviceInfo.getIp();
        String m_sUsername = deviceInfo.getUsername();
        String m_sPassword = deviceInfo.getPassword();
        short m_sPort = deviceInfo.getPort().shortValue();
        //设置连接时间与重连时间
        hCNetSDK.NET_DVR_SetConnectTime(2000, 1);
        hCNetSDK.NET_DVR_SetReconnect(100000, true);
        //设备信息, è¾“出参数
        HCNetSDK.NET_DVR_DEVICEINFO_V40 m_strDeviceInfo = new HCNetSDK.NET_DVR_DEVICEINFO_V40();
        HCNetSDK.NET_DVR_USER_LOGIN_INFO m_strLoginInfo = new HCNetSDK.NET_DVR_USER_LOGIN_INFO();
        // æ³¨å†Œè®¾å¤‡-登录参数,包括设备地址、登录用户、密码等
        m_strLoginInfo.sDeviceAddress = new byte[HCNetSDK.NET_DVR_DEV_ADDRESS_MAX_LEN];
        System.arraycopy(m_sDeviceIP.getBytes(), 0, m_strLoginInfo.sDeviceAddress, 0, m_sDeviceIP.length());
        m_strLoginInfo.sUserName = new byte[HCNetSDK.NET_DVR_LOGIN_USERNAME_MAX_LEN];
        System.arraycopy(m_sUsername.getBytes(), 0, m_strLoginInfo.sUserName, 0, m_sUsername.length());
        m_strLoginInfo.sPassword = new byte[HCNetSDK.NET_DVR_LOGIN_PASSWD_MAX_LEN];
        System.arraycopy(m_sPassword.getBytes(), 0, m_strLoginInfo.sPassword, 0, m_sPassword.length());
        m_strLoginInfo.wPort = m_sPort;
        m_strLoginInfo.byVerifyMode = 0;
        m_strLoginInfo.byLoginMode = 0;
        //是否异步登录:0- å¦ï¼Œ1- æ˜¯  windowsSDK里是true和false
        m_strLoginInfo.bUseAsynLogin = true;
        //异步登录回调
        m_strLoginInfo.cbLoginResult = new LoginResultCallBack(deviceInfo);
        m_strLoginInfo.write();
        int i = hCNetSDK.NET_DVR_Login_V40(m_strLoginInfo, m_strDeviceInfo);
        if (i < 0) {
            int errorCode = hCNetSDK.NET_DVR_GetLastError();
            log.info("登录异常:" + errorCode);
        }
    }
    /**
     * @描述 ç”¨æˆ·æ³¨é”€
     * @创建人 åˆ˜è‹ä¹‰
     * @创建时间 2023/1/17 16:12
     */
    public static void logout(DeviceInfo deviceInfo) {
        String deviceIpPort = deviceInfo.getIp() + ":" + deviceInfo.getPort();
        //撤防
        if (GlobalVariable.alarmMap.containsKey(deviceInfo.getDeviceId())) {
            Integer lAlarmHandle = GlobalVariable.alarmMap.get(deviceInfo.getDeviceId());
            boolean b = hCNetSDK.NET_DVR_CloseAlarmChan_V30(lAlarmHandle);
            if (b) {
                log.debug("设备【" + deviceIpPort + "】撤防成功");
            }
        }
        //登出
        if (GlobalVariable.loginMap.containsKey(deviceInfo.getDeviceId())) {
            Integer lUserID = GlobalVariable.loginMap.get(deviceInfo.getDeviceId());
            boolean b = hCNetSDK.NET_DVR_Logout(lUserID);
            if (b) {
                log.debug("设备【" + deviceIpPort + "】注销成功");
            }
        }
    }
    /**
     * @描述 ç™»å½•所有相机
     * @创建人 åˆ˜è‹ä¹‰
     * @创建时间 2023/2/3 10:10
     */
    public static void loginAllCamera(List<ArdCameras> ardCameras) {
        try {
            for (ArdCameras camera : ardCameras) {
                Thread.sleep(100);
                DeviceInfo info = new DeviceInfo();
                info.setDeviceId(camera.getId());
                info.setIp(camera.getIp());
                info.setPort(camera.getPort());
                info.setUsername(camera.getUsername());
                info.setPassword(camera.getPassword());
                login(info);
                String key = camera.getIp() + ":" + camera.getPort();
                GlobalVariable.cameraMap.put(key, camera);
            }
        } catch (Exception ex) {
            log.error("初始化登录相机异常:" + ex.getMessage());
        }
    }
    /**
     * @描述 ç™»å‡ºæ‰€æœ‰ç›¸æœº
     * @创建人 åˆ˜è‹ä¹‰
     * @创建时间 2023/2/3 10:10
     */
    public static void logoutAllCamera(List<ArdCameras> ardCameras) {
        try {
            for (ArdCameras camera : ardCameras) {
                Thread.sleep(100);
                DeviceInfo info = new DeviceInfo();
                info.setDeviceId(camera.getId());
                info.setIp(camera.getIp());
                info.setPort(camera.getPort());
                info.setUsername(camera.getUsername());
                info.setPassword(camera.getPassword());
                logout(info);
                String key = camera.getIp() + ":" + camera.getPort();
                GlobalVariable.cameraMap.remove(key);
            }
        } catch (Exception ex) {
            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);
//
//                String key=accessControlHost.getIp()+":"+accessControlHost.getPort();
//                GlobalVariable.accessHostMap.put(key, accessControlHost);
            }
        } 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);
//                String key=accessControlHost.getIp()+":"+accessControlHost.getPort();
//                GlobalVariable.accessHostMap.remove(key);
            }
        } catch (Exception ex) {
            log.error("初始化报警主机异常:" + ex.getMessage());
        }
    }
    /**
     * å»ºç«‹å¸ƒé˜²ä¸Šä¼ é€šé“,用于传输数据
     *
     * @param lUserID      å”¯ä¸€æ ‡è¯†ç¬¦
     * @param lAlarmHandle æŠ¥è­¦å¤„理器
     */
    public static int setupAlarmChan(String deviceIpPort, int lUserID, int lAlarmHandle) {
        // æ ¹æ®è®¾å¤‡æ³¨å†Œç”Ÿæˆçš„lUserID建立布防的上传通道,即数据的上传通道
        if (lUserID == -1) {
            log.error("请先注册");
            return lUserID;
        }
        if (lAlarmHandle < 0) {
            // è®¾å¤‡å°šæœªå¸ƒé˜²,需要先进行布防
            if (fMSFCallBack_V31 == null) {
                fMSFCallBack_V31 = new FMSGCallBack();
                if (!hCNetSDK.NET_DVR_SetDVRMessageCallBack_V50(0, fMSFCallBack_V31, null)) {
                    log.error("设置回调函数失败!错误码==========》" + hCNetSDK.NET_DVR_GetLastError());
                }
            }
            // è¿™é‡Œéœ€è¦å¯¹è®¾å¤‡è¿›è¡Œç›¸åº”的参数设置,不设置或设置错误都会导致设备注册失败
            HCNetSDK.NET_DVR_SETUPALARM_PARAM m_strAlarmInfo = new HCNetSDK.NET_DVR_SETUPALARM_PARAM();
            m_strAlarmInfo.dwSize = m_strAlarmInfo.size();
            // æ™ºèƒ½äº¤é€šå¸ƒé˜²ä¼˜å…ˆçº§ï¼š0 - ä¸€ç­‰çº§ï¼ˆé«˜ï¼‰ï¼Œ1 - äºŒç­‰çº§ï¼ˆä¸­ï¼‰ï¼Œ2 - ä¸‰ç­‰çº§ï¼ˆä½Žï¼‰
            m_strAlarmInfo.byLevel = 2;
            // æ™ºèƒ½äº¤é€šæŠ¥è­¦ä¿¡æ¯ä¸Šä¼ ç±»åž‹ï¼š0 - è€æŠ¥è­¦ä¿¡æ¯ï¼ˆNET_DVR_PLATE_RESULT), 1 - æ–°æŠ¥è­¦ä¿¡æ¯(NET_ITS_PLATE_RESULT)
            m_strAlarmInfo.byAlarmInfoType = 1;
            // å¸ƒé˜²ç±»åž‹(仅针对门禁主机、人证设备):0 - å®¢æˆ·ç«¯å¸ƒé˜²(会断网续传),1 - å®žæ—¶å¸ƒé˜²(只上传实时数据)
            m_strAlarmInfo.byDeployType = 1;
            m_strAlarmInfo.write();
            // å¸ƒé˜²æˆåŠŸï¼Œè¿”å›žå¸ƒé˜²æˆåŠŸçš„æ•°æ®ä¼ è¾“é€šé“å·
            lAlarmHandle = hCNetSDK.NET_DVR_SetupAlarmChan_V41(lUserID, m_strAlarmInfo);
            if (lAlarmHandle == -1) {
                log.error("设备【" + deviceIpPort + "】布防失败,错误码==========》" + hCNetSDK.NET_DVR_GetLastError());
            } else {
                log.debug("设备【" + deviceIpPort + "】布防成功");
            }
        }
        return lAlarmHandle;
    }
    /**
     * æ³¨é”€
     *
     * @param lUserID è®¾å¤‡æ³¨å†ŒæˆåŠŸå”¯ä¸€æ ‡è¯†ç¬¦
     */
    public static void logout(int lUserID) {
        // æ³¨é”€
        hCNetSDK.NET_DVR_Logout(lUserID);
        // é‡Šæ”¾sdk资源
        hCNetSDK.NET_DVR_Cleanup();
    }
    /**
     * æŠ“图
     *
     * @param cmd æŠ“图命令
     */
    public static String picCutCate(CameraCmd cmd) {
        String cameraId = cmd.getCameraId();
        Integer channelNum = cmd.getChannelNum();
        if (!GlobalVariable.loginMap.containsKey(cameraId)) {
            return "";
        }
        Integer userId = GlobalVariable.loginMap.get(cameraId);
        //图片信息
        HCNetSDK.NET_DVR_JPEGPARA jpeg = new HCNetSDK.NET_DVR_JPEGPARA();
        //设置图片分辨率
        //图片尺寸:0-CIF(352*288/352*240),1-QCIF(176*144/176*120),2-4CIF(704*576/704*480)或D1(720*576/720*486),3-UXGA(1600*1200),
        // 4-SVGA(800*600),5-HD720P(1280*720),6-VGA(640*480),7-XVGA(1280*960),8-HD900P(1600*900),9-HD1080P(1920*1080),10-2560*1920,
        // 11-1600*304,12-2048*1536,13-2448*2048,14-2448*1200,15-2448*800,16-XGA(1024*768),17-SXGA(1280*1024),18-WD1(960*576/960*480),
        // 19-1080I(1920*1080),20-576*576,21-1536*1536,22-1920*1920,23-320*240,24-720*720,25-1024*768,26-1280*1280,27-1600*600,
        // 28-2048*768,29-160*120,75-336*256,78-384*256,79-384*216,80-320*256,82-320*192,83-512*384,127-480*272,128-512*272, 161-288*320,
        // 162-144*176,163-480*640,164-240*320,165-120*160,166-576*720,167-720*1280,168-576*960,180-180*240, 181-360*480, 182-540*720,
        // 183-720*960, 184-960*1280, 185-1080*1440, 500-384*288, 0xff-Auto(使用当前码流分辨率)
        jpeg.wPicSize = 0;
        //设置图片质量:0-最好,1-较好,2-一般
        jpeg.wPicQuality = 0;
        IntByReference a = new IntByReference();
        //设置图片大小
        ByteBuffer jpegBuffer = ByteBuffer.allocate(1024 * 1024);
        // æŠ“图到内存,单帧数据捕获并保存成JPEG存放在指定的内存空间中
        // log.debug("-----------这里开始封装 NET_DVR_CaptureJPEGPicture_NEW---------");
        boolean is = hCNetSDK.NET_DVR_CaptureJPEGPicture_NEW(userId, channelNum, jpeg, jpegBuffer, 1024 * 1024, a);
        //log.debug("-----------这里开始图片存入内存----------" + is);
        if (is) {
            //  log.debug("hksdk(抓图)-结果状态值(0表示成功):" + hCNetSDK.NET_DVR_GetLastError());
            byte[] array = jpegBuffer.array();
            //存储到minio
            String ContentType = "image/JPEG";
            InputStream input = new ByteArrayInputStream(array);
            String url = "";
            try {
                boolean b = MinioUtil.uploadObject(cmd.getBucketName(), cmd.getObjectName(), input,input.available(), ContentType);
                if (b) {
                    url = MinioUtil.getBucketObjectUrl(cmd.getBucketName(), cmd.getObjectName());
                   // log.debug("上传文件成功!" + url);
                }
            } catch (Exception ex) {
                log.error("上传文件异常:" + ex.getMessage());
            }
            return url;
        } else {
            int code = hCNetSDK.NET_DVR_GetLastError();
            log.debug("抓图失败,请稍后重试" + code);
            return "";
        }
    }
    /**
     * èŽ·å–é˜²åŒºåç§°
     * é€šé“号==防区号 ä»Ž0开始
     * åˆ˜è‹ä¹‰
     * 2023/7/6 10:48
     */
    public static String getDefenseZoneName(CameraCmd cmd) {
        String name = "";
        try {
            String cameraId = cmd.getCameraId();
            Integer channelNum = cmd.getWZoneIndex();//通道号==防区号
            if (!GlobalVariable.loginMap.containsKey(cameraId)) {
                return name;
            }
            Integer userId = GlobalVariable.loginMap.get(cameraId);
            HCNetSDK.NET_DVR_ALARMIN_PARAM netDvrAlarminParam = new HCNetSDK.NET_DVR_ALARMIN_PARAM();
            Pointer point = netDvrAlarminParam.getPointer();
            IntByReference ibrBytesReturned = new IntByReference();
            netDvrAlarminParam.write();
            boolean b = hCNetSDK.NET_DVR_GetDVRConfig(userId, HCNetSDK.NET_DVR_GET_ALARMIN_PARAM, channelNum, point, netDvrAlarminParam.size(), ibrBytesReturned);
            if (b) {
                netDvrAlarminParam.read();
                name = ByteUtils.bytesToStringZh(netDvrAlarminParam.byName);
            } else {
                int error = hCNetSDK.NET_DVR_GetLastError();
                log.info("获取防区名称失败:" + error);
            }
        } catch (Exception ex) {
            log.error("获取防区名称异常:" + ex.getMessage());
        }
        return name;
    }
package com.ard.utils.hiksdk.service.impl;
import com.ard.alarm.camera.domain.ArdCameras;
import com.ard.alarm.camera.domain.CameraCmd;
import com.ard.alarm.external.domain.ArdEquipExternal;
import com.ard.utils.minio.MinioUtil;
import com.ard.utils.other.ByteUtils;
import com.ard.utils.hiksdk.common.GlobalVariable;
import com.ard.utils.hiksdk.domain.DeviceInfo;
import com.ard.utils.hiksdk.util.hikSdkUtil.HCNetSDK;
import com.ard.utils.spring.SpringUtils;
import com.sun.jna.Native;
import com.sun.jna.Platform;
import com.sun.jna.Pointer;
import com.sun.jna.ptr.IntByReference;
import lombok.extern.slf4j.Slf4j;
import java.io.*;
import java.nio.ByteBuffer;
import java.util.*;
/**
 * @ClassName: hikClientServiceImpl
 * @Description: æµ·åº·æ“ä½œå®¢æˆ·ç«¯å®žçŽ°ç±»
 * @Author: Administrator
 * @Date: 2023å¹´01月17日 11:25
 * @Version: 1.2
 **/
@Slf4j(topic = "hikSdk")
public class HikClientUtil {
    public static HCNetSDK hCNetSDK = HCNetSDK.hCNetSDK;
    // æŠ¥è­¦å›žè°ƒå‡½æ•°å®žçް
    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;
    }
    /**
     * @描述 æ³¨å†Œç™»å½• é›†æˆäºŽNET_DVR_Login_V30,支持同步和异步登录
     * @创建人 åˆ˜è‹ä¹‰
     * @创建时间 2023/1/17 16:12
     */
    public static void login(DeviceInfo deviceInfo) {
        // åˆå§‹åŒ–
        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 = deviceInfo.getIp();
        String m_sUsername = deviceInfo.getUsername();
        String m_sPassword = deviceInfo.getPassword();
        short m_sPort = deviceInfo.getPort().shortValue();
        //设置连接时间与重连时间
        hCNetSDK.NET_DVR_SetConnectTime(2000, 1);
        hCNetSDK.NET_DVR_SetReconnect(100000, true);
        //设备信息, è¾“出参数
        HCNetSDK.NET_DVR_DEVICEINFO_V40 m_strDeviceInfo = new HCNetSDK.NET_DVR_DEVICEINFO_V40();
        HCNetSDK.NET_DVR_USER_LOGIN_INFO m_strLoginInfo = new HCNetSDK.NET_DVR_USER_LOGIN_INFO();
        // æ³¨å†Œè®¾å¤‡-登录参数,包括设备地址、登录用户、密码等
        m_strLoginInfo.sDeviceAddress = new byte[HCNetSDK.NET_DVR_DEV_ADDRESS_MAX_LEN];
        System.arraycopy(m_sDeviceIP.getBytes(), 0, m_strLoginInfo.sDeviceAddress, 0, m_sDeviceIP.length());
        m_strLoginInfo.sUserName = new byte[HCNetSDK.NET_DVR_LOGIN_USERNAME_MAX_LEN];
        System.arraycopy(m_sUsername.getBytes(), 0, m_strLoginInfo.sUserName, 0, m_sUsername.length());
        m_strLoginInfo.sPassword = new byte[HCNetSDK.NET_DVR_LOGIN_PASSWD_MAX_LEN];
        System.arraycopy(m_sPassword.getBytes(), 0, m_strLoginInfo.sPassword, 0, m_sPassword.length());
        m_strLoginInfo.wPort = m_sPort;
        m_strLoginInfo.byVerifyMode = 0;
        m_strLoginInfo.byLoginMode = 0;
        //是否异步登录:0- å¦ï¼Œ1- æ˜¯  windowsSDK里是true和false
        m_strLoginInfo.bUseAsynLogin = true;
        //异步登录回调
        m_strLoginInfo.cbLoginResult = new LoginResultCallBack(deviceInfo);
        m_strLoginInfo.write();
        int i = hCNetSDK.NET_DVR_Login_V40(m_strLoginInfo, m_strDeviceInfo);
        if (i < 0) {
            int errorCode = hCNetSDK.NET_DVR_GetLastError();
            log.info("登录异常:" + errorCode);
        }
    }
    /**
     * @描述 ç”¨æˆ·æ³¨é”€
     * @创建人 åˆ˜è‹ä¹‰
     * @创建时间 2023/1/17 16:12
     */
    public static void logout(DeviceInfo deviceInfo) {
        String deviceIpPort = deviceInfo.getIp() + ":" + deviceInfo.getPort();
        //撤防
        if (GlobalVariable.alarmMap.containsKey(deviceInfo.getDeviceId())) {
            Integer lAlarmHandle = GlobalVariable.alarmMap.get(deviceInfo.getDeviceId());
            boolean b = hCNetSDK.NET_DVR_CloseAlarmChan_V30(lAlarmHandle);
            if (b) {
                log.debug("设备【" + deviceIpPort + "】撤防成功");
            }
        }
        //登出
        if (GlobalVariable.loginMap.containsKey(deviceInfo.getDeviceId())) {
            Integer lUserID = GlobalVariable.loginMap.get(deviceInfo.getDeviceId());
            boolean b = hCNetSDK.NET_DVR_Logout(lUserID);
            if (b) {
                log.debug("设备【" + deviceIpPort + "】注销成功");
            }
        }
    }
    /**
     * @描述 ç™»å½•所有相机
     * @创建人 åˆ˜è‹ä¹‰
     * @创建时间 2023/2/3 10:10
     */
    public static void loginAllCamera(List<ArdCameras> ardCameras) {
        try {
            for (ArdCameras camera : ardCameras) {
                Thread.sleep(100);
                DeviceInfo info = new DeviceInfo();
                info.setDeviceId(camera.getId());
                info.setIp(camera.getIp());
                info.setPort(camera.getPort());
                info.setUsername(camera.getUsername());
                info.setPassword(camera.getPassword());
                login(info);
                String key = camera.getIp() + ":" + camera.getPort();
                GlobalVariable.cameraMap.put(key, camera);
            }
        } catch (Exception ex) {
            log.error("初始化登录相机异常:" + ex.getMessage());
        }
    }
    /**
     * @描述 ç™»å‡ºæ‰€æœ‰ç›¸æœº
     * @创建人 åˆ˜è‹ä¹‰
     * @创建时间 2023/2/3 10:10
     */
    public static void logoutAllCamera(List<ArdCameras> ardCameras) {
        try {
            for (ArdCameras camera : ardCameras) {
                Thread.sleep(100);
                DeviceInfo info = new DeviceInfo();
                info.setDeviceId(camera.getId());
                info.setIp(camera.getIp());
                info.setPort(camera.getPort());
                info.setUsername(camera.getUsername());
                info.setPassword(camera.getPassword());
                logout(info);
                String key = camera.getIp() + ":" + camera.getPort();
                GlobalVariable.cameraMap.remove(key);
            }
        } catch (Exception ex) {
            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);
//
//                String key=accessControlHost.getIp()+":"+accessControlHost.getPort();
//                GlobalVariable.accessHostMap.put(key, accessControlHost);
            }
        } 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);
//                String key=accessControlHost.getIp()+":"+accessControlHost.getPort();
//                GlobalVariable.accessHostMap.remove(key);
            }
        } catch (Exception ex) {
            log.error("初始化报警主机异常:" + ex.getMessage());
        }
    }
    /**
     * å»ºç«‹å¸ƒé˜²ä¸Šä¼ é€šé“,用于传输数据
     *
     * @param lUserID      å”¯ä¸€æ ‡è¯†ç¬¦
     * @param lAlarmHandle æŠ¥è­¦å¤„理器
     */
    public static int setupAlarmChan(String deviceIpPort, int lUserID, int lAlarmHandle) {
        // æ ¹æ®è®¾å¤‡æ³¨å†Œç”Ÿæˆçš„lUserID建立布防的上传通道,即数据的上传通道
        if (lUserID == -1) {
            log.error("请先注册");
            return lUserID;
        }
        if (lAlarmHandle < 0) {
            // è®¾å¤‡å°šæœªå¸ƒé˜²,需要先进行布防
            if (fMSFCallBack_V31 == null) {
                fMSFCallBack_V31 = new FMSGCallBack();
                if (!hCNetSDK.NET_DVR_SetDVRMessageCallBack_V50(0, fMSFCallBack_V31, null)) {
                    log.error("设置回调函数失败!错误码==========》" + hCNetSDK.NET_DVR_GetLastError());
                }
            }
            // è¿™é‡Œéœ€è¦å¯¹è®¾å¤‡è¿›è¡Œç›¸åº”的参数设置,不设置或设置错误都会导致设备注册失败
            HCNetSDK.NET_DVR_SETUPALARM_PARAM m_strAlarmInfo = new HCNetSDK.NET_DVR_SETUPALARM_PARAM();
            m_strAlarmInfo.dwSize = m_strAlarmInfo.size();
            // æ™ºèƒ½äº¤é€šå¸ƒé˜²ä¼˜å…ˆçº§ï¼š0 - ä¸€ç­‰çº§ï¼ˆé«˜ï¼‰ï¼Œ1 - äºŒç­‰çº§ï¼ˆä¸­ï¼‰ï¼Œ2 - ä¸‰ç­‰çº§ï¼ˆä½Žï¼‰
            m_strAlarmInfo.byLevel = 2;
            // æ™ºèƒ½äº¤é€šæŠ¥è­¦ä¿¡æ¯ä¸Šä¼ ç±»åž‹ï¼š0 - è€æŠ¥è­¦ä¿¡æ¯ï¼ˆNET_DVR_PLATE_RESULT), 1 - æ–°æŠ¥è­¦ä¿¡æ¯(NET_ITS_PLATE_RESULT)
            m_strAlarmInfo.byAlarmInfoType = 1;
            // å¸ƒé˜²ç±»åž‹(仅针对门禁主机、人证设备):0 - å®¢æˆ·ç«¯å¸ƒé˜²(会断网续传),1 - å®žæ—¶å¸ƒé˜²(只上传实时数据)
            m_strAlarmInfo.byDeployType = 1;
            m_strAlarmInfo.write();
            // å¸ƒé˜²æˆåŠŸï¼Œè¿”å›žå¸ƒé˜²æˆåŠŸçš„æ•°æ®ä¼ è¾“é€šé“å·
            lAlarmHandle = hCNetSDK.NET_DVR_SetupAlarmChan_V41(lUserID, m_strAlarmInfo);
            if (lAlarmHandle == -1) {
                log.error("设备【" + deviceIpPort + "】布防失败,错误码==========》" + hCNetSDK.NET_DVR_GetLastError());
            } else {
                log.debug("设备【" + deviceIpPort + "】布防成功");
            }
        }
        return lAlarmHandle;
    }
    /**
     * æ³¨é”€
     *
     * @param lUserID è®¾å¤‡æ³¨å†ŒæˆåŠŸå”¯ä¸€æ ‡è¯†ç¬¦
     */
    public static void logout(int lUserID) {
        // æ³¨é”€
        hCNetSDK.NET_DVR_Logout(lUserID);
        // é‡Šæ”¾sdk资源
        hCNetSDK.NET_DVR_Cleanup();
    }
    /**
     * æŠ“图
     *
     * @param cmd æŠ“图命令
     */
    public static String picCutCate(CameraCmd cmd) {
        String cameraId = cmd.getCameraId();
        Integer channelNum = cmd.getChannelNum();
        if (!GlobalVariable.loginMap.containsKey(cameraId)) {
            return "";
        }
        Integer userId = GlobalVariable.loginMap.get(cameraId);
        //图片信息
        HCNetSDK.NET_DVR_JPEGPARA jpeg = new HCNetSDK.NET_DVR_JPEGPARA();
        //设置图片分辨率
        //图片尺寸:0-CIF(352*288/352*240),1-QCIF(176*144/176*120),2-4CIF(704*576/704*480)或D1(720*576/720*486),3-UXGA(1600*1200),
        // 4-SVGA(800*600),5-HD720P(1280*720),6-VGA(640*480),7-XVGA(1280*960),8-HD900P(1600*900),9-HD1080P(1920*1080),10-2560*1920,
        // 11-1600*304,12-2048*1536,13-2448*2048,14-2448*1200,15-2448*800,16-XGA(1024*768),17-SXGA(1280*1024),18-WD1(960*576/960*480),
        // 19-1080I(1920*1080),20-576*576,21-1536*1536,22-1920*1920,23-320*240,24-720*720,25-1024*768,26-1280*1280,27-1600*600,
        // 28-2048*768,29-160*120,75-336*256,78-384*256,79-384*216,80-320*256,82-320*192,83-512*384,127-480*272,128-512*272, 161-288*320,
        // 162-144*176,163-480*640,164-240*320,165-120*160,166-576*720,167-720*1280,168-576*960,180-180*240, 181-360*480, 182-540*720,
        // 183-720*960, 184-960*1280, 185-1080*1440, 500-384*288, 0xff-Auto(使用当前码流分辨率)
        jpeg.wPicSize = 0;
        //设置图片质量:0-最好,1-较好,2-一般
        jpeg.wPicQuality = 0;
        IntByReference a = new IntByReference();
        //设置图片大小
        ByteBuffer jpegBuffer = ByteBuffer.allocate(1024 * 1024);
        // æŠ“图到内存,单帧数据捕获并保存成JPEG存放在指定的内存空间中
        // log.debug("-----------这里开始封装 NET_DVR_CaptureJPEGPicture_NEW---------");
        boolean is = hCNetSDK.NET_DVR_CaptureJPEGPicture_NEW(userId, channelNum, jpeg, jpegBuffer, 1024 * 1024, a);
        //log.debug("-----------这里开始图片存入内存----------" + is);
        if (is) {
            //  log.debug("hksdk(抓图)-结果状态值(0表示成功):" + hCNetSDK.NET_DVR_GetLastError());
            byte[] array = jpegBuffer.array();
            //存储到minio
            String ContentType = "image/JPEG";
            InputStream input = new ByteArrayInputStream(array);
            String url = "";
            try {
                boolean b = MinioUtil.uploadObject(cmd.getBucketName(), cmd.getObjectName(), input,input.available(), ContentType);
                if (b) {
                    url = MinioUtil.getBucketObjectUrl(cmd.getBucketName(), cmd.getObjectName());
                   // log.debug("上传文件成功!" + url);
                }
            } catch (Exception ex) {
                log.error("上传文件异常:" + ex.getMessage());
            }
            return url;
        } else {
            int code = hCNetSDK.NET_DVR_GetLastError();
            log.debug("抓图失败,请稍后重试" + code);
            return "";
        }
    }
    /**
     * èŽ·å–é˜²åŒºåç§°
     * é€šé“号==防区号 ä»Ž0开始
     * åˆ˜è‹ä¹‰
     * 2023/7/6 10:48
     */
    public static String getDefenseZoneName(CameraCmd cmd) {
        String name = "";
        try {
            String cameraId = cmd.getCameraId();
            Integer channelNum = cmd.getWZoneIndex();//通道号==防区号
            if (!GlobalVariable.loginMap.containsKey(cameraId)) {
                return name;
            }
            Integer userId = GlobalVariable.loginMap.get(cameraId);
            HCNetSDK.NET_DVR_ALARMIN_PARAM netDvrAlarminParam = new HCNetSDK.NET_DVR_ALARMIN_PARAM();
            Pointer point = netDvrAlarminParam.getPointer();
            IntByReference ibrBytesReturned = new IntByReference();
            netDvrAlarminParam.write();
            boolean b = hCNetSDK.NET_DVR_GetDVRConfig(userId, HCNetSDK.NET_DVR_GET_ALARMIN_PARAM, channelNum, point, netDvrAlarminParam.size(), ibrBytesReturned);
            if (b) {
                netDvrAlarminParam.read();
                name = ByteUtils.bytesToStringZh(netDvrAlarminParam.byName);
            } else {
                int error = hCNetSDK.NET_DVR_GetLastError();
                log.info("获取防区名称失败:" + error);
            }
        } catch (Exception ex) {
            log.error("获取防区名称异常:" + ex.getMessage());
        }
        return name;
    }
}
src/main/java/com/ard/utils/hiksdk/util/hikSdkUtil/HCNetSDK.java
ÎļþÌ«´ó
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
@@ -1,74 +1,74 @@
# å¼€å‘环境
server:
  port: 8088
# spring配置
spring:
  servlet:
    multipart:
      enabled: true
      max-file-size: 30MB
      max-request-size: 30MB
  datasource:
    druid:
      #开启druid监控web
      stat-view-servlet:
        enabled: true
      driver-class-name: org.postgresql.Driver
      url: jdbc:postgresql://192.168.2.15:5432/ry-vue
      username: postgres
      password: postgres
      #最大连接数
      maxActive: 30
      #最小连接数
      minIdle: 5
      #获取连接的最大等待时间
      maxWait: 10000
      #解决mysql8小时的问题
      validation-query: SELECT 'X'
      #空闲连接的检查时间间隔
      timeBetweenEvictionRunsMillis: 60000
      #空闲连接最小空闲时间
      minEvictableIdleTimeMillis: 300000
  # netty配置
  netty:
    udp:
      port: 40000
      enabled: true
    tcp:
      enabled: true
  # mqtt配置
  mqtt:
    host: tcp://192.168.2.15:1883
    clientId: client-227
    username: admin
    password: admin
    timeout: 100
    keepalive: 60
    enabled: true
  # ç›—电接口地址
  stealelec:
    enabled: true
    url: http://iot.zhdk.net:8090/Warning/GetWarning?userName=cy4oil
  # ä¸‰åŽ‚æ•°å­—åŒ–åœ°å€
  digitization3:
    enabled: true
  # minio配置
  minio:
    endpoint: http://192.168.2.15:9001
    accessKey: admin
    secretKey: xzx12345
# mybatis-plus配置
mybatis-plus:
  type-aliases-package: com.ard.alarm.**.domain
  mapper-locations: classpath:/mapper/*.xml
# æ—¥å¿—等级配置
logging:
  level:
    hikSdk: info
    mqtt: info
    netty: info
    external: info
    camera: info
    tube: info
    digitization3: info
    stealAlarm: info
# å¼€å‘环境
server:
  port: 8088
# spring配置
spring:
  servlet:
    multipart:
      enabled: true
      max-file-size: 30MB
      max-request-size: 30MB
  datasource:
    druid:
      #开启druid监控web
      stat-view-servlet:
        enabled: true
      driver-class-name: org.postgresql.Driver
      url: jdbc:postgresql://192.168.2.15:5432/ry-vue
      username: postgres
      password: postgres
      #最大连接数
      maxActive: 30
      #最小连接数
      minIdle: 5
      #获取连接的最大等待时间
      maxWait: 10000
      #解决mysql8小时的问题
      validation-query: SELECT 'X'
      #空闲连接的检查时间间隔
      timeBetweenEvictionRunsMillis: 60000
      #空闲连接最小空闲时间
      minEvictableIdleTimeMillis: 300000
  # netty配置
  netty:
    udp:
      port: 40000
      enabled: true
    tcp:
      enabled: true
  # mqtt配置
  mqtt:
    host: tcp://192.168.2.15:1883
    clientId: client-2272
    username: admin
    password: admin
    timeout: 100
    keepalive: 60
    enabled: true
  # ç›—电接口地址
  stealelec:
    enabled: true
    url: http://iot.zhdk.net:8090/Warning/GetWarning?userName=cy4oil
  # ä¸‰åŽ‚æ•°å­—åŒ–åœ°å€
  digitization3:
    enabled: true
  # minio配置
  minio:
    endpoint: http://192.168.2.15:9001
    accessKey: admin
    secretKey: xzx12345
# mybatis-plus配置
mybatis-plus:
  type-aliases-package: com.ard.alarm.**.domain
  mapper-locations: classpath:/mapper/*.xml
# æ—¥å¿—等级配置
logging:
  level:
    hikSdk: debug
    mqtt: info
    netty: info
    external: 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.dll
Binary files differ
src/main/resources/lib/win64/sdk/GdiPlus.dll
Binary files differ
src/main/resources/lib/win64/sdk/HCCore.dll
Binary files differ
src/main/resources/lib/win64/sdk/HCNetSDK.dll
Binary files differ
src/main/resources/lib/win64/sdk/HCNetSDKCom/AnalyzeData.dll
Binary files differ
src/main/resources/lib/win64/sdk/HCNetSDKCom/AudioIntercom.dll
Binary files differ
src/main/resources/lib/win64/sdk/HCNetSDKCom/AudioRender.dll
Binary files differ
src/main/resources/lib/win64/sdk/HCNetSDKCom/HCAlarm.dll
Binary files differ
src/main/resources/lib/win64/sdk/HCNetSDKCom/HCAlarm.lib
Binary files differ
src/main/resources/lib/win64/sdk/HCNetSDKCom/HCCoreDevCfg.dll
Binary files differ
src/main/resources/lib/win64/sdk/HCNetSDKCom/HCDisplay.dll
Binary files differ
src/main/resources/lib/win64/sdk/HCNetSDKCom/HCGeneralCfgMgr.dll
Binary files differ
src/main/resources/lib/win64/sdk/HCNetSDKCom/HCGeneralCfgMgr.lib
Binary files differ
src/main/resources/lib/win64/sdk/HCNetSDKCom/HCIndustry.dll
Binary files differ
src/main/resources/lib/win64/sdk/HCNetSDKCom/HCPlayBack.dll
Binary files differ
src/main/resources/lib/win64/sdk/HCNetSDKCom/HCPreview.dll
Binary files differ
src/main/resources/lib/win64/sdk/HCNetSDKCom/HCPreview.lib
Binary files differ
src/main/resources/lib/win64/sdk/HCNetSDKCom/HCVoiceTalk.dll
Binary files differ
src/main/resources/lib/win64/sdk/HCNetSDKCom/OpenAL32.dll
Binary files differ
src/main/resources/lib/win64/sdk/HCNetSDKCom/StreamTransClient.dll
Binary files differ
src/main/resources/lib/win64/sdk/HCNetSDKCom/SystemTransform.dll
Binary files differ
src/main/resources/lib/win64/sdk/HCNetSDKCom/libiconv2.dll
Binary files differ
src/main/resources/lib/win64/sdk/HXVA.dll
Binary files differ
src/main/resources/lib/win64/sdk/HmMerge.dll
Binary files differ
src/main/resources/lib/win64/sdk/ImageAlg.dll
Binary files differ
src/main/resources/lib/win64/sdk/Infra.dll
Binary files differ
src/main/resources/lib/win64/sdk/IvsDrawer.dll
Binary files differ
src/main/resources/lib/win64/sdk/MP_Render.dll
Binary files differ
src/main/resources/lib/win64/sdk/NPQos.dll
Binary files differ
src/main/resources/lib/win64/sdk/OpenAL32.dll
copy 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.dll
Binary files differ
src/main/resources/lib/win64/sdk/RenderEngine.dll
Binary files differ
src/main/resources/lib/win64/sdk/StreamConvertor.dll
Binary files differ
src/main/resources/lib/win64/sdk/SuperRender.dll
Binary files differ
src/main/resources/lib/win64/sdk/YUVProcess.dll
Binary files differ
src/main/resources/lib/win64/sdk/avnetsdk.dll
Binary files differ
src/main/resources/lib/win64/sdk/dhconfigsdk.dll
Binary files differ
src/main/resources/lib/win64/sdk/dhnetsdk.dll
Binary files differ
src/main/resources/lib/win64/sdk/dhplay.dll
Binary files differ
src/main/resources/lib/win64/sdk/hlog.dll
Binary files differ
src/main/resources/lib/win64/sdk/hpr.dll
Binary files differ
src/main/resources/lib/win64/sdk/libcrypto-1_1-x64.dll
Binary files differ
src/main/resources/lib/win64/sdk/libmmd.dll
Binary files differ
src/main/resources/lib/win64/sdk/libssl-1_1-x64.dll
Binary files differ
src/main/resources/lib/win64/sdk/zlib1.dll
Binary files differ