、摄像头激活
海康威视官网https://www.hikvision.com/cn/
首先,在官网的服务支持->工具软件找到HiTools,下载设备网络搜索工具
然后用网线连接电脑和摄像头,并连接上电源,打开设备网络搜索工具,直接设置密码(这个密码很重要,忘记密码了可按摄像头的复位键),系统会提示设置密保,点击取消即可。
二、设置IP地址
将IP地址设置成电脑的相同网段的地址。然后使得能够ping通摄像头的IP地址即可。
三、网络连接
在浏览器中输入设备的IP地址,然后登陆即可(默认的账号为admin,密码是在设备网络搜索工具设置的密码)
一开始登陆进来可能是没有摄像头的画面的,注意WEB界面右上角有一个插件下载,插件下载完成后,预览摄像头画面。
四、海康威视SDK下载
这里需要用到海康威视的SDK,在官网找到这个页面,查看自己电脑的配置,来选择下载。(右键点击->我的电脑->属性x64/x32)下载地址:SDK下载海康开放平台
五、SDK文件导入
1.在Qt上新建一个工程,简单设置布局后运行,在文件夹中生成build目录,将下载的SDK中库文件拷贝到Qt的pro文件同级目录的新建文件夹lib中。
2.再将SDK中头文件拷贝到Qt的pro文件同级目录新建文件夹include中。
3.在Qt的pro文件中添加库
六、源码
最后实现的效果为预览、拍照
注意:在执行Qt程序的时候要选择与SDK和电脑相同位数才行
1.mainwindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H#include <QMainWindow>
#include <QDebug>
#include <Windows.h>
#include <./include/HCNetSDK.h>
#include <./include/plaympeg4.h>
#include <QDateTime>
#include <QMessageBox>
QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACEclass MainWindow : public QMainWindow
{Q_OBJECTpublic:MainWindow(QWidget *parent = nullptr);~MainWindow();private slots:void on_pushButton_clicked();void on_pushButton_2_clicked();private:Ui::MainWindow *ui;int lUserID;
};
#endif // MAINWINDOW_H
2.mainwindow.cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"
#pragma execution_character_set("utf-8")
MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow)
{ui->setupUi(this);ui->widget_4->setStyleSheet("font-size:25px;");ui->widget_3->setStyleSheet("QWidget#widget_3{border:1px solid #c2c2c2;}");ui->widget_2->setStyleSheet("QWidget#widget_2{border:1px solid #c2c2c2;}");
}
MainWindow::~MainWindow()
{delete ui;
}void MainWindow::on_pushButton_clicked()
{bool isok = NET_DVR_Init();if(isok){qDebug() <<"SDK初始化成功";//设置连接时间与重连时间NET_DVR_SetConnectTime(2000, 1);NET_DVR_SetReconnect(10000, true);NET_DVR_DEVICEINFO_V30 struDeviceInfo;lUserID = NET_DVR_Login_V30(const_cast<char*>("192.168.204.64"), 8000, const_cast<char*>("admin"), const_cast<char*>("Cewei06a"), &struDeviceInfo);if (lUserID < 0){qDebug()<<"登录失败: "<<NET_DVR_GetLastError();NET_DVR_Cleanup();//释放 SDK 资源return;}else{qDebug()<<"登录成功 ";// HWND hWnd = (HWND)ui->graphicsView->winId(); //获取窗口句柄HWND hWnd = (HWND)ui->graphicsView->winId(); //获取窗口句柄NET_DVR_PREVIEWINFO struPlayInfo;struPlayInfo.hPlayWnd = hWnd; //需要 SDK 解码时句柄设为有效值,仅取流不解码时可设为空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/HTTPstruPlayInfo.bBlocked = 1; //0- 非阻塞取流,1- 阻塞取流int lRealPlayHandle = NET_DVR_RealPlay_V40(lUserID, &struPlayInfo, nullptr, nullptr);if (lRealPlayHandle < 0){qDebug()<<"预览失败: "<<NET_DVR_GetLastError();NET_DVR_Logout(lUserID);NET_DVR_Cleanup();return;}}}else{qDebug()<<"SDK初始化失败: "<<NET_DVR_GetLastError();}
}void MainWindow::on_pushButton_2_clicked()//拍照
{if(lUserID!=-1){NET_DVR_JPEGPARA IpJpegPara2;IpJpegPara2.wPicQuality=0;IpJpegPara2.wPicSize=0xff;QDateTime current_date_time =QDateTime::currentDateTime();QString current_date =current_date_time.toString("yyyy-MM-dd_hh-mm-ss_zzz");current_date = QCoreApplication::applicationDirPath()+current_date+".jpg";qDebug()<<"2---"<<current_date;char* fileName;QByteArray ba = current_date.toLatin1(); // mustfileName=ba.data();if(NET_DVR_CaptureJPEGPicture(lUserID,1,&IpJpegPara2,fileName)==false){qDebug() << "NET_DVR_CaptureJPEGPicture error;" << "error number is " << NET_DVR_GetLastError();QMessageBox::warning(this,"error","NET_DVR_CaptureJPEGPicture error;error number "+QString::number(NET_DVR_GetLastError()));return;}qDebug() <<"Capture Success!";}
}
七、运行效果