惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

J
Java Code Geeks
Jina AI
Jina AI
小众软件
小众软件
WordPress大学
WordPress大学
Last Week in AI
Last Week in AI
美团技术团队
V
V2EX
酷 壳 – CoolShell
酷 壳 – CoolShell
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
博客园 - 聂微东
博客园 - 【当耐特】
人人都是产品经理
人人都是产品经理
雷峰网
雷峰网
博客园 - 司徒正美
量子位
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
宝玉的分享
宝玉的分享
月光博客
月光博客
IT之家
IT之家
博客园 - 三生石上(FineUI控件)
大猫的无限游戏
大猫的无限游戏
T
Tailwind CSS Blog
博客园 - Franky

博客园 - 飞扬青云

坚持古法编程有意义吗/纯手搓代码/监控Onvif调试神器 AI编程道心崩塌/十几年Qt开发经验一文不值 就说逆不逆天/支持高达500路监控画面/多个屏幕同时显示/轻松实现跨屏实时监控 高程海拔离线实时查询显示终极版/体验友好/全网首创极精简版本/可输入地址或者经纬度查询 Qt实现很好玩的滤镜效果/高斯模糊径向模糊/底片锐化暗角鱼眼/多点矫正几何矫正边缘融合/扭曲网格调整 震惊都6202年了/地图控件居然支持Qt4这个老古董/支持国产军工低配Qt环境 Qt代码实现地图瓦片电子放大/无极缩放/可将层级拓展到22级别/精确到0.03米 纯QWidget绘制打造地图组件/极速加载瓦片地图/放大缩小地图过渡效果 这才是地图控件该有的样子/不依赖js和qml/纯古法原创自研/纯代码绘制/最新版含泪发布 效果拉满/纯Qt实现海图地图展示/矢量底图+海图+路网标记任意多层叠加/完美支持海图叠加与多投影系 GB28181视频监控推流服务/点播预览推流/录像回放推流/指令预览推流/指令回放推流/自动预览推流 Qt电子地图叠加海图/全世界海图叠加到天地图图层/1-18级海图实时查看 超级屌的动态测距交互功能/耗时几万个脑细胞/自研原创地图控件 Qt纯原创代码实现GB28181组件/自动点播拉流并推流/支持录像回放和下载/性能凶残 全网原创再次熬夜升级/支持云台预置位的onvif设备模拟器/虚拟监控摄像头/可设置主码流子码流 使用ffmpeg播放不同节目/实时切换节目并推流/推流不同的节目流 新版监控GB28181调试神器V2026发布/对标wvp/绿色版开箱即用 全网唯一/不依赖浏览器和qlocation/纯代码绘制实现的地图组件/短小精悍 监控设备模拟神器V2026全新含泪发布/支持onvif和gb28181/支持云台控制和预置位 将地图组件运行在浏览器上/qtlocation都做不到/轻巧好用/自研原创 不依赖任何AI代码/纯qpainter实现的航线规划/飞行轨迹规划和模拟/无人机轨迹 如何快速搭建一套支持ONVIF的安防监控系统 没有想不到只有做不到/万能地图标注点marker设计/各种参数需求场景/你要的都有 呕心沥血/历时半年/古法编程/纯QPainter实现的地图控件/性能爆表 绘制1000个无人机只需7ms/优化到极致/地图组件海量标注点/纯QPainter绘制的威力 实时轨迹/轨迹回放/多条轨迹同时回放/轨迹平滑移动/移动速度和间隔/自动旋转角度 记一个优化改良的实施过程/纯QPainter实现的地图组件/支持天地图谷歌地图等 性能提升百倍/Qt地图组件纯QWidget绘制/缓存瓦片技术/多线程加载绘制 纯QWidget绘制实现电子地图控件/非qml非web/多线程下载和加载瓦片/支持各种图形 Qt实现离线地图下载/瓦片地图下载/划区域下载离线地图/多线程批量下载
对标国际Onvif工具odm/新版视频监控onvif调试助手V2026发布/...
飞扬青云 · 2026-05-19 · via 博客园 - 飞扬青云

一、前言说明

这个工具完善了十几年,从2014年开始就写了,从最开始只有搜索功能,后面加了云台控制,后面又有预置位,然后图片参数调节,再到后面加了OSD管理等,一直不断的迭代功能,满足现场用户实际需求,包括后面还做了手机安卓版本,也是方便某些用户做简便的调试使用。这个工具发布到如今,本意是给程序员尤其是qt开发者做二开用的,实际有超过半数的用户是非程序员,他们主要是工程人员,都是现场调试使用。那就有疑问了,本来就有个国际onvif工具odm,全称ONVIF Device Manager,功能也挺强大,但是不支持跨网段搜索,而且不支持265视频显示,云台也不支持左上角右下角,也没有OSD管理功能,总之工程人员用下来比较嫌弃,对比我这个工具用下来,都觉得我这个绿色版双击开箱即用非常好,满足了实际现场所有可能的情况。

近期在写监控设备模拟器过程中调试发现,收发数据的打印放在表格中,非常直观好用,之前打印在文本框中,尽管有不同颜色显示,也用换行隔开了,但是由于每个数据包很大很多内容,导致经常滚动条拉很久,要找到自己想要的数据,非常困难,而现场调试对于这个数据很敏感,查问题经常就需要这个原始的收发数据,onvif基本上都是一问一答,发个请求对应一个应答数据,表格中有对应的收发关键字,双击再弹出显示具体的详细数据,这样可以非常快速的定位数据包。

二、效果图

video_onvif1

video_onvif2

video_onvif3

video_onvif4

video_onvif5

三、相关地址

  1. 国内站点:https://gitee.com/feiyangqingyun
  2. 国际站点:https://github.com/feiyangqingyun
  3. 个人作品:https://blog.csdn.net/feiyangqingyun/article/details/97565652
  4. 文件地址:https://pan.baidu.com/s/1d7TH_GEYl5nOecuNlWJJ7g 提取码:01jf 文件名:bin_video_onvif

四、功能特点

  1. 一键广播搜索设备,同时支持IPC和NVR等各种onvif设备,依次排队返回。
  2. 可选择不同的网卡搜索,支持跨网段组播搜索。
  3. 依次获取Onvif地址、Media地址、Profile文件、Rtsp地址等信息。
  4. 可对指定的Profile获取视频流Rtsp地址,比如主码流地址、子码流地址。
  5. 可对每个设备设置Onvif用户信息,用于鉴权认证获取详细信息。
  6. 可实时预览通道画面图像,支持视频录制到本地,支持硬解码显示。
  7. 支持云台控制,可上下左右和左上角等八个方位调节云台,支持绝对移动、相对移动、连续移动三种方式,支持变倍和聚焦控制。
  8. 支持获取预置位信息、调用预置位、添加预置位、删除预置位等。
  9. 支持图片参数设置,包括亮度、对比度、饱和度、锐度等。
  10. 支持各种事件订阅,包括入侵报警、越界报警、遮挡报警等。
  11. 支持onvif协议抓图,返回对应的抓拍图片。
  12. 支持获取和设置NTP校时,获取和设置时间。
  13. 支持OSD相关操作,可以增删改查OSD信息,可以调整OSD的位置以及设置颜色。
  14. 可对设备进行重启、网络参数获取和设置等操作。
  15. 支持对指定IP地址及onvif地址进行单播搜索,比如跨网段情况下非常有用。
  16. 支持指定过滤条件过滤搜索设备,比如只搜索某个网段的设备或者针对某个地址的设备。
  17. 支持搜索间隔和搜索策略设置,保证所有设备搜索回来,在大量设备现场很有用,亲测上千个摄像机现场,搜索回来的设备数量,比摄像机厂家自带搜索工具还要准确。
  18. 内置了线程实时执行Onvif指令队列,排队最大速度的执行对应的指令,执行结果信号发出。
  19. 采用的最底层的TCP+UDP通信机制,原创最底层协议解析,纯QWidget编写。
  20. 超级小巧轻量,总共约3000行代码,不依赖任何第三方的库和组件,跨平台。
  21. 封装好了通用的数据发送和接收解析的函数,可以非常方便的自行拓展其他Onvif处理。
  22. 表格形式显示收发数据,有关键字和不同颜色显示,双击显示详细数据,非常方便现场调试。
  23. 支持所有Onvif设备,亲测海康、大华、宇视、天地伟业、华为、海思等,可定制开发。。
  24. 代码结构框架非常清晰,注释详细,代码精简不繁琐,非常易于学习和移植,可以很容易拓展其他接口需求。
  25. 支持Qt4/Qt5/Qt6以及后续所有版本、所有编译器、所有开发环境。
  26. 支持windows、linux、mac、安卓、国产OS、嵌入式linux、RK3588、树莓派、香橙派等系统。

五、代码使用

  1. 第一步:拷贝onvif组件源码即core_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. 特别提示:可以在main.cpp中注释//frmMain w;打开frmSimple w;用来开启直接运行简单示例。