文章目录

  • 前言
    • 1.对接海康威视的SDK
      • 进入海康威视官网
      • 下载你所需要的SDK开发包(这里我就用windows来作为案列)
      • 下载完SDK解压
      • 运行Demo示例
      • 开发接口之前的环境配置
      • 开始基于海康威视SDK的开发
    • 2.总结海康威视的开发
      • 第一次对接SDK的常见问题
    • 3.后续完善
      • 摄像头在前端的预览
      • 摄像头的截图功能
      • 摄像头的手动录像功能
      • 摄像头的回放下载功能

前言

因为网上关于海康威视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的路径引用

    <dependency><groupId>examples</groupId><artifactId>examples</artifactId><version>1.0</version><scope>system</scope><systemPath>${basedir}/src/main/resources/lib/examples.jar</systemPath>
    </dependency>
    <dependency><groupId>jna</groupId><artifactId>jna</artifactId><version>1.0</version><scope>system</scope><systemPath>${basedir}/src/main/resources/lib/jna.jar</systemPath>
    </dependency>
    
  4. 加载SDK库

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

    在这里添加这句代码

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

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

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

    public class CommonKit {/*** 获取项目webapp目录* @return String*/public static String getWebPath() {return CommonKit.class.getClassLoader().getResource("").getPath().substring(1) + "lib/}
    }
    

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

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

  1. 编写工具类

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

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

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

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

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

    @Slf4j
    @Component
    public class HikvisionUtil {    private static final HCNetSDK hcNetSDK = HCNetSDK.INSTANCE;/*** 初始化*/@PostConstructpublic void init() {boolean flag = hcNetSDK.NET_DVR_Init();String message = flag ? "成功" : "失败";log.info("摄像头初始化" + message);}/*** 释放资源*/@PreDestroypublic 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。

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

基于海康威视的SDK实现二次开发相关推荐

  1. Linux环境中对海康威视工业相机SDK进行二次开发(QT+CMake+Opencv+海康SDK)

    关于在Windows环境中对海康威视工业相机SDK进行二次开发的话,可以参考这两篇博客. 海康威视工业相机SDK二次开发(VS+Opencv+QT+海康SDK+C++)(一) 海康威视工业相机SDK二 ...

  2. EasyCVR视频融合平台基于宇视SDK进行二次开发的详细步骤

    EasyCVR视频融合平台部署轻快.功能灵活,在视频能力上,可提供视频直播.录像.回放.检索.云存储.级联.告警.对讲等功能.平台可支持多协议.多类型设备接入,包括国标GB28181.RTMP.RTS ...

  3. 基于大华SDK的二次开发,用于网络摄像头图像的实时显示和捕获(附源码)

    目录 1. 文章背景 2. 主要模块 2.1 初始化SDK 2.2 登录账号 2.3 捕获图片 2.4 实时显示 2.5 断开时释放 2.6 回调函数 3. 源代码 3.1 头文件 3.2 源文件 1 ...

  4. 基于Qt的海康威视网络摄像头SDK的二次开发

    最近用Qt做了一个基于海康威视网络摄像头SDK的二次开发,效果还不错.文章最后将开发的资料和demo软件通过链接方式分享,有兴趣的可以看下效果. 开发情况介绍: qt版本:Qt5.14.2 海康SDK ...

  5. 基于Qt的海康威视网络摄像头SDK的二次开发——摄像头登录和预览

    海康威视网络摄像头SDK的二次开发,需要摄像头IP地址,与主机的IP地址在同一网段,能够ping通摄像头IP,才能登录成功.摄像头是有账户名和密码,这需要记住,在开发的时候需要用到. 在开发前可以先用 ...

  6. 基于大恒相机SDK,二次开发

    基于大恒相机SDK,二次开发(C#) 界面如下 有曝光.增益两个参数可以调整(平台是X64) 有问题可以问 看到就回答 using System; using System.Collections.G ...

  7. 基于百度地图sdk的地图app开发(七)——导航和模拟导航

    这是基于百度地图sdk的地图app开发系列博客第七篇 代码仓库位置:https://github.com/YanhuiLu89/lmap.git 上一篇 基于百度地图sdk的地图app开发(六)--路 ...

  8. Python基于周立功盒子的二次开发的封装和调用

    Python基于周立功盒子的二次开发的封装和调用 一.介绍     前面我们介绍如何拿到官网给的例程并使用起来,但在使用的过程中,我们发现官网给的例子非常的冗长,可读性不好,于是我进行分解和封装,使得 ...

  9. 基于百度编辑器Ueditor的二次开发

    基于百度编辑器Ueditor的二次开发 官网下载 基本配置 简化后端配置,不请求后端配置项 后端接口规范 修改图片上传 说明及修改 新增按钮及弹窗(自定义附件上传) 按钮文案修改 在业务开发的时候,曾 ...

最新文章

  1. Datawhale来浙大啦!
  2. 一起学nRF51xx 18 -  蓝牙协议栈烧录
  3. pandas 数据分析使用
  4. U102380-简单数据结构题【Trie】
  5. 计算机系统组织结构,第4章 操作系统计算机组织结构.ppt
  6. 前端学习(2682):重读vue电商网站2之前台启动
  7. node process.env.NODE_ENV 使用 cross-env 配置 设置
  8. 大数据_Flink_数据处理_运行时架构6_slot和并行度的关系---Flink工作笔记0021
  9. 中断服务程序设计实验
  10. JavaScript JSON 对象使用详解、JSON. parse()、JSON. stringify()
  11. [iView warn]: please transfer a valid prop path to form item
  12. 《图书管理系统》软件需求说明书
  13. Android编译时技术(二)ASM 基础使用之代码生成
  14. html怎么把盒子做成超链接,把整个DIV变成超链接
  15. Supermap Iserver 安装指南
  16. Ubuntu常用软件安装与问题解决(持续更新)
  17. 次日即流失?直播App如何运营超级用户?
  18. SSH远程登录报错 IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
  19. docker常用命令-docker start
  20. MMGG吃螃蟹 | Solana上去中心化结构性产品-Exotic

热门文章

  1. spla计算机语言,东亚地区的语言及其文化价值-暨南大学学报.PDF
  2. Q99语言复读机(免费体验版)快捷键版
  3. 计算机cpu的相关知识,电脑CPU的相关知识
  4. Linux中文件权限、所有者、所属组修改
  5. unity3d IGUI下载
  6. linux 6不能自动挂载u盘,Linux CentOS 6.7 挂载U盘
  7. 谈谈我对京东的认识(1):一颗螺丝钉的价值观
  8. 计算机视觉的定义,应用及整个系统
  9. Linux 强制卸载挂载点
  10. 第4章第23节:异形图表:使用三角柱形图制作水果产量比例图 [PowerPoint精美幻灯片实战教程]