1. msys2 下载安装 MSYS2 , https://www.msys2.org/
2. msys2 环境配置
2.1 打开 msys2 msys :
2 然后输入以下命令安装:
pacman-Syu
pacman -S base-devel
pacman -S yasm nasm gcc
pacman -S mingw-w64-x86_64-toolchain
pacman -S git
pacman -S make
pacman -S automake
pacman -S autoconf
pacman -S perl
pacman -S pkg-config
2.3 修改C:\msys64\msys2_shell.cmd文件,将 rem set MSYS2_PATH_TYPE=inherit 修改成 set MSYS2_PATH_TYPE=inherit
2.4 将C:\msys64\usr\bin\link.exe文件,重命名为link.exe.back
2.5 在C:\msys64目录下增加 msvc_build.bat文件内容为:call "C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\VC\Auxiliary\Build\vcvars64.bat"
msys2_shell.cmd -mingw64
作用是 让msys2工具 使用vs2017 x64编译工具命令(msvc)来运行编译 ffmpeg源码。
2.6 引入sdl2 vc库 ,为了让ffmpeg 编译出ffplay.exe项目
1.下载sdl2 SDL2-devel-2.26.5-VC.zip Release 2.26.5 · libsdl-org/SDL · GitHub
2. C:\msys64\mingw64\include目录下,增加 SDL2文件夹 内容为sdl2头文件
3. C:\msys64\mingw64\lib目录下,增加SDL2文件夹内容为 SDL2-devel-2.26.5-VC.zip x64的lib文件
4. C:\msys64\mingw64\lib\pkgconfig目录下 增加sdl2.pc文件内容为(小心内容后面有空格) :
prefix=/mingw64
exec_prefix=${prefix}
libdir=${exec_prefix}/lib/SDL2
includedir=${prefix}/include/SDL2
Name: SDL2
Description: SDL2 Description
Version: 2.26.5
Libs: -L${libdir} -lSDL2 -lSDL2main
Libs.private:
Cflags: -I${includedir}
3. 运行C:\msys64\msvc_build.bat,通过git 下载ffmpeg源码
git clone https://git.ffmpeg.org/ffmpeg.git ffmpeg
下载完成后 进入到ffmpeg目录 cd ffmpeg, 在编译之前确保cl和link工具是使用vs2017,使用命令如下:which cl , which link
4.编译ffmpeg源码 :
./configure --enable-shared --disable-debug --target-os=win64 --arch=x86_64 --toolchain=msvc
意思是使用msvc(vs2017)编译工具 64位版本库,ffplay一定要有,否则win32-ffplay运行报错
修改config.h文件 将 #define CC_IDENT "用于 x64 的 Microsoft (R) C/C++ 优化编译器 19.16.27047 版" 的中文删除,否则make编译报错。
编译:
make -j24 & make install
5 提取 ffmpeg 编译好的库文件,头文件夹: C:\msys64\usr\local\include
dll和lib 文件夹:C:\msys64\usr\local\bin
将bin和include文件夹复制出来,将bin文件夹重命名为lib文件夹,删除里面ffmpeg.exe,ffplay.exe,ffprobe.exe文件
vs2017 创建win32空白工程,增加 cmdutils.c,ffpaly.c, opt_common.c文件
引用ffmpeg编译好的库文件和sdl2库文件,从ffmpeg源码中将w32dlfcn.h、 wchar_filename.h、 getenv_utf8.h 、fopen_utf8.h 、config_components.h、 config.h 、cmdutils.h 文件放在工程目录下
在ffplay.c文件增加lib库
#pragma comment(lib,"avcodec.lib")
#pragma comment(lib,"avdevice.lib")
#pragma comment(lib,"avfilter.lib")
#pragma comment(lib,"avformat.lib")
#pragma comment(lib,"avutil.lib")
#pragma comment(lib,"swscale.lib")
#pragma comment(lib,"swresample.lib")
#pragma comment(lib,"SDL2.lib")
vs2017使用x64编译 ,报错包含头文件错,修改成如下:
最后将 ffmpeg和sdl2的dll放在exe运行目录下
win32工程 下载 ffplay播放器移移植 win32工程