一、前言

之前用ffmpeg打通了各种视频文件和视频流以及本地摄像头设备的采集,近期有个客户需求要求将整个桌面屏幕采集下来,并可以录制保存成MP4文件,以前也遇到过类似的需求,由于没有搞过,也没有精力去摸索和测试,所以也就一直耽搁着,近期刚好这个需求又来了,定下心来试了试,原来非常简单,模式和采集本地摄像头设备一样,调用av_find_input_format的参数从dshow改成gdigrab即可,然后打开的地址改成desktop,而且采集后保存到MP4文件的整个流程完全一致,根本不用做任何改动,完全可用,可以说ffmpeg封装的非常好,考虑的也非常周到,各种函数接口设计的也非常美妙。

在实现这个功能之前,首先第一步就是用命令行测试,比如 ffplay -f gdigrab desktop -video_size 640×480 -framerate 30 表示开启桌面采集,从左上角00坐标开始分辨率为 640×480 的矩形区域,按照帧率30播放,只有命令行可用的情况下,才表示用ffmpeg代码行得通,如果命令行都不可用,那要仔细思考问题出在哪里,是命令行本身写法有问题还是设备不支持。包括后面有ffmpeg实现推流功能也是这个思路,先上命令行试试行不行,只有可行的情况下才可以大胆的用代码实现,相当于先用命令行探索一番。

不同操作系统对应设备采集格式名称不一样,需要区别处理。

void FFmpegThread