一、环境搭建
可以看我的另一篇文章 《Qt + FFmpeg 视频播放器》 , 在这里就不再重复了。
PS:一定要确认好FFmpeg库的版本,我在使用的时候因为函数接口对不上,头发掉了不少…所以,一定要慎重啊!!!
二、实战演练
1 . 功能介绍
源码链接 : https://github.com/AutoCatFuuuu/QT/tree/master/gdigrab
- 可以录制屏幕 录制系统摄像头 并显示出来
- 保存录制文件
实际效果图
这里展示的是录制桌面后保存下来的小视频【很小很小】
2 . 编码流程图
关键代码 【都是关键 这里对封装的类进行简单说明 程序内也有详细注释】
aencode.h
【AEncode】对编码进行封装
功能说明:
- 本demo工程里是实现录取屏幕 视频数据是从gdigrab里抓过来的
- 想实现 本地文件视频转码 可以先把视频解码出来再传到encodecOneFrame()
注意:
- 成员函数声明顺序就是编码流程的顺序,请一定要按顺序执行,否则程序会崩溃
- 本程序目前只支持 单视频流编码
- 编码格式会根据输出文件名猜测判断
- 对于编码器的参数设置接口并没有写很多 主要是因为对编码器的参数没啥研究…
- setPixFormat() 别乱设置 编码器不支持的话,会没法编码的
默认是 AV_PIX_FMT_YUV420P- setSize() 默认是 w:1920 h:1080
- setFPS() 默认 25
#ifndef AENCODE_H
#define AENCODE_H
#ifdef __cplusplus
extern "C"{
#include <libavcodec/avcodec.h>
#include <libavformat/avformat.h>
#include <libswscale/swscale.h>
#include <libavutil/imgutils.h>
}
#endif
class AEncode
{
public:
AEncode(); //初始化私有成员
~AEncode()<