千家信息网

Qt Onvif网络设置方法是什么

发表于:2025-12-02 作者:千家信息网编辑
千家信息网最后更新 2025年12月02日,这篇文章主要讲解了"Qt Onvif网络设置方法是什么",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"Qt Onvif网络设置方法是什么"吧!一、前言用
千家信息网最后更新 2025年12月02日Qt Onvif网络设置方法是什么

这篇文章主要讲解了"Qt Onvif网络设置方法是什么",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"Qt Onvif网络设置方法是什么"吧!

一、前言

用onvif协议来对设备的网络信息进行获取和设置,这个操作在众多的NVR产品中,用的很少,绝大部分用户都还是习惯直接通过摄像机的web页面进去配置,其实修改网络配置的功能在大部分的NVR中都是具备的,网络的参数主要包括IP地址、子网掩码、网关地址、DNS解析地址、NTP地址、网卡信息、网络协议等,这些都可以通过不同的onvif命令来获取和设置,一直没有搞懂为啥这些要分开不同的命令去处理,其实大可以合并成一个命令嘛,搞得设置个网络信息还要post好多次的数据才行。

通过抓包发现,这些网络参数的获取命令,基本上都类似,除了鉴权的头部数据,中间都是一个关键字,所以为了最大程度的复用代码,这里将通用的post数据和解析数据整合到一个函数中,传入不同的关键字进行处理即可。

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即可使用。

三、效果图

四、核心代码

QString OnvifOther::writeData(const QString &key, const QString &value, const QString &flag,                              bool xmlns, bool value4, quint8 type){    if (device->deviceUrl.isEmpty()) {        return QString();    }    QString file = device->request->getSendData(key, true, xmlns);    QByteArray dataSend = file.toUtf8();    //最后参数表示超时时间 一般请求都是很快的 除非对方不在线则卡很久 需要设置下超时时间    QNetworkReply *reply = device->request->post(device->deviceUrl, dataSend, 1000);    emit sendData(dataSend, device->deviceUrl);    QStringList results;    QByteArray dataReceive;    bool ok = device->checkData(reply, dataReceive, flag);    if (ok) {        OnvifQuery query;        query.setData(dataReceive);        if (type == 0) {            if (!value.isEmpty()) {                //可能有多个关键字需要获取                QStringList list = value.split("|");                foreach (QString str, list) {                    QString result = value4 ? query.getValue4(str) : query.getValue3(str);                    if (result != "-1") {                        results << QString("%1:%2").arg(str).arg(result);                    }                }            }        } else if (type == 1) {            results = query.getVideoSource();        }    }    return results.join(ResultSplit);}QString OnvifOther::systemReboot(){    return writeData("SystemReboot", "Message", "重启设备");}QString OnvifOther::getNtp(){    return writeData("GetNTP", "DNSname|IPv4Address", "获取NTP");}bool OnvifOther::setNtp(const QString &ntp, bool isIp){    QString wsdl = "http://www.onvif.org/ver10/device/wsdl";    QString schema = "http://www.onvif.org/ver10/schema";    QStringList list;    list << QString("    ").arg(wsdl);    list << QString("      false");    list << QString("      ");    list << QString("        %2").arg(schema).arg(isIp ? "IPv4" : "DNS");    list << QString("        <%3 xmlns=\"%1\">%2").arg(schema).arg(ntp).arg(isIp ? "IPv4Address" : "DNSname");    list << QString("      ");    list << QString("    ");    QString result = writeData(list.join("\r\n"), "SetNTPResponse", "设置NTP", false);    return result.contains("SetNTPResponse");}QString OnvifOther::getHostName(){    return writeData("GetHostname", "Name", "获取主机");}QString OnvifOther::getGateway(){    return writeData("GetNetworkDefaultGateway", "IPv4Address", "获取网关");}QString OnvifOther::getDns(){    return writeData("GetDNS", "IPv4Address|SearchDomain", "获取NDS");}QString OnvifOther::getInterface(){    return writeData("GetNetworkInterfaces", "Name|Address", "获取接口");}QString OnvifOther::getProtocol(){    return writeData("GetNetworkProtocols", "Name|Port", "获取协议");}

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

地址 设备 数据 支持 网络 信息 参数 搜索 处理 配置 时间 用户 方法 不同 云台 代码 命令 文件 控制 移动 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 奉贤区企业软件开发哪家好 皮卡堂是什么软件开发的 常德市网络安全知识 如何从sql跟踪数据库 简单商品页连接数据库 义乌云图网络技术有限公司 软件开发和使用合同范本 广播电视发射台网络安全职责 软件系统服务器资源怎么分配 数据库中decimal是什么 铠途互联网科技 怎样提高对网络安全的认识 一般数据库的特点 e4a怎么看数据库 电脑与服务器断开链接什么原因 职业规划网络安全 校园网络安全工作文件 山东正规软件开发费用是多少 天一网络技术有限公司招聘 网络安全防火墙技术 维普中文科技期刊数据库检索系统 一梦江湖服务器等级开放表 计算机网络技术电子教案下载 计算机网络技术运用的负面作用 兰州网络安全保障线上学习 网络技术应用的选择填空题 网络安全执法取证 校园网络安全知识主题班会 公安大学虹膜数据库 葫芦岛市夏创互联网科技有限公司
0