海康威视SDK实例QtDemo显示NVR视频窗口(Linux+Qt)
陈拓 2021/07/312021/08/01
1. 概述
在《海康威视客户端iVMS-4200连接NVR》
https://zhuanlan.zhihu.com/p/395137370
https://blog.csdn.net/chentuo2000/article/details/119298486
一文中我们通过海康威视客户端iVMS-4200连接NVR。
本文我们通过海康SDK连接NVR。
2. 下载SDK
海康威视:https://www.hikvision.com/cn/
- 下载地址
https://open.hikvision.com/download/5cda567cf47ae80dd41a54b3?type=10
- 文档下载
- 程序包下载
CH-HCNetSDKV6.1.6.45_build20210302_linux64_20210428163105.zip
- 解压
3. 安装QT
https://zhuanlan.zhihu.com/p/393630007
https://blog.csdn.net/chentuo2000/article/details/119146380
4. 编译海康官方实例
4.1 复制实例文件
- 复制QtDemo
将前面下载的海康SDK中的文件夹QtDemo复制到我们在《在Win10的Linux子系统Ubuntu中使用Qt》一文中创建的目录hk中。
在WSL中的目录hk
对应Win10的目录:
C:\Users\admin\AppData\Local\Packages\CanonicalGroupLimited.Ubuntu20.04onWindows_79rhkp1fndgsc\LocalState\rootfs\home\ccdc\hk
- 修改权限
chmod -R 755 QtDemo
- 复制库文件
进入QtDemo
查看qt_demo_readme.txt
将SDK/lib下所有so文件拷贝到QtDemo/Linux64/lib
修改权限
chmod -R 755 Linux64/lib
4.2 编译
- 进入目录Linux64
- 运行Qt Creator
qtcreator
- 打开项目
File > Open File or Project…
选择项目,Open
- 编译
Build > Build All
有错误。
- 改错
实例代码是用Qt4.7编写的,我用Qt5,要修改代码,要修改的地方很多。
1) 修改编码
所以出现下面提示的地方都要改:
选择编码:
使用GBK编码,否则中文乱码。
2) QtGui/QDialog找不到
Qt版本的问题去掉QtGui/。还有很多同样的错误,所有出现这个错误的地方都要改。
3) error: 'UnicodeUTF8' is not a member of 'QApplication'
原因是:QCoreApplication::UnicodeUTF8已被弃用。解决方法:
修改
setText(QApplication::translate("MainWindow", "&Quitar", 0, QApplication::UnicodeUTF8));
为
setText(QApplication::translate("MainWindow", "&Quitar", 0);
4) error: ‘class QHeaderView’ has no member named ‘setResizeMode’
解决方法:
将 setResizeMode 替换为为 setSectionResizeMode
即将:
table->verticalHeader()->setResizeMode(QHeaderView::ResizeToContents);
table->horizontalHeader()->setResizeMode(QHeaderView::ResizeToContents);
替换为
table->verticalHeader()->setSectionResizeMode(QHeaderView::ResizeToContents);
table->horizontalHeader()->setSectionResizeMode(QHeaderView::ResizeToContents);
5) error: ‘setCodecForTr’ is not a member of ‘QTextCodec’
Qt5以前涉及到中文要用下面三行:
QTextCodec::setCodecForTr(QTextCodec::codecForName("UTF-8"));
QTextCodec::setCodecForLocale(QTextCodec::codecForName("UTF-8"));
QTextCodec::setCodecForCStrings(QTextCodec::codecForName("UTF-8"));
Qt5删除了QTextCodec的成员函数setCodecForTr和setCodecForCStrings:
QTextCodec::setCodecForTr(QTextCodec::codecForName("UTF-8"));
QTextCodec::setCodecForCStrings(QTextCodec::codecForName("UTF-8"));
解决方法,注释掉上面两行。
修改,编译,再修改,再编译,直到没有错误。
- 再编译
没有错误,警告不管它。
编译完成
4.3 运行
- 按F5或者点击左下角的Run按钮运行程序
- 右击device tree登录
登录设置:
OK
选择通道:
双击选择的通道:
- 实时监控Preview
- 回放Playback