Qt(c++)调用海康威视监控摄像头
文章目录
- 一.海康威视监控摄像头开发SDK介绍
- 二.海康SDK模块说明
- 三.Qt项目中海康威视SDK配置
- 四.实时预览摄像头图像程序
一.海康威视监控摄像头开发SDK介绍
设备网络SDK是基于设备私有网络通信协议开发的,为嵌入式网络硬盘录像机、NVR、网络摄像机、网络球机、视频服务器、解码器、报警主机、网络存储等产品服务的配套模块,用于远程访问和控制设备软件的二次开发。图像预览, 文件回放和下载, 云台控制, 布防/撤防, 语音对讲, 日志管理, 解码卡, 远程升级, 远程重启/关闭, 格式化硬盘, 参数配置(系统配置, 通道配置, 串口配置, 报警配置, 用户配置), 多路解码器, 智能设备功能和获取设备能力集等。
海康威视SDK下载地址:https://open.hikvision.com/download/5cda567cf47ae80dd41a54b3?type=10
二.海康SDK模块说明
Windows下设备网络SDK:
Linux下设备网络SDK库:
设备网络SDK开发包中包含以上各个组件,HCNetSDK.dll
、HCCore.dll
必须加载,其他组件,用户可以根据需要选择其中的一部分或者全部,以下将对各个组件在SDK中的作用和使用条件分别说明。
-
网络通讯库:设备网络SDK的主体,主要用于网络客户端与各类产品之间的通讯交互,负责远程功能调控, 远程参数配置及码流数据的获取和处理等。设备网络 SDK V5.0针对产品应用业务进行细化,对之前版本的SDK的功能模块进行组件化,其中外部接口(
HCNetSDK.dll
)仍然保持和设备网络SDK V4.x版本保存一致(向下兼容),其他单独的业务功能(预览、回放等)可以加载单独的模块组件,多个业务功能也可以组合使用。更新SDK时,HCNetSDK.dll
、HCCore.dll
以及HCNetSDKCom
文件夹下的功能组件库文件都需要更新加载,且HCNetSDKCom
文件夹名不能修改。 -
hpr库:网络通讯库的依赖库,Linux SDK使用时和网络通讯库同时加载。
-
RTSP通讯库:支持RTSP传输协议的网络库,当需要对支持RTSP协议的产品进行取流等操作时就必须加载该项组件。
-
转封装库:库的功能可以分为两种:一种是将标准码流转换成采用本公司封装格式的码流。当用户需要对支持RTSP协议的产品捕获采用本公司封装格式的码流数据时(即当设置
NET_DVR_RealPlay_V40
接口中的回调函数捕获数据或者调用NET_DVR_SetRealDataCallBack
接口捕获数据时)必须加载该组件。另一种功能是能将标准码流转换成其他格式的封装,如3GPP, PS等。例如,当用户需要对支持RTSP协议的产品实时捕获指定封装格式的码流数据(对应的SDK接口为NET_DVR_SaveRealData
)时必须加载该项组件。 -
字符转换库:电脑字符集和设备字符集不一致时,SDK内部需要进行字符编码转换,SDK默认使用libiconv库进行类型转换。如果用户不想使用libiconv编码库,可以调用
NET_DVR_SetSDKLocalCfg
(类型:NET_SDK_LOCAL_CFG_TYPE_BYTE_ENCODE
)设置字符转码回调函数,将用户自己的字符编码接口告知SDK,然后SDK将使用用户提供的字符编码接口进行字符串处理。 -
模拟能力集:如果需要获取设备能力集(
NET_DVR_GetDeviceAbility
),可以调用NET_DVR_SetSDKLocalCfg
启用模拟能力集,此时需要加载LocalXml.zip(要求和网络通讯库放在同一个目录下)。 -
语音对讲库:用于语音对讲时通过声卡采集数据并按照指定的编码格式编码码流或者解码播放音频码流数据(不带封装格式的码流数据)。V4.2.2.5及以前版本SDK均采用windows API实现相关功能。之后版本默认使用语音对讲库的方式,通过接口
NET_DVR_SetSDKLocalCfg
可以选择之前的windows API模式。OpenAL32.dll
为依赖库,语音对讲库模式下必须加载。音频编解码目前仅Win32版本SDK支持。Linux系统下无语音对讲、语音广播、音频编解码功能,仅支持语音转发接口。 -
帧分析库:用于分析视音频帧数据,调用
NET_DVR_SetESRealPlayCallBack
、NET_DVR_SetPlayBackESCallBack
设置裸码流回调函数等接口时,必须加载该库文件。 -
OpenSSL库:用于登录以及敏感信息加密,必须加载该库文件。
-
播放库:主要用于对实时码流数据进行解码显示(实现预览功能)和对录像文件进行回放解码等。用户如果需要在SDK内部进行对实时流和录像码流播放显示时(即
NET_DVR_RealPlay_V40
接口的第二个结构体参数的播放句柄设置成有效句柄时)必须加载该组件,而如果用户仅需要用网络通讯库捕获到数据后再外部自行处理就不需要加载该组件,这种情况下用户在外部自行解码将更灵活,可参见播放库SDK开发包里面的《播放器SDK编程指南》。
三.Qt项目中海康威视SDK配置
-
解压下载好的SDK压缩包,复制SDK解压包中的文件(库文件->include)(头文件->lib)到自己新建的文件夹中
-
系统环境变量添加lib文件夹路径
-
Qt项目中CMakeList.txt添加如下代码,这样即可完成海康威视的SDK导入
# HKVISION set(HKVISION_DIR "C:\\Program Files\\HKVISION") set(HKVISION_INCLUDE_DIR "C:\\Program Files\\HKVISION\\include") set(HKVISION_LIB_DIRS "C:\\Program Files\\HKVISION\\lib") include_directories(${HKVISION_INCLUDE_DIR}) link_directories(${HKVISION_LIB_DIRS})target_link_libraries(${PROJECT_NAME} PUBLIC HCNetSDK PlayCtrl)
四.实时预览摄像头图像程序
海康官方的实时预览程序流程:
-
首先,先初始化海康的SDK
// 1.初始化海康监控SDK NET_DVR_Init();
-
然后,创建一个包含摄像头IP等信息的
NET_DVR_USER_LOGIN_INFO
结构体和NET_DVR_DEVICEINFO_V40
相机信息结构体,其中NET_DVR_USER_LOGIN_INFO
结构体包含登录相机时需要提供的必要信息,例如用户名和密码,而NET_DVR_DEVICEINFO_V40
结构体则是登录成功后,返回的相机的基本信息。// 2.设置连接相机的信息,用户注册设备 NET_DVR_USER_LOGIN_INFO struLoginInfo = {0}; //包含相机参数的结构体 NET_DVR_DEVICEINFO_V40 struDeviceInfoV40 = {0}; //登录后的相机信息struLoginInfo.bUseAsynLogin = 0; //同步登录方式 strcpy_s(struLoginInfo.sDeviceAddress, "192.168.1.71"); //设备IP地址 struLoginInfo.wPort = 8000; //设备服务端口 strcpy_s(struLoginInfo.sUserName, "admin"); //设备登录用户名 strcpy_s(struLoginInfo.sPassword, "1234"); //设备登录密码NET_DVR_Login_V40(&struLoginInfo, &struDeviceInfoV40); //设备登录
NET_DVR_Login_V40()函数说明:
NET_DVR_USER_LOGIN_INFO结构体说明: -
相机登录成功后,我们就可以开启相机的实时预览,实时预览的方式有两种,一种是直接给个窗口ID(HWND),SDK会自动把图像显示到控件上,还有一种是给个回调函数,SDK会把图像数据返回到回调函数里,用户自行决定如何处理图像数据。这里只说明第一种方法,回调函数的方式可以自行去海康威视SDK说明文档中查看使用方式。无论采用何种方式,都需要提供
NET_DVR_PREVIEWINFO
结构体,这个结构体中包含了SDK如何对流进行处理的信息。//通过给控件的HWDN,SDK自行进行图像的显示 // 3.启动预览 LONG lUserID = -1; //注册设备ID LONG lRealPlayHandle = -1; //实时预览控制端口NET_DVR_PREVIEWINFO struPlayInfo; //实时显示参数设定 struPlayInfo.hPlayWnd = hPlayWnd; //需要SDK解码时句柄设为有效值,仅取流不解码时可设为空, Qt中可以通过(HWND)ui->srcImg->winId()获取控件HWND struPlayInfo.lChannel = 1; //预览通道号 struPlayInfo.dwStreamType = 0; //0-主码流,1-子码流,2-码流3,3-码流4,以此类推 struPlayInfo.dwLinkMode = 0; //0- TCP方式,1- UDP方式,2- 多播方式,3- RTP方式,4-RTP/RTSP,5-RSTP/HTTP struPlayInfo.bBlocked = 0; //0- 非阻塞取流,1- 阻塞取流NET_DVR_RealPlay_V40(lUserID, &struPlayInfo, NULL, NULL);
NET_DVR_RealPlay_V40函数说明:
NET_DVR_PREVIEWINFO结构体说明:
4.一旦NET_DVR_RealPlay_V40()
设置好后,SDK就会自动把图像流显示到绑定的控件中,如果需要从流中获取一帧的图像,可以通过NET_DVR_CapturePictureBlock_New()
函数获取。
std::vector<char> inputData(3840*2160*4 + 54); //创建一个数组,大小为图像的H*W*4 + 54,用来保存图像数据
DWORD size= 0; //返回的实际图像大小
DWORD* psize = &size; //指向实际图像大小的指针
NET_DVR_CapturePictureBlock_New(lRealPlayHandle, inputData.data(), (DWORD)inputData.size(), psize) //通过这个函数获取一帧图像数据cv::_InputArray pic_arr(inputData); //将图像数据转换为OpenCV的数组
Mat grabImg = cv::imdecode(pic_arr, cv::IMREAD_COLOR); //OpenCV数组转换为Mat对象//通过以下代码,把opencv的Mat转换为QImage,然后在Qt的QLabel控件上进行显示
QImage qgrabImg = QImage((const unsigned char*)(grabImg.data), grabImg.cols, grabImg.rows, grabImg.cols*grabImg.channels(), QImage::Format_RGB888); // Mat为BGR颜色模式;
qgrabImg = qgrabImg.rgbSwapped();
ui->grabImg->setPixmap(QPixmap::fromImage(qgrabImg));
-
实际的Qt程序运行效果
-
程序源代码下载地址
地址: https://download.csdn.net/download/qq_30150579/87578614
相关文章:
Qt(c++)调用海康威视监控摄像头
文章目录一.海康威视监控摄像头开发SDK介绍二.海康SDK模块说明三.Qt项目中海康威视SDK配置四.实时预览摄像头图像程序一.海康威视监控摄像头开发SDK介绍 设备网络SDK是基于设备私有网络通信协议开发的,为嵌入式网络硬盘录像机、NVR、网络摄像机、网络球机、视频服务…...
深度学习部署笔记(十五): CUDA_Run_Time_API_parallel_多流并行,以及多流之间互相同步等待的操作方式
// CUDA运行时头文件 #include <cuda_runtime.h>#include <chrono> #include <stdio.h> #include <string.h>using namespace std;#define checkRuntime(op) __check_cuda_runtime((op), #op, __FILE__, __LINE__)bool __check_cuda_runtime(cudaErro…...
【Spring】spring框架简介
一、框架 1.框架的基本特点: 框架(Framework),是基于基础技术之上,从众多业务中抽取出的通用解决方案;框架是一个半成品,使用框架规定的语法开发可以提高开发效率,可以用简单的代码就能完成复杂的基础业务;框架内部使用大量的设…...
WuThreat身份安全云-TVD每日漏洞情报-2023-03-17
漏洞名称:TP-LINK Archer AX21 命令注入漏洞 漏洞级别:严重 漏洞编号:CVE-2023-1389,CNNVD-202303-1280 相关涉及:TP-LINK Archer AX21 1.1.4 Build 20230219之前的固件版本 漏洞状态:POC 参考链接:https://tvd.wuthreat.com/#/listDetail?TVD_IDTVD-2023-06347 漏洞名称:D-L…...
postman 调用webservice
有个外部接口需要提供古老的webservice 格式接口。1 设置格式按照xml 格式设置。2 消息体xml 封装不加envelope:<soap:Envelope xmlns:soap"" target"_blank">http://schemas.xmlsoap.org/soap/envelope/"><soap:Body><soap:Fault&…...
基于华为模拟器(ensp)的静态路由配置实验
一 实验需求静态路由实验,建立拓扑pc1>>R1>>R2>>R3>>pc2,使pc1与pc2能相互通信。二 实验拓扑三 ip地址规划设备接口ip地址AR1G0/0/0192.168.10.254/24G0/0/112.1.1.1/24AR2G0/0/012.1.1.2/24G0/0/123.1.1.2/24 AR3G0/0/023.1.1.…...
模拟实现字符串函数(长度受限制的详讲)
上次发布了长度不受限制的字符串函数的模拟实现方法,这次就给大家说说长度受限制的字符串函数。首先,长度受限制和不受限制有什么区别呢?其实从某种意义上来讲,长度受限制的字符串函数比长度不受限制的字符串安全,为什…...
分布式ID生成方案总结
什么是分布式 ID 分布式 ID 是指,在分布式环境下可用于对数据进行标识且易存储的全局唯一的 ID 标识。 为什么需要分布式 ID 对于单体系统来说,主键ID可能会常用主键自动的方式进行设置,这种ID生成方法在单体项目是可行的。 对于分布式系统…...
极智AI | 百度推出文心一言,对标ChatGPT功力几成
欢迎关注我,获取我的更多经验分享,极智传送《极智AI | 百度推出文心一言,对标 ChatGPT 功力几成》 大家好,我是极智视界,本文介绍一下 百度今日推出文心一言,对标ChatGPT功力几成。 邀您加入我的知识星球「极智视界」,星球内有超多好玩的项目实战源码下载,链接:https…...
CleanMyMac X最新版本4.12.6
系统要求macOS 10.12及更高,M1机型及最新macOS 13 CleanMyMac可以为Mac腾出空间,软件已经更新到CleanMyMac X支持最新版Mac系统。CleanMyMac具有一系列巧妙的新功能,可让您安全,智能地扫描和清理整个系统,删除大量未使…...
替代notepad++,notepad--介绍及插件cmake编译
Notepad 是一个文本编辑器小软件,用来替代windows自带的记事本。然而Notepad软件的作者是台湾省人,其具有明显的gd/jd/td倾向,如果你不赞同他的观点,Notepad将会在你的源码里面插入随机字符。推荐一款国产的开源跨平台软件NDD(not…...
机器学习笔记之集成学习(四)Gradient Boosting
机器学习笔记之集成学习——Gradient Boosting引言回顾:Boosting\text{Boosting}Boosting算法思想与AdaBoost\text{AdaBoost}AdaBoostGradient Boosting\text{Gradient Boosting}Gradient Boosting算法介绍场景构建算法过程迭代过程与梯度下降法之间的关联关系引言 …...
WPA渗透-pyrit:batch-table加速attack_db模块加速_“attack_db”模块加速
WPA渗透-pyrit:batch-table加速attack_db模块加速_“attack_db”模块加速 1.渗透WIFI 1.导入密码字典 pyrit -i 字典文件 import_passwords -i:输入的文件名 import_passwords:从类文件源导入密码。pyrit -i pwd.txt import_passwords2.导…...
kotlin第二部分复习纪要
扩展函数。 例如: fun Context.toast(msg: String, length: Int Toast.LENGTH_SHORT){Toast.makeText(this, msg, length).show() } 使用 val activity: Context? getActivity() activity?.toast("Hello world!") activity?.toast("Hello worl…...
代码随想录--链表--删除链表第n个节点题型、链表相交题型
删除链表第n个节点题型 链表遍历学清楚! | LeetCode:19.删除链表倒数第N个节点 (opens new window) 这道题我一开始想的是,倒数第n个节点,链表不方便往前找,那就从链表头结点开始找链表长度减n,这时候就是…...
一起来学5G终端射频标准(In-band emissions-2)
上一篇我们列出了IBE的测试要求表格,今天我们详细说一下IBE如何测量计算,以及CA/NR-DC/SUL/UL-MIMO/V2X/Tx Diversity模式下的IBE情况。01—IBE如何测量和计算IBE的测试是对落入到未被分配的RB的干扰的测量,为12个子载波的平均发射功率&#…...
硬刚ChatGPT,中国版ChatGPT“狂飙”的机会在哪儿?
整体来讲,个人的态度是积极的。 ChatGPT、文心一言 都是在多重因素及大量 AI 模型/数据 长时间累积的成果,不是一蹴而就,立竿见影的功能产品。两者产生的基础和背景均不相同,各有优劣,不存在强行对比的概念。 以下是 …...
ReactNative——导航器createBottomTabNavigator(底部标签导航器篇)
上一篇有讲到堆栈式导航器的写法,点这里->堆栈式导航器标签导航器官网链接先安装依赖包yarn add react-navigation/bottom-tabs接着在src/navigator文件夹下新建BottomTabs.tsx文件,写法跟堆栈式导航器类似的~import React from react; import { NavigationConta…...
【数据结构】带头双向循环链表的实现
🌇个人主页:平凡的小苏 📚学习格言:别人可以拷贝我的模式,但不能拷贝我不断往前的激情 🛸C语言专栏:https://blog.csdn.net/vhhhbb/category_12174730.html 🚀数据结构专栏ÿ…...
软件开发的权限系统功能模块设计,分享主流的九种常见权限模型
软件系统的权限控制几乎是非常常见且必备的,这篇文章整理下常见的九种模型,几乎基本够你用了,主流的权限模型主要有以下9种: 1、ACL模型 访问控制列表 2、DAC模型 自主访问控制 3、MAC模型 强制访问控制 4、ABAC模型 基于属性的访…...
CSS3-数据可视化
2D动画 - transform CSS3 transform属性允许你旋转,缩放,倾斜或平移给定元素。 Transform是形变的意思(通常也叫变换),transformer就是变形金刚 常见的函数transform function有: 平移:transl…...
硬件系统工程师宝典(15)-----PCB上的EMC设计,“拿捏了”
各位同学大家好,欢迎继续做客电子工程学习圈,今天我们继续来讲这本书,硬件系统工程师宝典。上篇我们说到PCB常用的多层板叠层结构,综合成本、性能、需求考虑选择不同的叠层结构。今天我们来看看为提高EMC性能,在PCB设计…...
vue3滚动条滚动后元素固定
代码地址:https://gitee.com/zzhua195/easyblog-web-vuee Framework.vue 在这个布局组件中,监听main的滚动事件,获取滚动的距离,将它存入store,以便其它组件能够共享,监听到 <template><div c…...
新吲哚菁绿染料IR-825 NHS,IR825 NHS ester,IR825 SE,IR-825 活性酯,用于科研实验研究和临床
IR825 NHS理论分析:中文名:新吲哚菁绿-琥珀酰亚胺酯,IR-825 琥珀酰亚胺酯,IR-825 活性酯英文名:IR825 NHS,IR-825 NHS,IR825 NHS ester,IR825 SECAS号:N/AIR825 NHS产品详…...
GO语言--接口(interface)的定义及使用
接口定义 接口也是一种数据类型,它代表一组方法的集合。 接口是非侵入式的。即接口设计者无需知道接口被哪些类型实现,而接口使用者只需知道实现怎样的接口,并且无须指明实现哪一个接口。编译器在编译时就会知道哪个类型实现哪个接口&#…...
【Python语言基础】——Python MongoDB 查询
Python语言基础——Python MongoDB 查询 文章目录 Python语言基础——Python MongoDB 查询一、Python MongoDB 查询一、Python MongoDB 查询 筛选结果 在集合中查找文档时,您能够使用 query 对象过滤结果。 find() 方法的第一个参数是 query 对象,用于限定搜索。 实例 查找地…...
第十四届蓝桥杯模拟赛【第三期】Python
1 进制转换 问题描述 请找到一个大于 2022 的最小数,这个数转换成十六进制之后,所有的数位(不含前导 0)都为字母(A 到 F)。 请将这个数的十进制形式作为答案提交。 答案:2730 def ch…...
windows 下docker 安装clickhouse
docker 下载https://www.docker.com/products/docker-desktop/将下载下来的Docker Desktop Installer.exe文件双击进行安装即可,安装完成后,任务栏会出现一个蓝色的小鲸鱼图标(注意安装完成后可能会重启系统)Docker Desktop如果出…...
【华为OD机试真题 JAVA】TLV编码问题
标题:TLV编码问题 | 时间限制:1秒 | 内存限制:262144K | 语言限制:不限 TLV编码是按TagLengthValue格式进行编码的,一段码流中的信元用tag标识,tag在码流中唯一不重复,length表示信元value的长度,value表示信元的值,码流以某信元的tag开头,tag固定占一个字节,lengt…...
深度学习 Day26——使用Pytorch实现猴痘病识别
深度学习 Day26——使用Pytorch实现猴痘病识别 文章目录深度学习 Day26——使用Pytorch实现猴痘病识别一、前言二、我的环境三、前期工作1、设置GPU导入依赖项2、导入猴痘病数据集3、划分数据集四、构建CNN网络五、训练模型1、设置超参数2、编写训练函数3、编写测试函数4、正式…...
网络运营者应当对其收集的用户信息严格保密/专业seo关键词优化
通过加速,国内用户能够快速访问最流行的 Docker 镜像。 仓库 registry.docker-cn.com 包含流行的公有镜像。私有镜像仍需要从 Docker Hub 镜像库中拉取。 以下命令直接从镜像加速地址进行拉取: $ docker pull registry.docker-cn.com/myname/myrepo:myta…...
素材网站/搜索优化师
///代码还存在问题,稍后想一下/ 题目描述: * 小C在做一种特殊的服务器负载测试,对于一个请求队列中的请求, * 每一个请求都有一个负荷值,为了保证服务器稳定,请求队列 * 中的请求负荷必须按照先递增后递…...
网站面试通知表格怎么做/360建站和凡科哪个好
Percona Server 刚在 2013 DeveloperWeek Best of Tech award 中赢得最具创新的 SQL 技术奖。 我们很骄傲的接受了这个奖项,该奖项的评选是由独立的评审小组选出,非常感谢你们对 Percona Server 的投票。 Percona 为 MySQL 数据库服务器进行了改进&#…...
做p2p网站 预算多少/收录情况
数仓小思考 1.为什么使用关系型存储用户业务数据 RDMS(关系型数据库)是基于OLTP(online transaction process在线事务处理)设计,重事务和在线处理 2.用户行为数据和用户业务数据的区别 用户行为数据侧重于记录事件,用户业务数据侧重记录完整的事实 3.为…...
鹤壁网站建设/重庆seo俱乐部
〇、前言网络编程的基本线程模型,详见:Netty学习(二):线程模型一、工作原理简图Netty主要基于主从 Reactors 多线程模型(如下图) 做了一定的改进,其中主从Reactor 多线程模型有多个R…...
php网站做语言包/seo百度快照优化公司
也许你可能并不知晓,但数据安全之战每天确实在我们周围发生着。例如美国和以色列通过Stuxnet(蠕虫)病毒黑进伊朗的核武器研究数据库,并对离心机的转速做了更改,直接导致伊朗核武器的研究滞后两年之久;还有L…...