学习ffmpeg-录屏实现记录

项目需要一个录屏的功能,之前看到了一个使用Qt计时器+截图+avilib生成AVI+ffmpeg合并视频音频的方式:

Qt C++ 录屏录音功能实现(avilib+ffmpeg)以及动态库生成

https://blog.csdn.net/qq_35769071/article/details/125323624

使用后,出现不少问题;首先32位的avilib里的pos是有符号的long型,如果要保存的图片大小大于long型的有效范围,则会崩溃;如果是1920*1080的分辨率,视频只能保存2分钟左右;其次是视频和音频是分别录制的,需要使用ffmpeg.exe合并,如果连续录制2个小时,avi和mav的大文件使用ffmpeg合并,可能会出现问题;

同事找到了一个开源的C#例子,Captura-9.0.0-beta4,可以支持选择区域录制;底层是用process调用的ffmpeg的命令实现的;

还是觉得应该使用C++的ffmpeg库来实现该功能;

同学推荐了基本ffmpeg的书和以及编译可用的Windows库,有需要的可以从下面链接下载;

链接:https://pan.baidu.com/s/1xnHlS0KLUelzSqT5nUleLg

提取码:hl1q

这里贴一个ffmpeg实现录屏的地址;

FFMPEG录屏(1)----录制桌面

https://blog.csdn.net/peilinok/article/details/102981560

里面将了ffmpeg的常用使用方式,还有一个录屏的一个开源代码:

https://gitcode.net/mirrors/peilinok/screen-recorder?utm_source=csdn_github_accelerator

使用的ffmpeg

遇到的问题:

需要关闭ffmpeg的日志打印

av_log_set_level(AV_LOG_ERROR);

如果需要录制扩展屏幕,需要使用Recorder中的record_desktop_duplication类,根据get_adapters获取所有的适配器信息,主屏幕的坐标是从(0,0)开始的,扩展屏幕是相对主屏幕的坐标计算的;

auto adapters = d3d_helper::get_adapters(&error, true);

在函数get_dst_adapter内修改,for内逻辑,需要将adapters内的每个适配器的信息记录下来,然后决定录制那个屏幕;还有一个问题,如果获取屏幕的缩放比例?

int record_desktop_duplication::get_dst_adapter(IDXGIAdapter ** adapter)

如果主屏幕有缩放,就需要计算出相对于1920*1080的位置,拿我的屏幕举例:

猜你喜欢

转载自blog.csdn.net/liushao1031177/article/details/128624358