一、功能特点

  1. 广播搜索设备,支持IPC和NVR,依次返回。
  2. 可选择不同的网卡IP进行对应网段设备的搜索。
  3. 依次获取Onvif地址、Media地址、Profile文件、Rtsp地址。
  4. 可对指定的Profile获取视频流Rtsp地址,比如主码流地址、子码流地址。
  5. 可对每个设备设置Onvif用户信息,用于认证获取详细信息。
  6. 可实时预览摄像机图像。
  7. 支持云台控制,可上下左右调节云台,支持绝对移动、相对移动、连续移动三种方式,可对图像拉近拉远。
  8. 支持获取预置位集合、调用预置位、添加预置位、删除预置位等。
  9. 支持图片参数设置,包括亮度、对比度、饱和度、锐度等。
  10. 支持Qt4和Qt6任意Qt版本以及后续Qt版本。
  11. 支持任意编译器,亲测mingw、msvc、gcc、clang。
  12. 支持任意操作系统,亲测xp、win7、win10、android、linux、嵌入式linux、树莓派全志H3等。
  13. 支持任意Onvif摄像机和NVR,亲测海康、大华、宇视、天地伟业、华为、海思芯片内核等,可定制开发。
  14. 支持对指定IP地址及onvif地址进行单播搜索,比如跨网段情况下非常有用。
  15. 支持指定过滤条件过滤搜索设备,比如只搜索某个网段的设备或者针对某个地址的设备。
  16. 支持搜索间隔和搜索策略设置,保证所有设备搜索回来,在大量设备现场很有用(亲测上千个摄像机现场,搜索回来的设备数量比摄像机厂家自带搜索工具还要准确)。
  17. 可对设备进行重启、网络参数获取等。
  18. 支持各种事件订阅(入侵报警、越界报警、遮挡报警等)、Onvif抓图等操作。
  19. 支持NTP校时和时间同步设置。
  20. 支持OSD相关操作,可以增删改查OSD信息。
  21. 内置了线程实时执行Onvif指令队列,排队最大速度的执行对应的指令,执行结果信号发出。
  22. 采用的最底层的TCP+UDP通信机制,原创最底层协议解析,纯QtWidget编写。
  23. 超级小巧轻量,总共约3000行代码,不依赖任何第三方的库和组件,跨平台。
  24. 封装好了通用的数据发送和接收解析的函数,可以非常方便的自行拓展其他Onvif处理。
  25. 工具上提供了收发数据文本框,显示收发的数据,方便查看和分析。
  26. 支持所有Onvif设备,代码工整,接口友好,直接引入pri即可使用。

二、主要功能

  1. 搜索设备,获取设备的信息比如厂家、型号等。
  2. 获取设备的多个配置文件信息profile。
  3. 获取对应配置文件的视频流地址rtsp,以及分辨率等参数。
  4. 云台控制,上下左右移动,焦距放大缩小,相对和绝对移动。
  5. 获取预置位信息,触发预置位。
  6. 订阅事件,接收设备的各种消息尤其是报警事件比如IO口的报警。
  7. 抓图,获取设备当前的图片。
  8. 获取、创建、删除用户信息。
  9. 获取和设备网络配置信息比如IP地址等。
  10. 获取和设置NTP时间同步以及设置设备时间。
  11. 获取和设置视频参数和图片参数(亮度、色彩、饱和度)。
  12. 重启设备。

三、云台说明

  1. x、y、z 范围都在0-1之间。
  2. x为负数,表示左转,x为正数,表示右转。
  3. y为负数,表示下转,y为正数,表示上转。
  4. z为正数,表示拉近,z为负数,表示拉远。
  5. 通过x和y的组合,来实现云台的控制。
  6. 通过z的组合,来实现焦距控制。

四、处理流程

  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数据,带有前缀命名空间,解析的时候要注意。
  8. 每个厂家设备返回的数据未必完全一致,基本上都不一致,需要进行模糊查找节点值。
  9. 特意采用底层协议解析,因为soap太臃肿函数名称太另类,特意做的轻量级的。
  10. 两个必备工具,Onvif Device Manager 和 Onvif Device Test Tool。

五、使用说明

  1. 必须确认摄像机是支持onvif的摄像机。
  2. 搜索的时候选定正确的网卡,建议同一网段。
  3. 摄像机必须开启了onvif服务,很多摄像机为了安全性考虑默认可能不开启。
  4. onvif用户信息必须正确,一般摄像机onvif功能开启的地方可以添加用户。
  5. 在界面上输入用户名和密码的时候记得在界面中输入,不要在配置文件中输入,配置文件中存储的是密文。
  6. 图片参数的范围值有多种:0-100 0-128 0-255 如果发现设置不成功可以把值调小一点试试。
  7. 可以用国际官方工具(Onvif Device Manager 和 Onvif Device Test Tool)进行测试对比。
  8. 国际工具下载地址:https://pan.baidu.com/s/1d7TH_GEYl5nOecuNlWJJ7g 提取码:01jf

六、代码使用

  1. 第一步:拷贝onvif组件源码到你的项目,放到同级目录。
  2. 第二步:在项目pro文件中引入组件 include ($$PWD/../core_onvif/core_onvif.pri)。
  3. 第三步:代码文件引入头文件 #include "onvifsearch.h" #include "onvifdevice.h",其中onvifsearch用于搜索设备,onvifdevice用于获取设备的详细信息比如rtsp视频流地址。
  4. 第四步:组播或者单播搜索设备,获取到对应的onvif地址。每个设备都有一个唯一的onvif地址。
//实例化搜索对象并关联信号槽
OnvifSearch *search = new OnvifSearch(this);
connect(search, SIGNAL(receiveDevice(OnvifDeviceInfo)), this, SLOT(receiveDevice(OnvifDeviceInfo)));
//参数1是网卡地址/参数2指定地址则表示单播
search->search("192.168.0.110", ""); void frmSimple::receiveDevice(const OnvifDeviceInfo &deviceInfo)
{
QString msg = QString("收到设备: %1").arg(deviceInfo.onvifAddr);
ui->textEdit->append(msg); QListWidgetItem *item = new QListWidgetItem;
item->setText(deviceInfo.deviceIp);
item->setData(Qt::UserRole, deviceInfo.onvifAddr);
ui->listWidget->addItem(item);
}
  1. 第五步:对指定的onvif地址发送http请求,获取详细信息。
//实例化onvif对象实例
OnvifDevice *device = new OnvifDevice(this);
//设置用户信息用于请求的时候认证用
device->setUserInfo("admin", "123456");
//设置请求地址
device->setOnvifAddr("http://192.168.0.64/onvif/device_service"); //先获取服务文件
device->getServices();
//可能为空需要按照另一种方式获取
if (device->getMediaUrl().isEmpty()) {
device->getCapabilities();
} //获取配置文件
QList<OnvifProfileInfo> profiles = device->getProfiles();
foreach (OnvifProfileInfo profile, profiles) {
ui->cboxProfiles->addItem(profile.token);
} //对指定的配置文件获取视频地址
QString token = ui->cboxProfiles->currentText();
QString url = device->getStreamUri(token);
ui->txtStreamUri->setText(url);

六、效果图







七、体验地址

  1. 体验地址:https://pan.baidu.com/s/1d7TH_GEYl5nOecuNlWJJ7g 提取码:01jf 名称:bin_video_onvif
  2. 国内站点:https://gitee.com/feiyangqingyun
  3. 国际站点:https://github.com/feiyangqingyun
  4. 个人主页:https://blog.csdn.net/feiyangqingyun
  5. 视频主页:https://space.bilibili.com/687803542/
  6. 精品源码:https://shop244026315.taobao.com/

Qt/C++编写的Onvif调试助手调试神器工具/支持云台控制/预置位设置等/有手机版本的更多相关文章

  1. ONVIF客户端中预置位设置代码实现过程

    simpleOnvif的功能:提供支持Windows.Linux.arm.Android.iOS等各种平台的SDK库,方便集成,二次开发 之前跟大家分享了我们安徽思蔷信息科技的simpleOnvif的 ...

  2. 网络调试助手的使用 调试TCP,UDP

    网络调试助手是集TCP/UDP服务端客户端一体的网络调试工具,可以帮助网络应用设计.开发.测试人员检查所开发的网络应用软硬件的数据收发状况,提高开发的速度,是TCP/UDP应用开发助手. 集成TCP/ ...

  3. Qt编写Onvif搜索及云台控制工具

    一.前言 这个工具很早以前大概在2013年就想做了,后面杂七杂八的事情一再耽搁,记得当时最初用的是soap类来搜索和解析的,后面发现太大了,每次编译都要等好久,光源码文件加起来都快10MB了,而且函数 ...

  4. Qt编写网络调试助手(TCP客户端+TCP服务端+UDP服务端)终极版开源

    时隔半年,对网络调试助手工具进行所有代码重写,这次目录结果整齐的一逼,代码整齐的一逼,非常完善了,打死也不再改版了.这次真的打死也不再改版了.旧版本1:http://www.qtcn.org/bbs/ ...

  5. Qt 4.x调试器问题,缺失调试助手。

    之前项目开发需要用到4.x环境,固定多少版本避免团队开发不协调,然后拿了同事的开发包安装[注:我本子上原来就有4.x版本跟5.x版本,只是对应的4.x跟需求的不一样] creator是2.4.1的,同 ...

  6. 让QtCreator在调试时显示字符串 Qt调试助手 QtDebuggingHelper qtc-debugging-helper

    When starting gdb with application message “Debugging Helper Missing” is displayed [Solved] http://q ...

  7. 串口调试助手vc源程序及其详细编写过程

    串口调试助手vc源程序及其详细编写过程   目次: 1.建立项目 2.在项目中插入MSComm控件 3.利用ClassWizard定义CMSComm类控制变量 4.在对话框中添加控件 5.添加串口事件 ...

  8. TCP调试助手

    网络开发经常要用到一些TCP&UDP的调试工具,搜集一些备用. 目前总结工具有(不分先后): chrome等自带调试器调试HTTP Fiddler(.NET)和Charles debugger ...

  9. 杭州蓝松科技推出的安卓端的USB转串口调试助手, 欢迎下载使用

    杭州蓝松科技推出的安卓端的USB转串口调试助手, 欢迎下载使用 下载地址:http://files.cnblogs.com/guobaPlayer/%E8%93%9D%E6%9D%BEUSB%E4%B ...

  10. 利用ZYNQ SOC快速打开算法验证通路(2)——数据传输最简方案:网络调试助手+W5500协议栈芯片

    在上一篇该系列博文中讲解了MATLAB待处理数据写入.bin二进制数据文件的过程,接下来需要将数据通过以太网发送到ZYNQ验证平台.之前了解过Xilinx公司面向DSP开发的System Genera ...

随机推荐

  1. HTB打靶记录-Cicada

    Nmap Scan nmap扫描一下ip nmap -sT -sV -O -Pn 10.10.11.35 Nmap scan report for 10.10.11.35 Host is up (0. ...

  2. 云原生周刊:Gateway API 1.0.0 发布 | 2023.11.6

    开源项目推荐 Kueue Kueue 是一套用于作业队列的 API 和控制器.它是作业级管理器,可决定何时允许作业启动(如创建 pod),何时停止作业(如删除活动 pod). Reloader 一个 ...

  3. java基础语法(从0开始到java方法)

    文章目录 1.第一个java程序 2.数据的表示详解 2.1 整数在计算机中的存储原理 2.2 字符在计算机中的存储原理 2.3 图片视频声音的存储原理 2.4 数据的其他表示形式 2.5 不同进制在 ...

  4. 电脑端 itunes 备份保存路径修改方法

    默认在c盘,重做系统就会丢失. 1.先删除C:\Users\你的用户名\AppData\Roaming\Apple Computer里的 MobileSync文件夹(首次安装iTunes没有,要先运行 ...

  5. 初识GO语言--流程控制

  6. 如何使用Flask编写一个网站

    使用Flask编写一个网站是一个相对简单且有趣的过程.Flask是一个用Python编写的轻量级Web应用框架.它易于上手,同时也非常强大,适合构建从简单的博客到复杂的Web应用的各种项目.以下是一个 ...

  7. Mac 中 NSTrackingArea 鼠标移动事件捕获

    在Mac系统中处理View的鼠标进入,退出以及移动事件时,需要把捕获的区域设置为view的bounds 不能设置为frame. 1 self.trackingArea = [[[NSTrackingA ...

  8. 第二篇:低功耗模组Air724UG硬件设计手册

    ​  接着上篇,继续分享. 3.5 串口 模块提供了五个通用异步收发器:主串口 UART1.校准串口 UART2.通用串口 UART3.调试串口 HOST UART 和 ZSP UART. 3.5.1 ...

  9. ext 库及 pb_ds 在 OI 中的应用

    ext 库在 OI 中的应用 写一个帖子,防止以后忘了. pb_ds 部分 pb_ds 万能头 #include<bits/extc++.h> 来包含 ext 库中所有的头文件(例如 pb ...

  10. 拯救php性能的神器webman-使用后台webman-admin

    在webman的插件市场里面发现了这个 webman-admin 安装的话很简单,就是在已经安装了 webman 的目录里面执行  composer require -W webman/admin 安 ...