海康摄像SDK开发笔记(一):海康威视网络摄像头SDK介绍与模块功能

红胖子(红模仿) 2021-05-04 12:06:49
开发 sdk 发笔 海康 摄像


前言

视频监控、人脸识别等应用中经常使用到摄像头,当前占据主流视频监控摄像头就是海康和大华两家,都可通过自家的sdk或者是onvif方式使用和控制摄像头。
本文章讲解海康的sdk方式。

 

海康

海康(海康威视)是以视频为核心的智能物联网解决方案和大数据服务提供商,在视频行业是当前实打实的老大哥,当然还有大华,其他不多做介绍。

海康设备网络SDK下载

下载地址:https://www.hikvision.com/cn/download_61.html
在这里插入图片描述
在ubuntu16.04 x86_64上开发,下载SDK_Linux64版本,可查看详细描述,右上角下载:
在这里插入图片描述
点击下载:
在这里插入图片描述
解压后:
在这里插入图片描述
海康威视SDK自带QtDemo,不过是qt4.7版本的,笔者使用qt5版本。

 

海康SDK概述与使用流程

初始化SDK

海康sdk有其固有的使用流程,如下图:
在这里插入图片描述

初始化SDK(NET_DVR_Init)

对整个网络SDK系统的初始化,内存预分配等。

设置连接超时时间(NET_DVR_SetConnectTime)可选

设置SDK中的网络连接超时时间,不调用则使用默认值。

异常回调函数(NET_DVR_SetDVRMessage或NET_DVR_SetExceptionCallBack_V30)

sdk中大部分模块的功能是异步异常,海康提供此接口用于接收预览、报警、回放、透明通道和语音对讲等模块发生异常信息。用户可以在初始化 SDK 后就设置该回调函数,在应用层对各个模块异常消息的接收和处理。

从解析服务器获得设备的 IP 地址(NET_DVR_GetDVRIPByResolveSvr_EX)

该接口提供一种在仅知道设备名称(或 DDNS 域名)或者序列号的情况下,从解析服务器获得设备 IP 地址的方法。如:当前设备是通过拨号上网方式获取到动态 IP 地址,而运行了我公司 IPServer 软件的服务器即为解析服务器或者设备注册到我公司 DDNS 服务器上,我们可以通过此接口输入服务器的地址、设备的名称或序列号等信息查询该设备的 IP 地址。(注意:由此看来不能达到没有任何配置的情况下,直接使用该函数搜索到局域网内的所有摄像头信息)。

用户注册设备(NET_DVR_Login_V30)

实现用户的注册功能,注册成功后,返回的用户 ID 作为其他功
能操作的唯一标识, SDK 允许最大注册用户数为 512 个。就设备而言, V3.0 以上版本支持的设备允许有 32 个注册用户名,而且同时最多允许 128 个用户注册; V3.0 以下版本支持的设备允许有 16 个注册用户名,而且同时最多允许 128 个用户注册。
登录后才可进行功能其他功能的调用(除了报警模块不需要登录)。

释放SDK(NET_DVR_Cleanup)

不再使用sdk后,释放其使用的资源。

SDK功能模块

在这里插入图片描述

预览模块

从设备取实时码流,解码显示以及播放控制等功能,同时支持软解码和解码卡解码。

回放和下载模块

可以通过按时间和按文件名的方式远程回放或者下载设备的录像文件,后续可以进行解码或者存储。同时还支持断点续传功能(需要设备支持)。

参数配置模块

设置和获取设备的参数,主要包括设备参数、网络参数、通道压缩参数、串口参数、报警参数、异常参数、交易信息和用户配置等参数信息。

远程设备维护模块

实现关闭设备、重启设备、恢复默认值、远程硬盘格式化、远程升级和配置文件导入/导出等维护工作。

语音对讲转发模块

语音对讲转发模块:实现和设备的语音数据对讲和语音数据获取,音频编码格式可以指定。

报警模块

报警模块:处理设备上传的各种报警信号。报警分为“布防”和“监听”两种方式,在采用监听方式并且不 需要获取用户 ID 的情况下,报警模块可以无需进行“用户注册”操作步骤。

透明通道模块

透明通道模块:透明通道是将 IP 数据报文解析后直接发送到串行口的一种技术。实际上起到了延伸串行设备控制距离的作用。可利用 IP 网络控制多种串行设备,如控制解码器、矩阵、报警主机、门禁、仪器仪表等串行设备,对用户来说,只看到点对点传输,无须关心网络传输过程,所以称为串口透明通道。SDK提供485和232串口作为透明通道功能,其中要将 232 串口作为透明通道使用,首先必须在232串口的配置信息(NET_DVR_RS232CFG)中将工作模式选为透明通道,这样232串口才可作为透明通道使用。

云台控制模块

云台控制模块:实现对云台的基本操作、预置点、巡航、轨迹和透明云台的控制。SDK将云台控制分为两种模式:一种是通过图像预览返回的句柄进行控制;另一种是无预览限制,通过用户注册ID号进行云台控制。

IP通道概念与相关说明

模拟输入

DVR 视频输入接模拟摄像机,其通道称为模拟通道; 混合型 DVR、 NVR 等设备支持 IPC 接入,通道称IP 通道(或者数字通道),配置相关参数时需调用 IP 接入配置参数来进行资源的获取和重新分配。

模拟通道个数

客户端通过注册设备(NET_DVR_Login_V30)返回的设备信息 NET_DVR_DEVICEINFO_V30 获取模拟通道个数(byChanNum)、模拟通道起始通道号(byStartChan)和设备支持的最大 IP 通道数(byIPChanNum + byHighDChanNum * 256)、数字通道起始通道号(byStartDChan)。

通道号

从 byStartChan 到 byStartChan + byChanNum - 1 对应为模拟通道的通道号,IP 通道的通道号为 byStartDChan到 byStartDChan + (byIPChanNum + byHighDChanNum * 256) - 1。 DVR 只有模拟通道, NVR 只有 IP 通道,混合型 DVR 同时支持模拟通道和 IP 通道。

单设备的多IP通道

如果设备支持 IP 通道个数大于 0,则可以通过远程参数配置接口 NET_DVR_GetDVRConfig(配置命令:NET_DVR_GET_IPPARACFG_V40)可以获取得到设备详细的 IP 资源信息(NET_DVR_IPPARACFG_V40),包括模拟通道是否禁用(byAnalogChanEnable)、 IP 通道个数(dwDChanNum)、 IP 通道起始通道号(dwStartDChan)、 IP 通道取流模式、 IP 通道有效状态和在线状态等。通过远程参数配置接口NET_DVR_SetDVRConfig(配置命令: NET_DVR_SET_IPPARACFG_V40)可对设备进行 IP 资源配置,包括添加、修改、删除 IP 通道等。

报警

混合型 DVR 或 NVR 的 IP 报警输入和报警输出的通道是在音视频 IP 通道资源分配好后,由设备自动分配的。 如果要对 IP 报警参数进行配置,首先通过命令 NET_DVR_GET_IPALARMINCFG_V40 和NET_DVR_GET_IPALARMOUTCFG_V40 获取 IP 报警输入资源(NET_DVR_IPALARMINCFG_V40) 和 IP 报警输出资源(NET_DVR_IPALARMOUTCFG_V40)。 然后通过命令 NET_DVR_SET_ALARMINCFG_V40 可以配置报警数相关参数(NET_DVR_ALARMINCFG_V40),包括报警输入名称、报警器类型、布防时间、联动方式等,通过命令 NET_DVR_SET_ALARMOUTCFG_V30 可以配置报警输出相关参数(NET_DVR_ALARMOUTCFG_V30),比如报警输出名称、布防时间、输出报警延时等。 相关接口:NET_DVR_GetDVRConfig、 NET_DVR_SetDVRConfig。

版权声明
本文为[红胖子(红模仿)]所创,转载请带上原文链接,感谢
https://www.cnblogs.com/qq21497936/p/14729058.html

  1. Spring 3中异步方法调用
  2. AOP相关讨论
  3. jf能支持的表现层目前只有struts 1.x么?
  4. 在j2ee中实现一般java对象数据库的方法。
  5. FTP connecting windows and Linux
  6. Decorator design pattern - gene zeiniss
  7. Asynchronous method call in spring 3
  8. Discussion on AOP
  9. Is struts 1. X the only presentation layer supported by JF?
  10. The method of realizing general Java object database in J2EE.
  11. PDF转HTML工具——用springboot包装pdf2htmlEX命令行工具
  12. Pdf to HTML tool -- Wrapping pdf2htmlex command line tool with springboot
  13. MySQL 的 in 查询不走索引?我拿什么拯救你!
  14. MySQL in query does not go index? What can I do to save you!
  15. PDF转HTML工具——用springboot包装pdf2htmlEX命令行工具
  16. Pdf to HTML tool -- Wrapping pdf2htmlex command line tool with springboot
  17. Java小白入门必学!最全数据类型和运算符笔记,附实例
  18. Java Xiaobai introduction must learn! Notes on the most complete data types and operators, with examples
  19. Spring MVC请求与响应
  20. Spring MVC request and response
  21. Java 11已经不再完全免费,不要陷入Oracle的Java 11陷阱
  22. Vue.js比jQuery更容易学习
  23. 启动/删除Docker容器时出现问题 - 如何修复
  24. eclipse run on server时出现了错误信息.求急!!
  25. 请教高手一个关于lunce的问题:java.io.IOException: Cannot rename ...\segments.new
  26. Java 11 is no longer completely free. Don't fall into the Java 11 trap of Oracle
  27. Vue. JS is easier to learn than jQuery
  28. Problem starting / deleting docker container - how to fix it
  29. There is an error message in eclipse run on server!!
  30. Ask a question about lunce: java.io.ioexception: cannot rename... \ segments.new
  31. 从零搭建Spring Boot脚手架(2):集成mybatis
  32. 从零搭建Spring Boot脚手架(4):手写Mybatis通用Mapper
  33. 只知道java反射,宁知道内省吗?
  34. Build spring boot scaffold from scratch (2): integrate mybatis
  35. Build spring boot scaffold from scratch (4): handwritten mybatis general mapper
  36. Do you prefer introspection to reflection?
  37. ASP调用SDK微信分享好友、朋友圈
  38. ASP calls SDK wechat to share friends and circle of friends
  39. BAT 必问的 MySQL 面试题你都会吗?
  40. Do you know all the MySQL interview questions that bat must ask?
  41. ASP调用SDK微信分享好友、朋友圈
  42. ASP calls SDK wechat to share friends and circle of friends
  43. SpringCloud(六)Bus消息总线
  44. 详解JavaScript中的正则表达式
  45. Springcloud (6) bus message bus
  46. Explain regular expressions in JavaScript
  47. Java 响应式关系数据库连接了解一下
  48. Java14它真的来了, 真是尾气都吃不到了
  49. 视频:使用Docker搭建RabbitMQ环境
  50. Java responsive relational database connection
  51. Java14 it's really coming. I can't eat the exhaust
  52. Video: building rabbitmq environment with docker
  53. SpringCloud(六)Bus消息总线
  54. 详解JavaScript中的正则表达式
  55. Springcloud (6) bus message bus
  56. Explain regular expressions in JavaScript
  57. Docker实战:用docker-compose搭建Laravel开发环境
  58. Docker: building laravel development environment with docker compose
  59. 求助,JAVA如何获取系统当前所有进程
  60. 有人用过JMeter或用HttpUnit写过测试吗????