实际上这就是一个Qt增加第三方库的例子。实际上添加第三方库,就是配置include 和lib 到qt的 pro文件中。
需要下载ffmpeg的dev 和share包。其中include 和lib在dev包中。dll在share包中。
一、方法一:
1.使用Qt的图形化界面,添加库。
2.在弹出的添加库对话框中选择外部库,点下一步。
3.在这一步选择外部库文件(这种图形操作每次只能添加一个lib文件)
4.最终预览通过图形化界面即将增加的pro配置语句。
win32: LIBS += -L$$PWD/../../ffmpeg/ffmpeg-4.2.3-win64-dev/lib/ -lavcodecINCLUDEPATH += $$PWD/../../ffmpeg/ffmpeg-4.2.3-win64-dev/includeDEPENDPATH += $$PWD/../../ffmpeg/ffmpeg-4.2.3-win64-dev/include
很不推荐这种方法,ffmpeg 的lib 库是多个文件,include都在一个目录下。首先他不支持多个库文件添加,第二include文件夹虽然是相同,但是程序依旧会死死的重复添加。所以如果通过图形化添加最终的结果会是这样。虽然系统能够正常识别并编译。但是看着就不爽。
win32: LIBS += -L$$PWD/'../../ffmpeg 4.3.1/ffmpeg-4.3.1-win64-dev/lib/' -lavcodec
INCLUDEPATH += $$PWD/'../../ffmpeg 4.3.1/ffmpeg-4.3.1-win64-dev/include'DEPENDPATH += $$PWD/'../../ffmpeg 4.3.1/ffmpeg-4.3.1-win64-dev/include'win32: LIBS += -L$$PWD/'../../ffmpeg 4.3.1/ffmpeg-4.3.1-win64-dev/lib/' -lavdeviceINCLUDEPATH += $$PWD/'../../ffmpeg 4.3.1/ffmpeg-4.3.1-win64-dev/include'DEPENDPATH += $$PWD/'../../ffmpeg 4.3.1/ffmpeg-4.3.1-win64-dev/include'win32: LIBS += -L$$PWD/'../../ffmpeg 4.3.1/ffmpeg-4.3.1-win64-dev/lib/' -lavfilterINCLUDEPATH += $$PWD/'../../ffmpeg 4.3.1/ffmpeg-4.3.1-win64-dev/include'DEPENDPATH += $$PWD/'../../ffmpeg 4.3.1/ffmpeg-4.3.1-win64-dev/include'win32: LIBS += -L$$PWD/'../../ffmpeg 4.3.1/ffmpeg-4.3.1-win64-dev/lib/' -lavformatINCLUDEPATH += $$PWD/'../../ffmpeg 4.3.1/ffmpeg-4.3.1-win64-dev/include'DEPENDPATH += $$PWD/'../../ffmpeg 4.3.1/ffmpeg-4.3.1-win64-dev/include'win32: LIBS += -L$$PWD/'../../ffmpeg 4.3.1/ffmpeg-4.3.1-win64-dev/lib/' -lavutilINCLUDEPATH += $$PWD/'../../ffmpeg 4.3.1/ffmpeg-4.3.1-win64-dev/include'DEPENDPATH += $$PWD/'../../ffmpeg 4.3.1/ffmpeg-4.3.1-win64-dev/include'win32: LIBS += -L$$PWD/'../../ffmpeg 4.3.1/ffmpeg-4.3.1-win64-dev/lib/' -lpostprocINCLUDEPATH += $$PWD/'../../ffmpeg 4.3.1/ffmpeg-4.3.1-win64-dev/include'DEPENDPATH += $$PWD/'../../ffmpeg 4.3.1/ffmpeg-4.3.1-win64-dev/include'win32: LIBS += -L$$PWD/'../../ffmpeg 4.3.1/ffmpeg-4.3.1-win64-dev/lib/' -lswresampleINCLUDEPATH += $$PWD/'../../ffmpeg 4.3.1/ffmpeg-4.3.1-win64-dev/include'DEPENDPATH += $$PWD/'../../ffmpeg 4.3.1/ffmpeg-4.3.1-win64-dev/include'win32: LIBS += -L$$PWD/'../../ffmpeg 4.3.1/ffmpeg-4.3.1-win64-dev/lib/' -lswscaleINCLUDEPATH += $$PWD/'../../ffmpeg 4.3.1/ffmpeg-4.3.1-win64-dev/include'DEPENDPATH += $$PWD/'../../ffmpeg 4.3.1/ffmpeg-4.3.1-win64-dev/include'
二、方法二:
自己直接修改pro文件
INCLUDEPATH += $$PWD/ffmpeg-4.2.3-win64-dev/include
LIBS += -L$$PWD/"ffmpeg-4.2.3-win64-dev/lib" -lavcodec-L$$PWD/"ffmpeg-4.2.3-win64-dev/lib" -lavdevice-L$$PWD/"ffmpeg-4.2.3-win64-dev/lib" -lavfilter-L$$PWD/"ffmpeg-4.2.3-win64-dev/lib" -lavformat-L$$PWD/"ffmpeg-4.2.3-win64-dev/lib" -lavutil-L$$PWD/"ffmpeg-4.2.3-win64-dev/lib" -lpostproc-L$$PWD/"ffmpeg-4.2.3-win64-dev/lib" -lswresample-L$$PWD/"ffmpeg-4.2.3-win64-dev/lib" -lswscale
这种办法效率很高。说一下语法
$$PWD:是项目根目录
-L 是寻找目录,注意跟后面的路径buneng 有空格。
-l 是寻找库 ,同样不能有空格
对于多个库 用“” 符合结尾。
另外相对于QT 图形化工具,我这里少了 DEPENDPATH(应用程序所依赖的搜索路径)。实际操作发现不配置这个变量,程序也可以正常编译执行。
三、其他:
1.最后需要把share包里的dll放到编译后exe相同的目录下。一般是qt 的debug目录。
2.我们是可以把ffmpeg的dev包甚至源文件文件直接放到项目里的。方法是右击项目——add Existing Directiry。
它实际上也是在pro文件里面增加配置代码,但是添加了DISTFILES 和include 环境变量依旧还需要配置libs环境变量。
DISTFILES +=
ffmpeg-4.2.3-win64-dev/lib/avcodec-58.defffmpeg-4.2.3-win64-dev/lib/avcodec.libffmpeg-4.2.3-win64-dev/lib/avdevice-58.defffmpeg-4.2.3-win64-dev/lib/avdevice.libffmpeg-4.2.3-win64-dev/lib/avfilter-7.defffmpeg-4.2.3-win64-dev/lib/avfilter.libffmpeg-4.2.3-win64-dev/lib/avformat-58.defffmpeg-4.2.3-win64-dev/lib/avformat.libffmpeg-4.2.3-win64-dev/lib/avutil-56.defffmpeg-4.2.3-win64-dev/lib/avutil.libffmpeg-4.2.3-win64-dev/lib/libavcodec.dll.affmpeg-4.2.3-win64-dev/lib/libavdevice.dll.affmpeg-4.2.3-win64-dev/lib/libavfilter.dll.affmpeg-4.2.3-win64-dev/lib/libavformat.dll.affmpeg-4.2.3-win64-dev/lib/libavutil.dll.affmpeg-4.2.3-win64-dev/lib/libpostproc.dll.affmpeg-4.2.3-win64-dev/lib/libswresample.dll.affmpeg-4.2.3-win64-dev/lib/libswscale.dll.affmpeg-4.2.3-win64-dev/lib/postproc-55.defffmpeg-4.2.3-win64-dev/lib/postproc.libffmpeg-4.2.3-win64-dev/lib/swresample-3.defffmpeg-4.2.3-win64-dev/lib/swresample.libffmpeg-4.2.3-win64-dev/lib/swscale-5.defffmpeg-4.2.3-win64-dev/lib/swscale.libHEADERS +=ffmpeg-4.2.3-win64-dev/include/libavcodec/ac3_parser.hffmpeg-4.2.3-win64-dev/include/libavcodec/adts_parser.hffmpeg-4.2.3-win64-dev/include/libavcodec/avcodec.hffmpeg-4.2.3-win64-dev/include/libavcodec/avdct.hffmpeg-4.2.3-win64-dev/include/libavcodec/avfft.hffmpeg-4.2.3-win64-dev/include/libavcodec/d3d11va.hffmpeg-4.2.3-win64-dev/include/libavcodec/dirac.hffmpeg-4.2.3-win64-dev/include/libavcodec/dv_profile.hffmpeg-4.2.3-win64-dev/include/libavcodec/dxva2.hffmpeg-4.2.3-win64-dev/include/libavcodec/jni.hffmpeg-4.2.3-win64-dev/include/libavcodec/mediacodec.hffmpeg-4.2.3-win64-dev/include/libavcodec/qsv.hffmpeg-4.2.3-win64-dev/include/libavcodec/vaapi.hffmpeg-4.2.3-win64-dev/include/libavcodec/vdpau.hffmpeg-4.2.3-win64-dev/include/libavcodec/version.hffmpeg-4.2.3-win64-dev/include/libavcodec/videotoolbox.hffmpeg-4.2.3-win64-dev/include/libavcodec/vorbis_parser.hffmpeg-4.2.3-win64-dev/include/libavcodec/xvmc.hffmpeg-4.2.3-win64-dev/include/libavdevice/avdevice.hffmpeg-4.2.3-win64-dev/include/libavdevice/version.hffmpeg-4.2.3-win64-dev/include/libavfilter/avfilter.hffmpeg-4.2.3-win64-dev/include/libavfilter/buffersink.hffmpeg-4.2.3-win64-dev/include/libavfilter/buffersrc.hffmpeg-4.2.3-win64-dev/include/libavfilter/version.hffmpeg-4.2.3-win64-dev/include/libavformat/avformat.hffmpeg-4.2.3-win64-dev/include/libavformat/avio.hffmpeg-4.2.3-win64-dev/include/libavformat/version.hffmpeg-4.2.3-win64-dev/include/libavutil/adler32.hffmpeg-4.2.3-win64-dev/include/libavutil/aes.hffmpeg-4.2.3-win64-dev/include/libavutil/aes_ctr.hffmpeg-4.2.3-win64-dev/include/libavutil/attributes.hffmpeg-4.2.3-win64-dev/include/libavutil/audio_fifo.hffmpeg-4.2.3-win64-dev/include/libavutil/avassert.hffmpeg-4.2.3-win64-dev/include/libavutil/avconfig.hffmpeg-4.2.3-win64-dev/include/libavutil/avstring.hffmpeg-4.2.3-win64-dev/include/libavutil/avutil.hffmpeg-4.2.3-win64-dev/include/libavutil/base64.hffmpeg-4.2.3-win64-dev/include/libavutil/blowfish.hffmpeg-4.2.3-win64-dev/include/libavutil/bprint.hffmpeg-4.2.3-win64-dev/include/libavutil/bswap.hffmpeg-4.2.3-win64-dev/include/libavutil/buffer.hffmpeg-4.2.3-win64-dev/include/libavutil/camellia.hffmpeg-4.2.3-win64-dev/include/libavutil/cast5.hffmpeg-4.2.3-win64-dev/include/libavutil/channel_layout.hffmpeg-4.2.3-win64-dev/include/libavutil/common.hffmpeg-4.2.3-win64-dev/include/libavutil/cpu.hffmpeg-4.2.3-win64-dev/include/libavutil/crc.hffmpeg-4.2.3-win64-dev/include/libavutil/des.hffmpeg-4.2.3-win64-dev/include/libavutil/dict.hffmpeg-4.2.3-win64-dev/include/libavutil/display.hffmpeg-4.2.3-win64-dev/include/libavutil/downmix_info.hffmpeg-4.2.3-win64-dev/include/libavutil/encryption_info.hffmpeg-4.2.3-win64-dev/include/libavutil/error.hffmpeg-4.2.3-win64-dev/include/libavutil/eval.hffmpeg-4.2.3-win64-dev/include/libavutil/ffversion.hffmpeg-4.2.3-win64-dev/include/libavutil/fifo.hffmpeg-4.2.3-win64-dev/include/libavutil/file.hffmpeg-4.2.3-win64-dev/include/libavutil/frame.hffmpeg-4.2.3-win64-dev/include/libavutil/hash.hffmpeg-4.2.3-win64-dev/include/libavutil/hdr_dynamic_metadata.hffmpeg-4.2.3-win64-dev/include/libavutil/hmac.hffmpeg-4.2.3-win64-dev/include/libavutil/hwcontext.hffmpeg-4.2.3-win64-dev/include/libavutil/hwcontext_cuda.hffmpeg-4.2.3-win64-dev/include/libavutil/hwcontext_d3d11va.hffmpeg-4.2.3-win64-dev/include/libavutil/hwcontext_drm.hffmpeg-4.2.3-win64-dev/include/libavutil/hwcontext_dxva2.hffmpeg-4.2.3-win64-dev/include/libavutil/hwcontext_mediacodec.hffmpeg-4.2.3-win64-dev/include/libavutil/hwcontext_qsv.hffmpeg-4.2.3-win64-dev/include/libavutil/hwcontext_vaapi.hffmpeg-4.2.3-win64-dev/include/libavutil/hwcontext_vdpau.hffmpeg-4.2.3-win64-dev/include/libavutil/hwcontext_videotoolbox.hffmpeg-4.2.3-win64-dev/include/libavutil/imgutils.hffmpeg-4.2.3-win64-dev/include/libavutil/intfloat.hffmpeg-4.2.3-win64-dev/include/libavutil/intreadwrite.hffmpeg-4.2.3-win64-dev/include/libavutil/lfg.hffmpeg-4.2.3-win64-dev/include/libavutil/log.hffmpeg-4.2.3-win64-dev/include/libavutil/lzo.hffmpeg-4.2.3-win64-dev/include/libavutil/macros.hffmpeg-4.2.3-win64-dev/include/libavutil/mastering_display_metadata.hffmpeg-4.2.3-win64-dev/include/libavutil/mathematics.hffmpeg-4.2.3-win64-dev/include/libavutil/md5.hffmpeg-4.2.3-win64-dev/include/libavutil/mem.hffmpeg-4.2.3-win64-dev/include/libavutil/motion_vector.hffmpeg-4.2.3-win64-dev/include/libavutil/murmur3.hffmpeg-4.2.3-win64-dev/include/libavutil/opt.hffmpeg-4.2.3-win64-dev/include/libavutil/parseutils.hffmpeg-4.2.3-win64-dev/include/libavutil/pixdesc.hffmpeg-4.2.3-win64-dev/include/libavutil/pixelutils.hffmpeg-4.2.3-win64-dev/include/libavutil/pixfmt.hffmpeg-4.2.3-win64-dev/include/libavutil/random_seed.hffmpeg-4.2.3-win64-dev/include/libavutil/rational.hffmpeg-4.2.3-win64-dev/include/libavutil/rc4.hffmpeg-4.2.3-win64-dev/include/libavutil/replaygain.hffmpeg-4.2.3-win64-dev/include/libavutil/ripemd.hffmpeg-4.2.3-win64-dev/include/libavutil/samplefmt.hffmpeg-4.2.3-win64-dev/include/libavutil/sha.hffmpeg-4.2.3-win64-dev/include/libavutil/sha512.hffmpeg-4.2.3-win64-dev/include/libavutil/spherical.hffmpeg-4.2.3-win64-dev/include/libavutil/stereo3d.hffmpeg-4.2.3-win64-dev/include/libavutil/tea.hffmpeg-4.2.3-win64-dev/include/libavutil/threadmessage.hffmpeg-4.2.3-win64-dev/include/libavutil/time.hffmpeg-4.2.3-win64-dev/include/libavutil/timecode.hffmpeg-4.2.3-win64-dev/include/libavutil/timestamp.hffmpeg-4.2.3-win64-dev/include/libavutil/tree.hffmpeg-4.2.3-win64-dev/include/libavutil/twofish.hffmpeg-4.2.3-win64-dev/include/libavutil/tx.hffmpeg-4.2.3-win64-dev/include/libavutil/version.hffmpeg-4.2.3-win64-dev/include/libavutil/xtea.hffmpeg-4.2.3-win64-dev/include/libpostproc/postprocess.hffmpeg-4.2.3-win64-dev/include/libpostproc/version.hffmpeg-4.2.3-win64-dev/include/libswresample/swresample.hffmpeg-4.2.3-win64-dev/include/libswresample/version.hffmpeg-4.2.3-win64-dev/include/libswscale/swscale.hffmpeg-4.2.3-win64-dev/include/libswscale/version.h
四、调试
创建一个测试文件
#include <iostream>
#include <stdio.h>using namespace std;extern "C" {#include "libavcodec/avcodec.h"#include "libavformat/avformat.h"#include "libswscale/swscale.h"#include "libavdevice/avdevice.h"}int main(){printf("Hello World! ");cout << "Test FFmpeg!" << endl;// av_register_all();unsigned version = avcodec_version();cout << "version :" << version;return 0;}
执行后。