学习ffmpeg-录屏实现记录
创始人
2024-05-09 18:51:40

项目需要一个录屏的功能,之前看到了一个使用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的位置,拿我的屏幕举例:

相关内容

热门资讯

猫咪吃了塑料袋怎么办 猫咪误食... 你知道吗?塑料袋放久了会长猫哦!要说猫咪对塑料袋的喜爱程度完完全全可以媲美纸箱家里只要一有塑料袋的响...
阿西吧是什么意思 阿西吧相当于... 即使你没有受到过任何外语培训,你也懂四国语言。汉语:你好英语:Shit韩语:阿西吧(아,씨발! )日...
应用未安装解决办法 平板应用未... ---IT小技术,每天Get一个小技能!一、前言描述苹果IPad2居然不能安装怎么办?与此IPad不...
脚上的穴位图 脚面经络图对应的... 人体穴位作用图解大全更清晰直观的标注了各个人体穴位的作用,包括头部穴位图、胸部穴位图、背部穴位图、胳...
demo什么意思 demo版本... 618快到了,各位的小金库大概也在准备开闸放水了吧。没有小金库的,也该向老婆撒娇卖萌服个软了,一切只...