JAVA Spring Boot与海康威视摄像头的故事

前言:JAVA Spring Boot与海康威视摄像头的故事

这两天因工作原因,需要对海康威视摄像头进行二次开发。说实话,刚打开开发手册的那一刻,很劝退。由于之前接触硬件开发不多,对于其中的嵌入式设备SDK、DLL动态组件库的内容不甚了解。挠破了头皮,冲!

关于本贴#

刚开始的时候,真的是一步一个坑,虽说网上有相关教程以及官方的DEMO和文档。但是对于我这样的新手来说这些还是需要踩很多的坑。所以我决定使用博客文章的形式,来记录一下自己的学习过程以及遇到的问题,万一除了自己还有其他人需要,避免重复踩坑。话不多说,内容开始:

干货部分#

首先我这边需要做的任务内容是基于海康sdk在java Spring boot 的集成开发,暂不需要开发前台展示,所需要的也只是抓拍(车辆与人员信息等)这一部分。那么我这边就参考官方文档以及对应demo,展开描述。

官方文档以及SDK下载地址:海康威视官方SDK下载地址

进入官网,选择sdk下载:#

在这里插入图片描述

下载所需要的开发包(以下教程以windows为例):#

在这里插入图片描述

下载完SDK解压并打开#

在这里插入图片描述

打开后,红色区域的三个文件夹是重点内容。其中:Demo文件中存放官方Demo示例,对后续开发具有参考。开发文档中存放了各种接口的API,和各种编程指南。库文件中存放了下述步骤中所需要的dll动态库以及jar包。

运行Demo#

打开Demo文件夹,找到对应的Java语言。通过他的提示导入所需要的dll文件。
在这里插入图片描述
然后找到Demo文件的启动文件,运行并启动。
在这里插入图片描述

注意这边启动后,可能会出现因为jar包未引入的错误。#

点击项目设置
在这里插入图片描述
在这里插入图片描述
选择要添加jar包的项目,然后点击右边的“+”按钮,找到Demo文件中lib中的jar包存放路径,选择后点击ok。
在这里插入图片描述
没看明白?没关系,看这里:idea 引入jar包

项目创建#

  1. 创建Spring boot 项目(基础操作,不多赘述)。

引入SDK#

  1. 将上述步骤下载好的官方demo中的sdk文件夹放到自己的项目中(一般都放在lib文件夹中,这个理论上放哪里都行只要配置好路径能正确找到)。这里边放置的是需要的dll动态库文件,以及jna.jar、examples.jar等所需要的jar包文件。大概如图(动态库和jar包放一块就行):
  2. pom文件中引入
    <!--resources文件夹配置-->
        <resources>
            <!--将lib目录编译到对应的jar的依赖目录下-->
            <resource>
                <directory>${project.basedir}/lib</directory>
                <targetPath>BOOT-INF/lib/</targetPath>
                <includes>
                    <include>**/*.jar</include>
                </includes>
            </resource>

            <!--将lib目录打包到target目录的lib文件夹下-->
            <resource>
                <directory>${project.basedir}/lib</directory>
                <targetPath>../lib</targetPath>
            </resource>

            <!--让resources资源目录下的配置文件生效-->
            <resource>
                <directory>${basedir}/src/main/resources</directory>
            </resource>
        </resources>

在这里插入图片描述

关于jar包以及SDK文件。#

海康威视官方提供的设备网络SDK是封装的动态链接库(Windows的dll或者Linux的so),各种开发语言对接SDK,都是通过加载动态库链接,调用动态库中的接口实现功能模块对接。而Java与dll之间的引用并不友好,所以,需要利用上述中引入的jna.jar来辅助我们的代码操作。


通过JNA的方式调用动态链接库中的接口,JNA(Java Native Access)框架是SUN公司主导开发的开源java框架,是建立在JNI的基础上的一个框架,JNA框架提供了一组java工具类用于在运行期间动态访问动态链接库(native library:如Window的dll、Linux的so),实现在java语言中调用C/C++语言封装的接口,java开发人员只需要在一个java接口中描述目标native library的函数与结构,JNA将自动实现Java接口到native function的映射,而不需要编写任何Native/JNI代码,大大降低了Java调用动态链接库的开发难度。相比于JNI的方式,JNA大大简化了调用本地方法的过程,使用很方便,基本上不需要脱离Java环境就可以完成。JNA调用C/C++的过程大致如下:
在这里插入图片描述

引入HCNetSDK接口文件#

  1. HCNetSDK接口文件是海康摄像头的接口文件,里边存放了各种api。
    在这里插入图片描述

正式开始#

ok,到了这一步,恭喜你,基础环境配置你已经搞定,接下来就看着接口文档来做自己需要的功能吧。
在这里插入图片描述

实现原理#

  1. 初始化sdk#

在这里插入图片描述

  1. 设置报警回调#

在这里插入图片描述

  1. 用户(设备)注册#

在这里插入图片描述

  1. 注销注册#

  2. 注销sdk使用#

在这里插入图片描述

具体代码实现最好是自己动手,内容参考接口文档以及Demo即可。

下图以交通产品功能示例,其他功能差别不大
在这里插入图片描述
在这里插入图片描述

后续完善#

后续我会继续发布学习的新内容,欢迎大家讨论交流,共同进步。
很高兴可以帮助到有需要的人。

注意事项#

注意:SDK所有回调都是子线程,JNA是弱引用,建议回调函数对象写成全局静态,防止被系统回收
这个一定要注意,我就是踩了这个坑出现各种各样的问题无从排查。后经公司大佬指点迷津。

posted @   三岁6  阅读(1383)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
· SQL Server 2025 AI相关能力初探
历史上的今天:
2022-04-05 python安装第三方库 wordcloud 报错
2020-04-05 HTML 页面的动态线条背景-三岁
2020-04-05 设置博客园主题-三岁
主题色彩
点击右上角即可分享
微信分享提示