千家信息网

Qt Onvif云台控制怎么实现

发表于:2026-11-02 作者:千家信息网编辑
千家信息网最后更新 2026年11月02日,这篇文章主要讲解了"Qt Onvif云台控制怎么实现",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"Qt Onvif云台控制怎么实现"吧!一、前言云台控
千家信息网最后更新 2026年11月02日Qt Onvif云台控制怎么实现

这篇文章主要讲解了"Qt Onvif云台控制怎么实现",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"Qt Onvif云台控制怎么实现"吧!

一、前言

云台控制也是onvif功能中最常用的,最常用的功能排第一的是拿到视频流地址,排第二的就是云台控制了,云台控制的含义就是对带云台的摄像机进行上下左右的移动,一般云台摄像机都是带有一个小电机,一旦收到485或者网络来的正确的指令以后就触发单片机程序,然后单片机程序驱动电机进行转动,所以相对来说云台摄像机比普通的摄像机更耗电,当然价格也更贵。

云台控制的发送命令除了用户信息玩主要就三个核心参数xyz,通过这三个参数的组合来实现云台和焦距的控制,云台的转动主要就是改变xy的值,焦距的控制通过改变z的值来实现。

云台控制说明:

  1. x、y、z 范围都在0-1之间。

  2. x为负数,表示左转,x为正数,表示右转。

  3. y为负数,表示下转,y为正数,表示上转。

  4. z为正数,表示拉近,z为负数,表示拉远。

  5. 通过x和y的组合,来实现云台的控制。

  6. 通过z的组合,来实现焦距控制。

onvif主要的功能:

  1. 搜索设备,获取设备的信息比如厂家、型号等。

  2. 获取设备的多个配置文件信息profile。

  3. 获取对应配置文件的视频流地址rtsp,以及分辨率等参数。

  4. 云台控制,上下左右移动,焦距放大缩小,相对和绝对移动。

  5. 获取预置位信息,触发预置位。

  6. 订阅事件,接收设备的各种消息尤其是报警事件比如IO口的报警。

  7. 抓图,获取设备当前的图片。

  8. 获取、创建、删除用户信息。

  9. 获取和设备网络配置信息比如IP地址等。

  10. 获取和设置NTP时间同步以及设置设备时间。

  11. 获取和设置视频参数和图片参数(亮度、色彩、饱和度)。

  12. 重启设备。

onvif的处理流程:

  1. 绑定组播IP(239.255.255.250)和端口(3702),发送固定的xml格式的数据搜索设备。

  2. 接收到的xml格式的数据解析,得到设备的Onvif地址。

  3. 对Onvif地址发送对应的数据,收到数据取出对应的节点数据。

  4. 请求Onvif地址获取Media地址和Ptz地址,Media地址用来获取详细的配置文件,Ptz地址用来云台控制。

  5. ptz控制是对Ptz地址发送对应的数据即可。

  6. 设置了用户认证的需要组织用户token信息一块发送,每次都需要作鉴权处理。

  7. 接收到的数据不是标准的xml数据,没法按照正常的节点解析来处理,只能用QXmlQuery来做。

  8. 每个厂家设备返回的数据未必完全一致,基本上都不一致,需要进行模糊查找节点值。

  9. 特意采用底层协议解析,因为soap太臃肿函数名称太另类,特意做的轻量级的。

  10. 两个必备工具,Onvif Device Manager 和 Onvif Device Test Tool。

二、功能特点

  1. 广播搜索设备,支持IPC和NVR,依次返回,可选择不同的网卡IP。

  2. 依次获取Onvif地址、Media地址、Profile文件、Rtsp地址。

  3. 可对指定的Profile获取视频流Rtsp地址,比如主码流子码流地址。

  4. 可对每个设备设置Onvif用户信息,用于认证获取详细信息。

  5. 可实时预览摄像机图像。

  6. 支持云台控制,可上下左右调节云台,支持绝对移动和相对移动,可放到和缩小图像远近。

  7. 支持Qt4和Qt5任意Qt版本,亲测Qt4.7.0到Qt5.14.2。

  8. 支持任意编译器,亲测mingw、msvc、gcc、clang。

  9. 支持任意操作系统,亲测xp、win7、win10、android、linux、嵌入式linux、树莓派全志H3等。

  10. 支持任意Onvif摄像机和NVR,亲测海康、大华、宇视、华为、海思芯片内核等,可定制开发。

  11. 支持对指定IP地址及onvif地址进行单播搜索,比如跨网段情况下非常有用。

  12. 支持指定过滤条件过滤搜索设备。

  13. 支持搜索间隔设置,保证所有设备搜索回来,在大量设备现场很有用。

  14. 可对图片参数(亮度、色彩度、饱和度)进行设置。

  15. 支持NTP校时和时间同步设置。

  16. 纯Qt编写,超级小巧轻量,总共约2000行代码,不依赖任何第三方的库和组件,跨平台。

  17. 封装好了通用的数据发送和接收解析的函数,可以非常方便的自行拓展其他Onvif处理。

  18. 工具上提供了收发数据文本框,显示收发的数据,方便查看和分析。

  19. 支持所有Onvif设备,代码工整,接口友好,直接引入pri即可使用。

三、效果图

四、核心代码

void frmPtz::moveAbsolute(){    OnvifDevice *device = frm->getCurrentDevice();    if (device) {        QString profile = frm->getProfile();        device->moveAbsolute(profile, x, y, z);        frm->append(5, QString("执行绝对移动-> x: %1  y: %2  z: %3").arg(x).arg(y).arg(z));    }}void frmPtz::moveRelative(){    OnvifDevice *device = frm->getCurrentDevice();    if (device) {        QString profile = frm->getProfile();        device->moveRelative(profile, x, y, z);        frm->append(5, QString("执行相对移动-> x: %1  y: %2  z: %3").arg(x).arg(y).arg(z));    }}void frmPtz::setFrm(frmMain *frm){    this->frm = frm;}void frmPtz::on_btnPtzUp_clicked(){    if (ui->rbtnMoveRelative->isChecked()) {        x = 0.0;        y = 0.1;        z = 0.0;        moveRelative();    } else {        y = 0.1;        moveAbsolute();    }}void frmPtz::on_btnPtzDown_clicked(){    if (ui->rbtnMoveRelative->isChecked()) {        x = 0.0;        y = -0.1;        z = 0.0;        moveRelative();    } else {        y = -0.0;        moveAbsolute();    }}void frmPtz::on_btnPtzLeft_clicked(){    if (ui->rbtnMoveRelative->isChecked()) {        x = -0.1;        y = 0.0;        z = 0.0;        moveRelative();    } else {        x = 0.0;        moveAbsolute();    }}void frmPtz::on_btnPtzRight_clicked(){    if (ui->rbtnMoveRelative->isChecked()) {        x = 0.1;        y = 0.0;        z = 0.0;        moveRelative();    } else {        x = 0.1;        moveAbsolute();    }}void frmPtz::on_btnPtzLeftUp_clicked(){    if (ui->rbtnMoveRelative->isChecked()) {        x = -0.1;        y = 0.1;        z = 0.0;        moveRelative();    } else {        x = 0.0;        y = 0.0;        moveAbsolute();    }}void frmPtz::on_btnPtzLeftDown_clicked(){    if (ui->rbtnMoveRelative->isChecked()) {        x = -0.1;        y = -0.1;        z = 0.0;        moveRelative();    } else {        x = 0.1;        y = 0.1;        moveAbsolute();    }}void frmPtz::on_btnPtzRightUp_clicked(){    if (ui->rbtnMoveRelative->isChecked()) {        x = 0.1;        y = 0.1;        z = 0.0;        moveRelative();    } else {        x = 0.0;        y = 0.0;        moveAbsolute();    }}void frmPtz::on_btnPtzRightDown_clicked(){    if (ui->rbtnMoveRelative->isChecked()) {        x = 0.1;        y = -0.1;        z = 0.0;        moveRelative();    } else {        x = 0.1;        y = 0.1;        moveAbsolute();    }}void frmPtz::on_btnPtzZoomIn_clicked(){    if (ui->rbtnMoveRelative->isChecked()) {        x = 0.0;        y = 0.0;        z = 0.01;        moveRelative();    } else {        z = 0.01;        moveAbsolute();    }}void frmPtz::on_btnPtzZoomOut_clicked(){    if (ui->rbtnMoveRelative->isChecked()) {        x = 0.0;        y = 0.0;        z = -0.01;        moveRelative();    } else {        z = 0.0;        moveAbsolute();    }}void frmPtz::on_btnPtzStop_clicked(){    OnvifDevice *device = frm->getCurrentDevice();    if (device) {        frm->setText("ptzStop");        QString profile = frm->getProfile();        device->moveStop(profile);    }}void frmPtz::on_btnPtzReset_clicked(){    x = 0.0;    y = 0.0;    z = 0.0;    moveAbsolute();}

感谢各位的阅读,以上就是"Qt Onvif云台控制怎么实现"的内容了,经过本文的学习后,相信大家对Qt Onvif云台控制怎么实现这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是,小编将为大家推送更多相关知识点的文章,欢迎关注!

云台 地址 控制 设备 数据 支持 信息 搜索 移动 参数 摄像机 摄像 用户 功能 就是 文件 焦距 视频 处理 配置 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 上海喔噻互联网科技有限公司 上海睿民互联网科技有限公司 互联网科技工作委员会 互联网与科技发展 中资互联网科技 世界互联网领先科技成果 兼蜜互联网科技 成都狮子座互联网科技 新华互联网科技校企合作 恒生科技互联网指数分析 太原新华互联网科技学校怎么样 博兴的互联网电子科技公司 宁夏众和广鑫互联网科技有限公司 成都铂石互联网科技做什么的 朱啸虎曾投资哪些互联网科技企业 黑科技 体验场景 互联网大会 陕西云淼互联网科技公司 广州燕处互联网科技有限公司 济南小医互联网科技有限公司招聘 互联网科技对化妆品行业 新华互联网科技学院 亿策互联网科技 海南科技产业互联网平台 富国互联网科技创新基金 欧洲十大科技互联网公司 互联网科技革命什么开始 花神(南京)互联网科技有限公司 互联网科技大奖都有哪些公司 小米互联网科技园入驻 科技信息时代互联网发展
0