首页| 论坛| 消息

标题:工匠精神/Qt同时推流和录制16路1080p/CPU占用不到1%/实时性好/极低资源占用/优化到极致
作者:liudianwu
日期:2025-08-07 10:28
内容:

## 一、前言说明
光一个推流组件就写了很多年,不是工匠精神是什么?谁说写程序不需要工匠精神的,没有工匠精神就做不出一个好用的程序。搞程序开发这么多年,明白一个道理,为了能快速获取用户,首先要快速迭代出来一个基本可用的版本发布,就是满足基本功能,然后推出来看下用户的反应,受欢迎的功能点可以持续继续迭代,不欢迎的功能,或者几百年用不上的功能,考虑直接去掉,或者默认配置关闭,用户需要再自行开启。
用Qt结合ffmpeg做推流,最开始都是先采集解码再推流,发现挺占CPU的,毕竟解码这块费CPU,哪怕是硬解,也是费一定的CPU,而且路数多了的话,比如64路同时拉流推流,如果都去解码后再推流,资源占用极高,没有一个好配置的电脑可能都撑不住,那怎么办,发现人家很多NVR配置很低的,但是依然能支撑至少16路的同时保存,除了用了专有的硬件外,应该是有其他机制,查阅资料后发现,越来只要是264/265流数据,可以不用解码直接保存或者推流,这样就几乎不用占用任何CPU,哪怕是16路也是0%的占用,我去这不正是我们想要的结果吗?于是在之前的ffmpeg采集解码线程增加了标志位,专门用来控制是否需要去解码,如果要显示当前采集线程的画面,就需要解码,否则不需要。
光推流还不能体现优化到极致,如果再加上推流的同时保存文件到本地呢,这下压力就很大了吧,有些做法是再去拉流保存,这大可不必,毕竟推流这边的拉流线程已经拉到了,完全可以复用数据,其实就是收到的packet数据再次保存即可,所以又在采集线程的基础上,增加了发出packet的信号,以便多路复用数据,自此效果非常完美,16路1080P同时推流和录制,居然占用不到1%的CPU,不要太好。
## 二、效果图


## 三、相关地址
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) 提取码:01jf 文件名:bin_video_push。
## 四、功能特点
1. 支持各种本地音视频文件和网络音视频文件,格式包括mp3、aac、wav、w ..

回复 发表
主题 版块