Window编译和单步调试FFmpeg
in 个人博客
本文的环境是window 10 pro 1809, FFmpeg是2019-08-15提交的版本
需要安装的软件: visual studio 2015,msys2和yasm
安装visual studio
官网下载安装
安装msys2
在这里下载,选择下载msys2-x86_64-20190524.exe,默认安装就好。 为了使用pacman安装编译所需环境,需要修改源和设置下载timeout(否则会下载错误的)。 首先,修改源,在C:\msys64\etc\pacman.d中,打开:
在三个文件中分别添加以下镜像源(清华和中科大二选一): 清华大学
Server = https://mirrors.tuna.tsinghua.edu.cn/msys2/mingw/i686
Server = https://mirrors.tuna.tsinghua.edu.cn/msys2/mingw/x86_64
Server = https://mirrors.tuna.tsinghua.edu.cn/msys2/msys/$arch
中科大
Server = http://mirrors.ustc.edu.cn/msys2/mingw/i686/
Server = http://mirrors.ustc.edu.cn/msys2/mingw/x86_64/
Server = http://mirrors.ustc.edu.cn/msys2/msys/$arch/
然后,设置关闭下载timeout,在C:\msys64\etc中打开pacman.conf文件,在[options]下添加:
[options]
DisableDownloadTimeout
然后安装编译所需环境pacman -S make gcc diffutils pkg-config
重命名C:\msys64\usr\bin\link.exe ,避免和MSVC 的link.exe冲突。
安装yasm
下载yasm,将下载的*.exe文件修改为yasm.exe并放置在C:\msys64\usr\bin目录中。
下载ffmpeg源码
如果git clone出现下载错误,可以使用浅拷贝方法(网上说是git的缓存不够,但是修改了http.postBuffer好像没什么用):
git clone --depth=1 https://git.ffmpeg.org/ffmpeg.git ffmpeg
git fetch --unshallow
使用vs2015编译ffmpeg
首先,修改C:\msys64\msys2_shell.cmd中的:
rem set MSYS2_PATH_TYPE=inherit
为(rem为cmd文件中的注释):
set MSYS2_PATH_TYPE=inherit
然后在开始菜单中,执行 Visual Studio 2015-> VS2015 x64 本机工具命令提示符
,在命令窗口下,执行cd \msys64
,执行msys2_shell.cmd
,执行:
接着修改窗口的编码方式为GBK,以免log显示编码错误 最后,进入ffmpeg的文件目录,执行(过程十分缓慢):
./configure --toolchain=msvc --arch=x86 --enable-yasm --enable-asm --enable-shared --disable-static
make
make install
./configure
命令可以配置要编译的模块,这根据你的项目的需要来配置,有的模块的编译需要遵循某些开源协议。比如libpostproc
就需要添加--enable-postproc --enable-gpl
编译生成的执行文件和DLL文件在目录C:\msys64\usr\local\bin中,头文件在C:\msys64\usr\local\include中。 注意,如果报错了,
应该是CC_IDENT
这个宏有问题,将:
//cmdutils.c
av_log(NULL, level, "%sbuilt with %s\n", indent, CC_IDENT);
//ffprobe.c
print_str("compiler_ident", CC_IDENT);
注释掉就好了
库文件集成到项目(visual studio)
如果单纯是想使用这些库文件的话,只需要将生成的可执行文件和DLL文件,头文件的引入到vs的项目就可以了。如果是想要了解FFmpeg执行的原理,需要对FFmpeg源码进行单步调试,则需要将对应的PDB(Program Database File)文件添加到项目里(拷贝到附加库目录就行), 这个需要个人进行编译生成的,一般会生成在ffmpeg源码文件里面(他人的pdb文件是无法使用的,即使你二进制可执行文件也是使用他人生成的)。
初学者可以看看雷霄烨的项目,很有帮助。