5.2 Qt Creator 使用FFmpeg库
一、目录结构
├─3rdparty # 第三方依赖库
│ └─ffmpeg-4.4.3 # ffmpeg库
│ ├─mingw # 用MinGW64编译的库
│ │ ├─bin
│ │ ├─include
│ │ └─lib
│ └─msvc # 用MSVC编译的库
│ ├─bin
│ ├─include
│ └─lib
├─demo3.pro # 项目配置文件
└─main.c # 源码目录
二、xx.pro文件
QT -= gui
CONFIG += c++11 # console
CONFIG -= app_bundleDEFINES += QT_DEPRECATED_WARNINGS
SOURCES += main.cwin32 {# 使用 QT_ARCH 检测架构contains(QT_ARCH, x86_64) {message("Configuring for 64-bit")# 公共配置:定义安装目标路径(根据构建模式自动区分)CONFIG(release, debug|release) {ffmpeg_dlls.path = $$OUT_PWD/release # Release模式目标路径} else {ffmpeg_dlls.path = $$OUT_PWD/debug # Debug模式目标路径}INSTALLS += ffmpeg_dlls # 注册安装目标# 编译器类型检测win32-msvc* {message("Using MSVC toolchain")INCLUDEPATH += $$PWD\3rdparty\ffmpeg-4.4.3\msvc\includeLIBS += $$PWD\3rdparty\ffmpeg-4.4.3\msvc\lib\avdevice.lib \$$PWD\3rdparty\ffmpeg-4.4.3\msvc\lib\avfilter.lib \$$PWD\3rdparty\ffmpeg-4.4.3\msvc\lib\avformat.lib \$$PWD\3rdparty\ffmpeg-4.4.3\msvc\lib\avcodec.lib \$$PWD\3rdparty\ffmpeg-4.4.3\msvc\lib\swscale.lib \$$PWD\3rdparty\ffmpeg-4.4.3\msvc\lib\swresample.lib \$$PWD\3rdparty\ffmpeg-4.4.3\msvc\lib\avutil.lib# 指定需要安装的DLL文件ffmpeg_dlls.files = $${FFMPEG_MSVC_DIR}\bin\*.dll}win32-g++ {message("Using MinGW toolchain")INCLUDEPATH += $$PWD\3rdparty\ffmpeg-4.4.3\mingw\includeLIBS += $$PWD\3rdparty\ffmpeg-4.4.3\mingw\lib\libavdevice.dll.a \$$PWD\3rdparty\ffmpeg-4.4.3\mingw\lib\libavfilter.dll.a \$$PWD\3rdparty\ffmpeg-4.4.3\mingw\lib\libavformat.dll.a \$$PWD\3rdparty\ffmpeg-4.4.3\mingw\lib\libavcodec.dll.a \$$PWD\3rdparty\ffmpeg-4.4.3\mingw\lib\libswscale.dll.a \$$PWD\3rdparty\ffmpeg-4.4.3\mingw\lib\libswresample.dll.a \$$PWD\3rdparty\ffmpeg-4.4.3\mingw\lib\libpostproc.dll.a \$$PWD\3rdparty\ffmpeg-4.4.3\mingw\lib\libavutil.dll.a# 指定需要安装的DLL文件ffmpeg_dlls.files =$$PWD\3rdparty\ffmpeg-4.4.3\mingw\bin\*.dll}}else {message("32-bit builds not configured")}
}
说明:
- 指定安装位置和目标,当执行make install 时拷贝dll文件到输出目录。
- 注意区分动态库导入库和静态库文件,可以通过库文件大小来判断。
三、main.c测试文件
#include <stdio.h>
#include "libavcodec/avcodec.h"
#include "libavdevice/avdevice.h"
#include "libavfilter/avfilter.h"
#include "libavformat/avformat.h"
int main()
{printf("avcodec version is %u \n",avcodec_version());printf("avdevice version is %u \n",avdevice_version());printf("avfilter version is %u \n",avfilter_version());printf("avformat version is %u \n",avformat_version());return 0;
}
四、编译后自动拷贝dll文件
如何触发make install ?在项目设置哪里添加一个make install。