环境配置
FFmpeg 工程用了大量的 linux 系统的函数,所以 在Window10 需要用 MSYS2 来编译。简单来说,MSYS2 就是一个软件套件,他可以把linux的软件转成 window的软件,编译打包成 exe文件在 window 运行。
MSVC 的编译器跟 MinGW 编译器的区别:如果你Qt项目里的 C 文件,里面用了linux 的api,那只能用MinGW来编译,用MSVC编译会报错。如果没用到 linux的api函数,用MSVC 还是 MinGW 都能编译成功。
1 选择编译器和debugger
ffplay源码中调用linuxAPI,因此本项目kits选择MinGW32bit,调试器选择gdb,具体如下:
eg:本项目中所使用的ffmpeg库和SDL库均为32bit,具体配置需要结合自己所编译的库类型
2 导入库
导入ffplay源码和编译好的ffmpg、SDL库
将两个库目录下的ddl动态库复制到QT文件的执行目录下
3 配置pro文件
TEMPLATE = app
CONFIG += console
CONFIG -= app_bundle
CONFIG -= qt
SOURCES += \
cmdutils.c \
ffplay.c
win32 {
INCLUDEPATH += $$PWD/ffmpeg-4.2.1-win32-dev/include
INCLUDEPATH += $$PWD/SDL2/include
LIBS += $$PWD/ffmpeg-4.2.1-win32-dev/lib/avformat.lib \
$$PWD/ffmpeg-4.2.1-win32-dev/lib/avcodec.lib \
$$PWD/ffmpeg-4.2.1-win32-dev/lib/avdevice.lib \
$$PWD/ffmpeg-4.2.1-win32-dev/lib/avfilter.lib \
$$PWD/ffmpeg-4.2.1-win32-dev/lib/avutil.lib \
$$PWD/ffmpeg-4.2.1-win32-dev/lib/postproc.lib \
$$PWD/ffmpeg-4.2.1-win32-dev/lib/swresample.lib \
$$PWD/ffmpeg-4.2.1-win32-dev/lib/swscale.lib \
$$PWD/SDL2/lib/x86/SDL2.lib
}
HEADERS += \
cmdutils.h \
config.h
4 检查环境
分别检查 ffmpeg 和 SDL库是否配置成功
#if 0 // ffmpeg
#include <stdio.h>
int main()
{
printf("Hello World!\n");
return 0;
}
#endif
#if 0 // SDL
#include <stdio.h>
#include "libavutil/avutil.h"
int main()
{
printf("Hello FFMPEG, version is %s\n", av_version_info());
return 0;
}
#endif
#if 1
#include <stdio.h>
#include <SDL.h>
#undef main
int main()
{
printf("Hello World!\n");
SDL_Window *window = NULL;
SDL_Init(SDL_INIT_VIDEO);
window = SDL_CreateWindow("Basic Window",
SDL_WINDOWPOS_UNDEFINED, // 默认生成窗口位置:中心
SDL_WINDOWPOS_UNDEFINED,
640, // 窗口大小
480,
SDL_WINDOW_OPENGL | SDL_WINDOW_RESIZABLE);
if(!window){
printf("can't create window:%s\n", SDL_GetError());
return 1;
}
SDL_Delay(10000); // 延迟10s
// 释放资源
SDL_DestroyWindow(window);
SDL_Quit();
return 0;
}
#endif
5 加载源码文件
将ffplay.c及其依赖文件导入项目,媒体文件放入执行目录下
输入参数,执行