文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

基于海康威视的SDK实现二次开发

2023-09-02 07:00

关注

文章目录

前言

因为网上关于海康威视SDK这块的开发资源比较少,自己也是一步一步摸索过来,知道那种痛苦,
所以把自己的一些过来人的经验写出来供大家学习参考

1.对接海康威视的SDK

进入海康威视官网

在这里插入图片描述

下载你所需要的SDK开发包(这里我就用windows来作为案列)

在这里插入图片描述

下载完SDK解压

里面有开发文档和SDK的动态库文件,有各种开发语言的Demo案列。(可以参考一下他的接口调用)

在这里插入图片描述

注:这里需要注意的是开发文档,很重要!里面有一份文档接口的API,和各种编程指南

运行Demo示例

这里我使用的语言是Java,通过他的提示导入所需要的dll文件

在这里插入图片描述

在这里插入图片描述

这里可以参考一下我导入的文件

注:这两个jar包需要编译

在这里插入图片描述

注:导入成功之后如果能正确运行Demo并且能够通过海康威视的摄像头进行预览的话说明导入的文件是正确的

在这里插入图片描述

开发接口之前的环境配置

现在就可以进行自己的开发节奏了。记住上面那两个jar包,和lib文件夹里面的那些文件。

  1. 创建一个springboot项目

  2. 把lib包放到springboot项目中的resources文件中

  3. 编译那两个jar包(这里建议是使用mvn的命令把jar包打入到自己的maven仓库会比较好一点)

    mvm install:install-file     -Dfile=你jar包的路径\examples.jar     -DgroupId=com.xx.xx     -DartifactId=examples    -Dversion=1.0-SNAPSHOT     -Dpackaging=jar

    不导入的话也可以直接编译到项目中去,或者使用maven的路径引用

        examples    examples    1.0    system    ${basedir}/src/main/resources/lib/examples.jar     jna     jna     1.0     system     ${basedir}/src/main/resources/lib/jna.jar
  4. 加载SDK库

    注:这个接口就是后面开发用到的海康威视的SDK

    在这里插入图片描述

    在这里添加这句代码

    HCNetSDK INSTANCE = (HCNetSDK) Native.loadLibrary(CommonKit.getWebPath() + "HCNetSDK.dll", HCNetSDK.class);

    这里我才用的是用动态获取路径的方式来加载的。

    注:这里的路径很重要,如果不行的话可以配置为绝对路径

    public class CommonKit {public static String getWebPath() {return CommonKit.class.getClassLoader().getResource("").getPath().substring(1) + "lib/}}

开始基于海康威视SDK的开发

注:这里面的SDK其实是一个大杂烩,里面有很多接口其中有摄像头的预览,视频的下载和语言的播报等接口

  1. 编写工具类

    通过读取海康威视的开发文档我们得知调用海康威视的SDK接口的时候需要初始化,完成操作之后需要释放资源。

    在实际开发中项目一般是一直运行的,所以这里我用了spring的两个注解,在项目启动时候初始化,结束项目运行

    的时候释放资源。这样就不用每一次操作都去初始化和释放资源了。

    注:这两个方法是必须的,所有的接口执行都需要初始化

    这里只是初始化和释放资源的代码,其他的方法按照自己的业务逻辑来进行完善。

    @Slf4j@Componentpublic class HikvisionUtil {private static final HCNetSDK hcNetSDK = HCNetSDK.INSTANCE;    @PostConstruct    public void init() {        boolean flag = hcNetSDK.NET_DVR_Init();        String message = flag ? "成功" : "失败";        log.info("摄像头初始化" + message);    }        @PreDestroy    public void leanup() {        boolean flag = hcNetSDK.NET_DVR_Cleanup();        String message = flag ? "成功" : "失败";        log.info("摄像头关闭资源" + message);    }}
  2. 如何排错?

    新手在开发的时候可能会发生很多错误,这里我的建议是通过打印报错编码和日志来进行排查错误

    这个接口能够返回你上一次失败操作的错误码

    hcNetSDK.NET_DVR_GetLastError()

    得到错误码,拿到报错的海康SDK接口去他的文档进行查阅

    这里我用登录接口来举一个例子

在这里插入图片描述

通过错误码就能够正确的找到错误的原因。

2.总结海康威视的开发

第一次对接SDK的常见问题

  1. 怎么完善海康威视的后续开发?

    一般的情况都是基于摄像头进行开发,在对摄像头进行开发的话建议查看此文档,里面有接口调用顺序和参数说明,基于文档完善上面的工具类。

在这里插入图片描述

在这里插入图片描述

  1. 如何部署到Linux服务器上面?

    首先HCNetSDK接口类需要继承Library,经过本人的尝试最新版本的SDK,
    继承Library可以同时支持windows和Linux两种环境

在这里插入图片描述

如果需要部署到Linux服务器上面的话,需要下载Linux那一套SDK

下载SDK

注:Linux下面是so文件

在这里插入图片描述

  1. 对接海康摄像头出现 java.lang.Error: Structure.getFieldOrder()

    Exception in thread "threadPoolTaskExecutor-1" java.lang.Error: Structure.getFieldOrder() on class com.ruoyi.web.equipment.hk.HCNetSDK$NET_DVR_USER_LOGIN_INFO does not provide enough names [0] ([]) to match declared fields [15] ([bUseAsynLogin, byHttps, byLoginMode, byProxyType, byRes2, byUseTransport, byUseUTCTime, byVerifyMode, cbLoginResult, iProxyID, pUser, sDeviceAddress, sPassword, sUserName, wPort])

    注:这个问题是因为海康jna.jar比较老,结构体定义没有getFiledOrder,可创建一个类继承 Structure

    import com.sun.jna.Structure;import java.lang.reflect.Field;import java.lang.reflect.Modifier;import java.util.ArrayList;import java.util.List;public class HIKSDKStructure extends Structure {    protected List<String> getFieldOrder(){        List<String> fieldOrderList = new ArrayList<String>();        for (Class<?> cls = getClass();             !cls.equals(HIKSDKStructure.class);             cls = cls.getSuperclass()) {            Field[] fields = cls.getDeclaredFields();            int modifiers;            for (Field field : fields) {                modifiers = field.getModifiers();                if (Modifier.isStatic(modifiers) || !Modifier.isPublic(modifiers)) {                    continue;                }                fieldOrderList.add(field.getName());            }        }        return fieldOrderList;    }}

    然后对 HCNetSDK 接口中的静态类里面,所有继承 Structure 替换为 HIKSDKStructure 即可

3.后续完善

摄像头在前端的预览

摄像头的截图功能

摄像头的手动录像功能

摄像头的回放下载功能


目前就写这么多吧,本文是一篇入门介绍文,因为网上关于这块的资料很少,

所以真心帮助那些和我一样一开始就接触对接硬件开发的程序员了解大概开发的流程。

注:一定要多看文档,海康威视文档算比较详细的那种了。

有后续有开发问题的话可以在下方留言,或者咨询本人的163邮箱18375669585@163.com

最后:七夕节还在写博客,写文不易求大家给小弟个赞🤞

来源地址:https://blog.csdn.net/weixin_44738214/article/details/126168881

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯