纯Qt代码实现onvif协议设备端/onvif设备模拟器/onvif虚拟监控设备/桌面转onvif

一、前言说明

在视频监控系统的开发中,ONVIF(Open Network Video Interface Forum)作为行业标准协议,被广泛应用于设备与平台之间的互联互通。通常我们认为,ONVIF 协议的设备端实现应运行在摄像头等嵌入式下位机上,由固件直接处理协议交互。然而,在实际开发过程中,我们发现:使用 Qt 在 PC 端实现一个完整的 ONVIF 设备模拟器,不仅可行,而且极具实用价值。

很多人认为 ONVIF 模拟器只是为了方便平台调试而存在的“测试工具”。但深入一线业务后我们会发现,它其实能解决一些长期被程序员忽略的实际问题。例如,在零售行业的收银系统中,虽然已有物理摄像头对准收银台进行录像,但往往只能看到操作动作,无法清晰记录电脑界面上的具体操作细节——比如是否误删订单、有无私自打折、甚至是否存在非工作行为。这时,如果能将收银电脑的桌面画面虚拟成一路 ONVIF 摄像头通道,并接入现有的 NVR 或视频管理平台(VMS),就能实现“操作过程+现场画面”的双重记录。一旦发生纠纷或异常事件,管理员可直接调阅对应时间点的桌面操作录像,快速定位问题,极大提升取证效率与管理透明度。这正是 ONVIF 设备模拟器的核心价值之一:让非视频设备具备标准化的视频输出能力,无缝融入现有监控体系。

除了真实业务需求外,ONVIF 模拟器在研发阶段也扮演着不可或缺的角色。在开发视频监控平台软件时,通常需要连接大量 ONVIF 设备进行功能验证和性能压测。但在实际工作中常常面临以下困境:

  • 真实设备数量有限,多人协作时容易被占用;
  • 远程办公或在家调试时无法访问硬件环境;
  • 需要模拟数百甚至上千路设备来测试平台接入能力;
  • 要验证多品牌兼容性、异常响应处理等边界情况。

此时,一个灵活可控的 ONVIF 模拟器就显得尤为重要。它可以:

  • 将本地视频文件或屏幕画面模拟为虚拟摄像头;
  • 动态生成多个 ONVIF 设备实例;
  • 支持自定义设备信息、编码参数、网络行为;
  • 配合压力测试,评估平台在高并发下的 CPU/GPU/内存占用情况。

通过模拟器,我们可以轻松验证诸如“是否支持64路同时预览”、“NVR 接入千路设备后稳定性如何”等问题,真正做到闭环测试。

二、效果图

Snipaste_2025-10-01_14-52-03

Snipaste_2025-10-01_14-59-31

Snipaste_2025-10-01_15-00-11

Snipaste_2025-10-01_15-00-46

三、相关地址

  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_simulate。

四、功能特点

  1. 标准onvif协议,支持设备搜索、获取参数、快照抓图等。
  2. 支持264/265/aac等标准视音频协议传输。
  3. 支持多路批量onvif设备模拟,每一路都独立的端口。
  4. 支持本地摄像头采集转成onvif,可选择不同的设备、分辨率、帧率等参数。
  5. 支持本地桌面采集转成onvif,可选择不同的屏幕、分辨率、帧率等参数。
  6. 支持各种视频文件和视频流转成onvif,可重新设置编码转换以及分辨率转换。
  7. 支持4K、8K等高清分辨率,不限制分辨率,非264/265会自动转码推流。
  8. 每一路都可以设置统一或者独立的用户验证信息,为空则表示不验证。
  9. 可以把任意内容接入到NVR以及视频监控系统,方便保存录像文件,以便回放可查。
  10. 也可作为压力测试工具,比如模拟几千路onvif设备,让集成平台软件做接入压力测试。
  11. 推出去的流不仅有rtsp格式,还支持rtmp、http、flv、ws-flv、webrtc等方式访问,可以直接网页查看。
  12. 在管理工具上可以看到每一路的推流状况以及分辨率信息,非常直观。
  13. 支持自动重连拉流,重连推流,保证7乘以24小时稳定运行。
  14. 可设置开机自启动运行和后台运行,不显示在任务栏,作为后台服务运行。
  15. 可批量添加文件、添加目录,自动将目录下的所有文件添加到模拟器。
  16. 多功能添加地址面板,可以选择本地设备和监控设备,本地设备会自动识别摄像头设备和桌面设备,监控设备可以选择不同厂家,自动填充对应rtsp格式,填入用户信息即可,可以批量递增添加监控设备。
  17. 可无缝上传到市面上所有的onvif协议设备,包括海康、大华、宇视、华为、天地伟业等,也支持ONVIF Device Manager国际onvif工具。
  18. 支持gb28181设备模拟,具备设备注册、设备注销、设备心跳、设备信息、设备配置、设备状态应答等。
  19. 支持模拟报警和位置上报等,方便平台侧显示对应设备的实时位置。
  20. 支持一键添加批量模拟28181设备,实时显示已注册和已注销状态。
  21. 支持将本地桌面、本地摄像头、任意视频文件、视频流文件、手机摄像头等转换成28181设备,添加到NVR或者国标软件平台。
  22. sip协议同时支持udp和tcp两种通信方式,视频点播同时支持udp/tcp主动/tcp被动三种方式,涵盖所有可能的场景需求。
  23. 无论是onvif设备模拟组件还是28181设备模拟组件,全部原创底层协议解析,纯Qt实现,跨任意平台。
  24. 代码结构框架非常清晰,注释详细,代码精简不繁琐,非常易于学习和移植,可以很容易拓展其他接口需求。
  25. 支持Qt4/Qt5/Qt6以及后续所有版本、所有编译器、所有开发环境。
  26. 支持windows、linux、mac、国产OS、嵌入式linux、RK3588、树莓派、香橙派等系统。

五、相关代码

  1. 拷贝依赖组件 core_video/core_videobase/core_videoffmpeg/core_videohelper/core_onvifdevice到你的项目目录下,其中onvifdevice组件是onvif设备模拟的核心,由onvif搜索、onvif监听交互、rtsp推流三部分共同组成,推流模块依赖core_video/core_videobase/core_videoffmpeg/core_videohelper四个模块。
  2. pro文件中引入组件
include ($$PWD/../core_video/core_video.pri)
include ($$PWD/../core_videobase/core_videobase.pri)
include ($$PWD/../core_videohelper/core_videohelper.pri)
include ($$PWD/../core_videoffmpeg/core_videoffmpeg.pri)
include ($$PWD/../core_onvifdevice/core_onvifdevice.pri)
  1. pro文件开启对应标记,DEFINES += ffmpeg ffmpeg4 videoffmpeg ,其中ffmpeg4表示所用的ffmpeg版本,按照实际情况更改。
  2. 引入头文件 #include "onvifdeviceserver.h"。
  3. 编写代码实现onvif设备服务。
//实例化onvif管理类
OnvifDeviceServer *server = new OnvifDeviceServer(this);
//设置对应的参数
server->setPara("192.168.0.110", "192.168.0.110", "admin", "123456");//按需关联信号槽/可以不需要
connect(server, SIGNAL(sendData(QByteArray)), this, SLOT(sendData(QByteArray)));
connect(server, SIGNAL(receiveData(QByteArray)), this, SLOT(receiveData(QByteArray)));
connect(server, SIGNAL(receiveInfo(QString)), this, SLOT(receiveInfo(QString)));
connect(server, SIGNAL(receiveError(QString)), this, SLOT(receiveError(QString)));
connect(server, SIGNAL(pushStart(QString, int, int, bool)), this, SLOT(pushStart(QString, int, int, bool)));
connect(server, SIGNAL(pushChanged(QString, int)), this, SLOT(pushChanged(QString, int)));//启动服务
server->start();//添加一路模拟服务/文件方式
server->append("video1", 6920, "f:/1.mp4", "rtsp://192.168.0.110:8554/stream/video1");
//添加一路模拟服务/本地摄像头
server->append("video2", 6921, "video=USB Video Device|1280x720|30", "rtsp://192.168.0.110:8554/stream/video2");
//添加一路模拟服务/本地桌面
server->append("video3", 6922, "screen=desktop", "rtsp://192.168.0.110:8554/stream/video3");
//添加一路模拟服务/监控设备
server->append("video4", 6923, "rtsp://admin:Admin123456@192.168.0.64/Streaming/xxx", "rtsp://192.168.0.110:8554/stream/video4");//添加一路模拟服务/内存流
server->append("video5", 6924, "stream://", "rtsp://192.168.0.110:8554/stream/video5");
//内存流方式对一个步骤/需要拿到数据后不断的添加进去
QByteArray data = "xxxx";
server->appendData("video5", data);//停止服务
server->stop();
  1. 特别说明
  • 使用append方法添加模拟,可以在启动后添加也可以在启动前添加,如果是启动前添加的,则启动服务后会自动启动服务,如果是启动前添加的,则在调用onvifServer->start()的时候里面会自动判断进行启动服务。
  • 关联信号槽并不是必须的,按照自己的实际需求来,比如需要知道推流成功和变化信号,那就需要关联对应的信号到槽进行处理。
  • 在不需要服务的时候一定要关闭服务,一般是在软件退出的时候,否则会内存泄漏。
  • onvif管理类目前需要设置四个参数,外网地址、内网监听地址、用户名称、用户密码,其中用户信息用来做onvif鉴权服务,每一路都可以不同的用户信息,这里图方便直接统一一个用户就行。为何还有个外网地址,这种情况一般是在云服务器上才需要的,上面的内网监听地址和对外服务的外网地址都不同,在本地电脑一般两个地址都是一样的。
  • 添加模拟服务支持多种媒体源,其中格式要求可以参见编译说明的地址格式说明。支持将本地视频文件、视频流、网络地址、本地摄像头、本地桌面等,每一种对应的格式要求都不一样。
  • 添加模拟服务append函数有四个参数,参数1表示唯一标识;参数2表示监听端口,每一路都是不同的监听端口;参数3表示采集媒体源地址,如果是内存流则填 stream:// 固定字串;参数4表示推流地址,默认采用mediamtx流媒体服务,8554端口,也可以换成其他流媒体服务比如zlm,只要地址和端口正确就行,要求推流地址的后缀就是唯一标识。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/923977.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

高中教做网站的软件表格制作教程 步骤

可能是明月好久没有使用境外服务器挂载境外的云盘缘故吧,今天一个代维客户需要他的Linux服务器挂载谷歌云盘好进行云备份,本来是个很简单的事儿,没想到在rclone连接谷歌云盘的时候卡壳了,可是把明月给难为坏了,搜索到的简体中文教程倒是很多,但没有一个提到这个“坑”,最…

OI 笑传 #13

zatto今天是思维题大手子。 CF2130B 左转这个东西很烦,把它规约掉。 由于是一定要到 \(n\) 的,因此左转之后必须要右转,考虑单位元,也就是左走一格之后往右走一格是怎么个事。也就是多加一倍这两个格子里的数。 考…

*补*““逆元求组合数”(费马小定理

组合数快速求法 #include <bits/stdc++.h> #define ll long long #define MAXN 1010 using namespace std; namespace SHuxinn{ll pri[MAXN];ll ni[MAXN];ll ans1 , ans2;ll pow(ll a , ll b){ll ans = 1 , base…

C# WPF中Binding的 Source属性和ElementName属性有什么区别

好的,这是一个WPF数据绑定中非常核心和常见的问题。Source 和 ElementName 都是用来设置绑定源(即数据的来源)的属性,但它们的应用场景和灵活性有显著区别。 下面通过一个对比表格和详细解释来说明它们的区别。 核…

Typora to Obsidian 迁移助手 (Typora-to-Obsidian-Migration-Helper)

一个交互式的、基于状态机模式的 Python 脚本,旨在帮助用户安全、高效地将 Typora 笔记库迁移至 Obsidian。它将多个繁琐的手动步骤整合为一个自动化的、可控的流程。本脚本基于历史文章中模块程序组合而成,能够实现…

网站怎么做关键词搜索网站建设 无法打开asp

发送报文处理 增加一个功能码映射关系 //功能码映射关系public readonly Dictionary<string, byte> ReadFuncCodes = new Dictionary<string, byte>();<

二七网站建设网站分析与优化

每当MyBatis设置PreparedStatement的参数或从ResultSet中检索值时&#xff0c;都会使用TypeHandler以适合Java类型的方式来检索值。下表描述了默认的TypeHandlers。 自MyBatis 3.4.5版本起&#xff0c;默认支持JSR-310&#xff08;日期和时间API&#xff09;。 Type HandlerJ…

台州网站建设技术支持网站上的3d产品展示怎么做

目录 一、压力的方向(FORCE) 1、为正的情况 2、为负的情况 二、压强的方向(PRESSURE)

深入解析:【APK安全】敏感数据泄漏风险与防御指南

深入解析:【APK安全】敏感数据泄漏风险与防御指南pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas"…

大型网站建设与维护过程学做家常菜的网站有哪些

1、过期删除策略 1.1、介绍 Redis 是可以对 key 设置过期时间的&#xff0c;因此需要有相应的机制将已过期的键值对删除&#xff0c;而做这个工作的就是过期键值删除策略。 每当我们对一个 key 设置了过期时间时&#xff0c;Redis 会把该 key 带上过期时间存储到一个过期字典…

网站设置密码最近韩国电影片

标题&#xff1a;递增三元组 给定三个整数数组 A [A1, A2, … AN], B [B1, B2, … BN], C [C1, C2, … CN]&#xff0c; 请你统计有多少个三元组(i, j, k) 满足&#xff1a; 1 < i, j, k < NAi < Bj < Ck 【输入格式】 第一行包含一个整数N。 第二行包含N个整…

详细介绍:开源 java android app 开发(十七)封库--混淆源码

详细介绍:开源 java android app 开发(十七)封库--混淆源码2025-10-01 15:05 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !impor…

Meta基础设施演进与AI技术革命

本文详细介绍了Meta从传统社交网络基础设施向AI驱动架构的演进历程,涵盖分布式系统构建、GPU集群扩展、自研芯片开发、散热解决方案等关键技术挑战与创新突破。Meta基础设施演进与AI时代 在过去的21年里,Meta从连接美…

完整教程:Spring AI整合聊天模型DeepSeek

完整教程:Spring AI整合聊天模型DeepSeekpre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "…

2025 年焚烧炉厂家 TOP 企业品牌推荐排行榜!权威甄选实力与口碑俱佳的江苏焚烧炉 / 无锡焚烧炉推荐这十家公司!

随着工业领域的快速发展,危险废物、工业废弃物的产生量持续增加,焚烧炉作为实现废弃物减量化、无害化处理的关键设备,其市场需求不断攀升。但当前焚烧炉行业面临诸多问题,部分厂家缺乏核心技术,设备排放难以达到环…

2025 年防腐涂料厂家 TOP 企业品牌推荐排行榜,乙烯基、环氧煤沥青、环氧防腐涂料、防腐涂料地坪 、防腐涂料水池推荐这十家公司!

在当前工业生产、建筑工程、石油化工等众多领域,防腐涂料扮演着至关重要的角色,它能有效延长设施设备的使用寿命,降低维护成本。然而,如今防腐涂料行业市场鱼龙混杂,产品质量参差不齐,不同品牌的技术水平、产品性…

Mysql DBA学习笔记(主从复制) - 实践

Mysql DBA学习笔记(主从复制) - 实践pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Mon…

网站中文章内图片做超链接wordpress微信登录页面模板

日志只有这一行&#xff0c;比较难排查 排查途径&#xff1a; 1、从上图找到唯一的文件输出output.js&#xff0c;断点查看堆栈信息&#xff0c;如下图&#xff0c;可以看到这个错误是由于哪个文件引起的 以为从App.vue中定位到原因了&#xff0c;其实也不对&#xff0c;继续…

百度注册网站网站字体大小合适

文章目录 Redis主从部署1.下载安装Redis2.单点双副本主从配置1.修改配置信息2.修改配置文件redis.conf3.拷贝配置文件到每一个实例文件夹里4.修改每一个实例的端口和工作目录5.配置主从关系6.检查效果 3.哨兵模式监控主从1.创建实例目录2.复制配置文件并进行修改3.启动并测试 4…

2025双氧水厂家权威推荐榜:优质供应与专业定制实力之选

2025双氧水厂家权威推荐榜:优质供应与专业定制实力之选 在当今精细化工与工业制造领域,双氧水作为重要的基础化学品,其品质稳定性和供应专业性直接影响着下游产业的生产效率与产品质量。随着环保要求的日益严格和应…