基于QT的海康威视网络摄像头的二次开发

、摄像头激活

海康威视官网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_NAMESPACE

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    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/HTTP
            struPlayInfo.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(); // must
            fileName=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!";
        }
}

七、运行效果

  • 3
    点赞
  • 43
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值