首页| 论坛| 消息

标题:纯Qt结合ffmpeg实现本地摄像头采集/桌面采集/应用程序窗口采集/指定采集帧率和分辨率等
作者:liudianwu
日期:2025-08-19 08:34
内容:

## 一、前言说明
ffmpeg的功能真的是包罗万象,除了基本的编解码,还有个专门的avdevice模块用来对本地设备的采集支持,最开始用到ffmpeg采集本地摄像头的缘由,还不是因为Qt不给力,Qt5开始有个qcamera类,但是只能在windows或者部分linux系统才有用,而且功能非常有限,尤其是在嵌入式linux上使用非常鸡肋,几乎是无用状态,后面也尝试用v4l2这个万能方案采集,这个是通用的linux多媒体框架,只能在linux上使用,所有后面慢慢发展成了win上使用qcamera采集,linux使用v4l2采集的方式,依然不够满足,后面自从用了ffmpeg做音视频的解码后,发现他居然也支持本地设备采集,所以用ffmpeg实现了对应的功能,显示效果比v4l2好很多,毕竟ffmpeg这边采集后解码出来的yuv数据可以直接用qopenglwidget绘制,而v4l2采集后转成了qimage然后用painter绘制,性能上大打折扣,何不直接用ffmpeg方案做跨平台的采集呢。
实现完采集本地USB摄像头,后面又有不少用户希望能够采集本地桌面,这些好了,只能用ffmpeg做,而且也是最方便的,只需要在之前采集本地摄像头的框架代码基础上,改动几行代码即可,非常的方便快速,不得不说ffmpeg底层架构的非常棒。采集桌面还可以指定采集区域以及不同的屏幕,不指定的话默认采集整个屏幕,有时候是双屏多屏幕的,所以围绕这块,专门做了很多参数设置,可以指定哪个屏幕采集,指定屏幕对应的区域范围,指定采集帧率,林林总总都搞定以后,又来个新的需求,能不能采集指定应用程序窗口呢?答案也是可以的,所以后面又做了个先枚举本地所有应用程序窗口的函数,让用户下拉框选择,然后指定对应窗口的标题进行采集,无论程序拖动到哪个位置,还能正常采集,目前还有个缺陷,那就是窗体大小发生变化后,不能正常识别新的大小,不知道各位大佬有没有好的思路方案。

## 二、效果图


## 三、相关地址
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/ ..

回复 发表
主题 版块