标题:推迟了十年终于搞定/纯Qt实现onvif设备模拟器/虚拟监控摄像头/批量模拟几千路/电脑桌面转onvif
作者:liudianwu
日期:2025-07-27 15:27
内容:
## 一、前言说明
视频监控设备一般都会支持onvif协议,在做视频监控平台软件开发的时候,一般需要外接监控设备进行测试,这种条件不是每个人每个时候都能具备的,比如有些时候设备可能拿出去用了,有些时候在家里加班调试程序,有时候需要几千路接入进行压力测试,林林种种的情况非常多,所以急切需要一个onvif设备模拟器,可以将视频文件转换成onvif设备,这样就无须单独具备监控设备,要多少路就模拟多少路,甚至还可以给监控平台软件做压力测试,比如一些监控平台号称可以同时接入几千路,同时显示64路,用这个模拟器对接后,一切性能都显出原形。同时显示64路主码流查看对应的电脑CPU和GPU使用情况。
整个onvif模拟器需要分三大块,第一块是要实现onvif组播搜索,第二块是实现onvif请求应答交互,第三步是实现rtsp推流,三部缺一不可,如果只是需要onvif通信交互不需要视频,那就rtsp推流这块不用。要在Qt中实现组播,要从4.8开始就可以,udp直接就提供了组播功能,这里有个插曲,应该很多做组播开发的人会遇到,当电脑上多个网卡的时候,组播的时候joinMulticastGroup第二个参数,就是指定网卡,不指定的话,很可能本地搜索不到,不指定网卡可能随机绑定到某个或者多个上面,导致不稳定,时好时坏,我就在这块搞了很多天,查阅了众多资料才找到的。
网上很多人做onvif设备端,都是使用第三方开源库soap啥的,我也用过,能用但是使用复杂,尤其是函数命名使用很不爽,部分接口有bug,需要自己调整,基于全宇宙原创者五个字的卖点,还是打算从协议底层解析来做,毕竟Qt的网络通信还是用的比较熟悉,协议这块通过抓包也是都能拿到,那就底层直接tcp监听来做,收发数据通过xml数据填充对应的字段即可,拓展性强,可控性也好。
## 二、效果图
## 三、相关地址
1. 国内站点:[https://gitee.com/feiyangqingyun](https://gitee.com/feiyangqingyun)
2. 国际站点:[https://github.com/feiyangqingyun](https://github.com/feiyangqingyun)
3. 个人作品:[https://blog.csdn.net/feiyangqingyun/article/details/97565652](https://blog.csdn.net/feiyangqingyun/article/details/97565652)
4. 文件地址:[https://pan.baidu.com/s/1d7TH_GEYl5nOecuNlWJJ7g](https://pan.baidu.com/s/1d7TH_GEYl5nOecuNlWJJ7g) 提取码 ..