当前位置: 首页 > article >正文

QT Quick QML 添加海康威视SDK云台控制模块

文章目录

  • 1. 配置
    • 海康威视 SDK 下载
    • SDK文件移植
    • 工程文件添加
  • 2. 函数调用
    • 流程
    • 接口
    • 参考代码
  • 3. 代码
    • 后端核心代码
    • 前端核心代码


GitHub 源码:     QmlLearningPro选择子工程 HkwsDemo.pro (暂未上传)

QML 其它文章请点击这里:     QT QUICK QML 学习笔记


● 运行效果:

请添加图片描述
有延时是因为未对视频进行处理

1. 配置

海康威视 SDK 下载

https://www.hikvision.com/cn/support/Downloads/

在这里插入图片描述

SDK文件移植

将 SDK 中的所有库文件(.lib、.dll)与头文件(*.h)复制当前工程目录下,形式不限。
在这里插入图片描述

工程文件添加

在 HkwsDemo.pro 工程文件中分别加入以下部分
在这里插入图片描述

#添加所有lib静态库
LIBS += $$PWD/lib/*.lib

#添加所有头文件
INCLUDEPATH+=$$PWD/include

#生成的二进制文件生成到bin目录与.dll 文件放一起,
#可执行文件(.exe)先查找所在的目录的 .dll 文件
DESTDIR = $$PWD/bin

注意 MSVC 用的也是32 位的,可以添加

在这里插入图片描述

ANDROID_EXTRA_LIBS +=  xxxxxx

2. 函数调用

流程

在这里插入图片描述

接口

在这里插入图片描述

参考代码

在这里插入图片描述
在这里插入图片描述在这里插入图片描述

3. 代码

后端核心代码

与参考代码类似,按照上述程序流程图来即可:

登录:

bool QObjectQml::initSDK()
{
    bool isok = NET_DVR_Init();
    if(isok == false)
    {
        qDebug()<< "NET_DVR_Init error;error number is " <<NET_DVR_GetLastError();
        return isok;
    }
    //设置连接时间与重连时间
    NET_DVR_SetConnectTime(2000, 1);
    NET_DVR_SetReconnect(10000, true);
    return isok;
}

void QObjectQml::OnClickedLogin()
{
    initSDK();
    NET_DVR_DEVICEINFO_V30 DeviceInfoTmp;
    QString AddressID="192.168.xxx.xx";
    QString NameID="admin";
    QString passwordID="xxxxxx";//"hk123456";

userID=NET_DVR_Login_V30(AddressID.toUtf8().data(),8000,NameID.toUtf8().data(),passwordID.toUtf8().data(),&DeviceInfoTmp);
    if(userID<0)
    {
        qDebug() << "NET_DVR_Login_V30 error;" << "error number is " << NET_DVR_GetLastError();
        return;
    }else{
    qDebug()<<"Login Success,userID:" ;
    }
    qDebug()<<"Login Success,userID:" << userID<<endl;
}

注销:

void QObjectQml::OnClickedLogout()
{
    if(userID!=-1)
    {
        if(NET_DVR_Logout(userID)==false)
        {
            qDebug() << "NET_DVR_Logout error;" << "error number is " << NET_DVR_GetLastError();
            return;
        }
        userID=-1;
        qDebug() <<"Logout Success!"<<endl;
    }
}

方向控制:

//上:按下
void QObjectQml::on_btn_u_pressed()
{
    qDebug()<<"on_btn_u_pressed";
    int camCh=1;
    int camSpeed=3;
    NET_DVR_PTZControlWithSpeed_Other(userID,(LONG)camCh,TILT_UP,0,camSpeed);
}

//上:松手
void QObjectQml::on_btn_u_released()
{
     qDebug()<<"on_btn_u_released";
    int camCh=1;
    int camSpeed=3;
    NET_DVR_PTZControlWithSpeed_Other(userID,(LONG)camCh,TILT_UP,1,camSpeed);
}
...

大小控制:

//下:按下
void QObjectQml::on_btn_min_pressed()
{
    int camCh=1;
    int camSpeed=3;
    NET_DVR_PTZControlWithSpeed_Other(userID,(LONG)camCh,ZOOM_OUT,0,camSpeed);
}

//下:松手
void QObjectQml::on_btn_min_released()
{
    int camCh=1;
    int camSpeed=3;
    NET_DVR_PTZControlWithSpeed_Other(userID,(LONG)camCh,ZOOM_IN,ZOOM_OUT,camSpeed);
}

...

前端核心代码

视频播放:

简易的视频播放代码,还是需要另外调用SDK,或者使用FFmpeg等方案

    QObjectQml {
        id: myObject
        deviceId: "12345"
        Component.onCompleted: console.log(deviceId)
    }

    MediaPlayer {
        id: player
        autoPlay: true
        source:   "rtsp://admin:123456789@192.168.85.60:8554"                      //          "rtsp://admin:njzh123456789@192.168.144.64:554/h264/ch1/main/av_stream"
    }

登录:

    Button{
        x:600
        y:10
        width: 80
        height: 30
        text: qsTr("登录")
        onPressed:   myObject.OnClickedLogin()
    }

控制:

    Button{
        x:10
        y:10
        width: 80
        height: 30
        text: qsTr("上")
        onPressed:   myObject.on_btn_u_pressed()
        onReleased:  myObject.on_btn_u_released()
    }

具体细节看代码


GitHub 源码:     QmlLearningPro选择子工程 HkwsDemo.pro

QML 其它文章请点击这里:     QT QUICK QML 学习笔记



http://www.kler.cn/a/287224.html

相关文章:

  • 大连理工大学概率上机作业免费下载
  • MySQL系列之数据授权(privilege)
  • 面向服务的软件工程——业务流程合规性(Business Process Compliance)(week12)
  • 基于Java Springboot外卖平台系统
  • 使用 JavaScript 制作 To-Do List
  • RPA真的是人工智能吗?
  • java操作日期时间类
  • v-bind,v-on与简写:和@有什么区别?
  • [Linux网络]TCP三次握手和四次挥手的连接建立和断开
  • win10环境下gvim离线配置插件的一些补充
  • 8.22
  • javascript指什么
  • blender4.2中安装插件的方式
  • 国密起步5:GmSSL3交叉编译arm64
  • Qt/QML学习-Dialog
  • 深入解析Go语言os/user包:用户和组管理实战指南
  • Apache Arrow简介
  • vscode Git代码版本回退
  • 【 html+css 绚丽Loading 】 000031 三元轮回盘
  • mac电脑登录循环重启问题
  • 基于Angular技术的MES系统基础管理功能的实现
  • c/c++:CMakeLists.txt中添加编译/连接选项使用内存错误检测工具Address Sanitizer(ASan)
  • 设计模式 11 享元模式
  • 力扣SQL仅数据库(580-608)
  • Wallcraft壁纸大全3.39.0 4K画质精品壁纸解锁VIP
  • PHP智能化排队叫号系统微信小程序源码