Qt(c++)调用海康威视监控摄像头
创始人
2025-05-28 10:31:35

文章目录

  • 一.海康威视监控摄像头开发SDK介绍
  • 二.海康SDK模块说明
  • 三.Qt项目中海康威视SDK配置
  • 四.实时预览摄像头图像程序

一.海康威视监控摄像头开发SDK介绍

设备网络SDK是基于设备私有网络通信协议开发的,为嵌入式网络硬盘录像机、NVR、网络摄像机、网络球机、视频服务器、解码器、报警主机、网络存储等产品服务的配套模块,用于远程访问和控制设备软件的二次开发。图像预览, 文件回放和下载, 云台控制, 布防/撤防, 语音对讲, 日志管理, 解码卡, 远程升级, 远程重启/关闭, 格式化硬盘, 参数配置(系统配置, 通道配置, 串口配置, 报警配置, 用户配置), 多路解码器, 智能设备功能和获取设备能力集等。
海康威视SDK下载地址:https://open.hikvision.com/download/5cda567cf47ae80dd41a54b3?type=10

在这里插入图片描述

二.海康SDK模块说明

Windows下设备网络SDK:

在这里插入图片描述

Linux下设备网络SDK库:
在这里插入图片描述
设备网络SDK开发包中包含以上各个组件,HCNetSDK.dllHCCore.dll必须加载,其他组件,用户可以根据需要选择其中的一部分或者全部,以下将对各个组件在SDK中的作用和使用条件分别说明。

  • 网络通讯库:设备网络SDK的主体,主要用于网络客户端与各类产品之间的通讯交互,负责远程功能调控, 远程参数配置及码流数据的获取和处理等。设备网络 SDK V5.0针对产品应用业务进行细化,对之前版本的SDK的功能模块进行组件化,其中外部接口(HCNetSDK.dll)仍然保持和设备网络SDK V4.x版本保存一致(向下兼容),其他单独的业务功能(预览、回放等)可以加载单独的模块组件,多个业务功能也可以组合使用。更新SDK时,HCNetSDK.dllHCCore.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_SetESRealPlayCallBackNET_DVR_SetPlayBackESCallBack设置裸码流回调函数等接口时,必须加载该库文件。

  • OpenSSL库:用于登录以及敏感信息加密,必须加载该库文件。

  • 播放库:主要用于对实时码流数据进行解码显示(实现预览功能)和对录像文件进行回放解码等。用户如果需要在SDK内部进行对实时流和录像码流播放显示时(即NET_DVR_RealPlay_V40接口的第二个结构体参数的播放句柄设置成有效句柄时)必须加载该组件,而如果用户仅需要用网络通讯库捕获到数据后再外部自行处理就不需要加载该组件,这种情况下用户在外部自行解码将更灵活,可参见播放库SDK开发包里面的《播放器SDK编程指南》。

三.Qt项目中海康威视SDK配置

  1. 解压下载好的SDK压缩包,复制SDK解压包中的文件(库文件->include)(头文件->lib)到自己新建的文件夹中
    在这里插入图片描述

  2. 系统环境变量添加lib文件夹路径在这里插入图片描述

  3. 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)
    

四.实时预览摄像头图像程序

海康官方的实时预览程序流程:
在这里插入图片描述

  1. 首先,先初始化海康的SDK

    // 1.初始化海康监控SDK
    NET_DVR_Init(); 
    
  2. 然后,创建一个包含摄像头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结构体说明:在这里插入图片描述

  3. 相机登录成功后,我们就可以开启相机的实时预览,实时预览的方式有两种,一种是直接给个窗口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 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));

在这里插入图片描述

  1. 实际的Qt程序运行效果
    在这里插入图片描述

  2. 程序源代码下载地址
    地址: https://download.csdn.net/download/qq_30150579/87578614

相关内容

热门资讯

和讯投顾田越滢:行情结束了吗?... 大盘今天收十字星,行情结束了吗?和讯投顾田越滢表示,首先表明我的观点,今天大盘暂时没有太大的问题,只...
安井食品基石轮融资近亿美元,华... 近日,安井食品集团股份有限公司宣布成功完成基石投资轮融资,融资总额高达9000万美元。本轮融资吸引了...
视频丨labubu价格雪崩,盲... 108万初代藏品级薄荷色的LABUBU拍卖锤声刚落,618一补货价格就跳水了,腰斩起步! 究竟什么情...
美团李树斌接管点评事业部后首现... 记者 钱玉娟 6月25日,在2025大众点评“必吃榜”的揭晓现场,美团平台负责人、S-team成员李...
爱马仕、梵克雅宝也带不动,颖通... 本文来源:时代周报 作者:张钇璟6月26日,港交所上演了近年来最热闹的敲钟盛况,颖通控股(06883...
左手收购、右手抛售村镇银行!武... 作者 | 谢美浴、刘银平编辑 | 付影来源 | 独角金融从江苏到海南,武汉农村商业银行股份有限公司(...
圣贝拉港股上市,套餐14万起,... 6月26日,SAINT BELLA Inc.(股票代码:02508.HK,以下简称“圣贝拉”)正式在...
百亿宝新能源“铁三角”反目案重... 作者 | 姚悦 郑理编辑 |高岩来源 | 独角金融6月24日,梅州客商银行股份有限公司(下称:梅州客...
2个月大涨144%!濒临退市的... 面临退市风险的*ST亚振,再次因股价暴涨而停牌核查。6月26日晚间,*ST亚振(603389.SH)...
招商蛇口取消所有区域公司 招商... 组织架构变革的传言“飞”了大半个月后终于着陆。近日,招商蛇口披露消息,称公司《关于审议公司组织架构调...
女孩数学能力,天生不如男孩吗? 女孩的数学能力天生就不如男孩吗?这是一个长久以来存在争议的话题。事实上,并没有科学依据表明女孩在数学...
问界比肩BBA,国产车全面崛起... 最近几年,伴随着中国新能源汽车产业的高速发展,整个市场都日渐进入了快车道,在此情况之下,国产新能源汽...
雅安市商业银行行长陈力任职资格... 日前,国家金融监督管理总局四川监管局发布批复文件,核准陈力雅安市商业银行股份有限公司行长的任职资格。...
股票行情快报:赫美集团(002... 证券之星消息,截至2025年6月26日收盘,赫美集团(002356)报收于3.05元,上涨0.0%,...
美股三大股指集体高开,英伟达续... 6月26日,美股三大股指集体高开,道指涨0.31%,纳指涨0.45%,标普500指数涨0.37%。英...
上市首日,30%涨停! 公募REITs上市首日即涨停的现象不断出现。6月26日,中金亦庄产业园REIT迎来上市首个交易日,开...
原创 欧... 加拿大G7峰会期间,特朗普与冯德莱恩的双边会晤并没有给双边关系带来预想中的缓和,会后特朗普不仅批评欧...
信德集团:拟向澳门濠庭都会购物... 6月26日,信德集团(00242.HK)发布公告,宣布向一家合资公司提供财务资助,涉及金额最高达4亿...
*ST中程将退市 上市以来已六... 中经记者 庄灵辉 卢志坤 北京报道海外项目承接多年未交付、化债周期约定长达25年、对“非标”审计意见...
滚动更新丨美股三大指数集体高开... (更新中)21:30 美股开盘丨三大指数集体高开 英伟达涨近1%道指涨0.30%,纳指涨0.45%,...
宁波华翔:子公司获上海智元委托... 今日焦点4天3板银座股份:部分线下门店有租赁商户售卖泡泡玛特相关商品4天3板银座股份公告称,公司股票...
被传将出售中国区门店,昔日顶流... 曾凭借“爱她,就带她去哈根达斯”一句经典广告语风靡中国的哈根达斯,也逐渐成为了“时代的眼泪”。6月2...
ST百灵:自6月30日起撤销其... 6月26日晚间,贵州百灵企业集团制药股份有限公司(ST百灵,002424.SZ)公告,公司股票自6月...
3连板国盛金控:内外部经营环境... 新京报贝壳财经讯 6月26日,国盛金控公告称,公司股票连续三个交易日内收盘价格涨幅偏离值累计达到20...
瑞贝卡:控股股东协议转让6.1... 新京报贝壳财经讯 6月26日,瑞贝卡公告称,公司控股股东河南瑞贝卡控股有限责任公司拟通过协议转让方式...
六项推展结果揭晓!第十届书业非... 6月25日~27日,由中国出版传媒商报与江西新华发行集团联合主办的第十届书业非书品经营研讨会在南昌举...
原创 稳... 近日,拉卡拉股价因稳定币概念火热大涨,在股价一片向好之际,公司却陷入了股东高位套现的舆论争议。在业绩...
越秀集团金融板块参展第14届金... 6月26日上午,以“金融聚力扩内需 驱动产业新格局”为主题的第十四届中国(广州)国际金融交易•博览会...
张一鸣登顶&梁文锋入围前十,2... 文|互联网那些事 又到一年六月时,老朋友“500创富榜”如期而至。 让我们一起来看看今年的榜单TO...
虚拟资产交易牌照打开想象空间 ... 21世纪经济报道记者 易妍君 广州报道大涨之后,券商板块迎来调整。6月26日,Wind券商指数收跌1...