前言
工程需要把海康威视网络摄像头的视频流显示在Qt开发的界面上,一时间摸不到头绪。
也提醒大家一下,Qt自带的QCamera类对网络摄像头是无解的,不要白费力气了。
查了资料,发现海康威视官网提供一个SDK包用于支持二次开发,下载下来发现没有Qt版本的Demo,摸索了半天,借鉴了CSDN里的大神们的文章,依旧没有成功。
情急之下联系了海康官方,一个邮件指出了我的问题,成功的将网络摄像头的数据显示在了QLabel上。
现在将我的经验分享给大家,希望对大家有所帮助。
环境搭建
系统:Win7 32位
开发环境:Qt 5.7.0+海康威视SDK
首先搭建一个支持海康SDK的环境,对于SDK提供的lib和dll文件的使用,我读了一篇文章,文章提到了哪些需要,哪些不需要,我完全按照他说的挑拣出来搭环境,发现程序是运行起来了,但是总是提示“设备操作失败”。在咨询了海康的工程师后,人家一语道破:你dll拷贝的不全,才会出现设备操作失败。所以对于dll和lib,我的做法是:不挑不捡,全部使用!
具体方法是:
lib文件
把所有的lib文件拷贝到Qt编译的目录中(一般情况是以build开头的文件夹,和Makefile文件同目录下),我为了不乱,新建了一个lib文件夹,统一存放lib文件。
然后在工程的pro文件里把这些lib文件加入工程:
LIBS +="./lib/HCCore.lib"
LIBS +="./lib/HCNetSDK.lib"
LIBS +="./lib/HCAlarm.lib"
LIBS +="./lib/HCGeneralCfgMgr.lib"
LIBS +="./lib/HCPreview.lib"
LIBS +="./lib/PlayCtrl.lib"
dll文件
设置完lib文件,接下来把dll文件拷贝到和执行文件同一根目录下(一般是debug或者release文件夹里),记住,包括“库文件”目录下的dll文件,以及里面的“ClientDemoDll”文件夹,不要把文件夹里的dll拷出了,直接把这个文件夹拷过去就可以了。
.h文件
接下来把SDK中的所有头文件加到Qt工程里面,并将其包含到你想要实现的类里面:
#include "HCNetSDK.h"
#include "DataType.h"
#include "plaympeg4.h"
#include "DecodeCardSdk.h"
除此之外,也把windows.h包含进去吧。
这样一来,环境搭建就完成了。我们可以开始写程序了。
关键代码实现
首先是初始化和注册,直接贴代码吧:
bool HikvisionCameraMan::InitialCameraMan()
{
//初始化
bool ret_value=NET_DVR_Init();
int ret_error_num;
if