最终,还是逃不过要使用这个,一直看到却一直没正式了解它的库:ffmpeg。
这个库简单的说就是用来对视频进行各种处理的:读取、格式转换、播放等等。
目前我是在windows下,在Qt里面使用它的。
我下载的是 ffmpeg-n4.4-latest-win64-lgpl-shared-4.4。你可以根据自己的需求下载。
然后在Qt里面引入库以及头文件
INCLUDEPATH += D:/Qt/ffmpeg/ffmpeg-n4.4-latest-win64-lgpl-shared-4.4/include
LIBS += -LD:/Qt/ffmpeg/ffmpeg-n4.4-latest-win64-lgpl-shared-4.4/lib\
-lavcodec -lavdevice -lavfilter -lavformat -lavutil -lswresample -lswscale
接着就可以在Qt中愉快地使用了。
需要注意的是,在include ffmpeg的头文件时,需要增加extern “C”,
extern "C"{
#include <libavcodec/avcodec.h>
#include <libavformat/avformat.h>
}
否则会出现类似下面的问题:
mainwindow.obj:-1: error: LNK2019: 无法解析的外部符号 "int __cdecl avformat_alloc_output_context2(struct AVFormatContext * *,struct AVOutputFormat *,char const *,char const *)" (?avformat_alloc_output_context2@@YAHPEAPEAUAVFormatContext@@PEAUAVOutputFormat@@PEBD2@Z),该符号在函数 "public: __cdecl MainWindow::MainWindow(class QWidget *)" (??0MainWindow@@QEAA@PEAVQWidget@@@Z) 中被引用
此外,ffmpeg4.x版本一些函数的用法和之前不太一样,所以查到网上的代码时,需要根据手册自行修正。
ffmpeg4.x为什么不再需要调用av_register_all呢