0 前言----目前还不可信,不要看~~~~~
ffmpeg本身就是在 linux开发的,因此在linux下编译非常简单,而在windows下编译就不是那么容易了。一般在windows下使用MinGW的gcc toolchain进行编译,这样的话,因为ffmpeg的导出函数均是C风格,因而gcc编译的lib可以被vs链接。但是gcc的debug符号与 vs的debug符号(*.pdb)是无法兼容的,因此我们用vs来开发基于ffmpeg的程序时无法深入ffmpeg内部进行debug,这不管对于学 习还是工程使用都不是那么友好。因而,使用同一套编译系统好处多多。本文的编译工具采用的是Visual Studio的编译器MSVC.
本文是在参考ffmpe官方wiki文档中的CompilationGuide以及网友Blog,并结合自己的实践所写就的一篇文章,以做积累。为了尊重前人工作,前言中先列出参考如下:
ffmpeg wiki: 这个Guide文献有必要仔细浏览一遍,尤其是讲述了Unix以及衍生的系统上(Linux, MacOs)上如何进行源码编译的基础流程以及各个流程中做了什么样的工作:configure->make->make install。
Blogs: ffmpeg wiki上的编译方法可能会比较老旧,其实各位前行者的Blog可以作为重要参考,以下几篇文献相对比较靠谱
Windows下使用Visual Studio 2010 编译ffmpeg全过程
1 编译环境
WIindows 7 专业版 Service pack 1
Visual Studio 2013版本
本文编译流程应该可以兼容win7 win10系统,但不兼容vs2013以下版本,若是vs2013以下版本可以参见前言中的wiki文档以及Blog,都有详细的介绍。
2 工具准备
放了方便以后使用,所有工具打包上传CSDN,下载地址为:还没过审核~~~
2.1 ffmpeg源码:
ffmpeg官网下载页 提供了git克隆地址: https://git.ffmpeg.org/ffmpeg.git。目前(2019年3月8日)版本为4.1。请注意,在git clone源码前,务必先执行如下命令“git config --global core.autocrlf false”,这是因为不同平台文本文件的换行符是不一样的,比如windows平台为CRLF,而Linux平台仅为LF,在windows上clone代码时,所有文本文件的换行均会替换为CRLF,而咱们编译ffmpeg是在mingw环境下编译,这是一个windows上模拟linux的最小运行环境,因此其处理换行LF,为了不引发编码上的问题,因此,有上诉操作。具体分析在网上找到了StackOverFlow一篇分析的文章,可详细了解:git replacing LF with CRLF。
本机将源码下载到目录:E:\study\AV\ffmpeg\compile\windows\src\ffmpeg
2.2 MinGW+MSYS环境安装:
官网http://www.mingw.org/下载MinGW的安装工具mingw-get-setup.exe.
运行安装,直接将MinGW安装在C:/MinGW目录下了,也可自由选择其他目录。
安装完成后,运行界面勾选如下项,然后菜单Installation中Apply Changes去下载安装相应的包,完成安装。其中就包含msys环境。
2.3 yasm汇编工具
yasm是汇编编译器,因为ffmpeg中为了提高效率用到了汇编指令,比如MMX和SSE。因此需要安装这个工具。
下载地址为:http://yasm.tortall.net/
下载好此汇编工具后,解压出来为vsyasm.exe,需要改名为yasm.exe,并移动到 C:/MinGW/msys/1.0/bin目录下
2.4 下载pkg-config-0.23-2.zip及glib_2.18.4-1_win32.zip
pkg-config是一个辅助的配置、链接工具,可以方便的支持gcc自动配置。
下载 pkg-config-0.23-2.zip
下载地址:http://ftp.gnome.org/pub/gnome/binaries/win32/dependencies/pkg-config_0.23-3_win32.zip
下载后:解压zip包,将pkg-config.exe拷贝到C:/MinGW/bin/
下载 glib_2.18.4-1_win32.zip
下载地址: http://ftp.gnome.org/pub/gnome/binaries/win32/glib/2.18/glib_2.18.4-1_win32.zip
下载后: 把libglib-2.0-0.dll拷贝到C:/MinGW/bin/。
2.5 下载SDL库
ffmpeg中的ffplay依赖于SDL库,因此,如果需要编译ffplay.exe的话,这个是必要的库。
下载SDL: https://www.libsdl.org/release/SDL2-devel-2.0.8-mingw.tar.gz
解压之后,把目录下lib,bin,include,share下面的内容拷贝到C:\MinGW\msys\1.0的对应目录下,注意是全部。
2.6 下载 nasm
下载nasm,地址:https://www.nasm.us/pub/nasm/releasebuilds/2.13.03/win32/
将nasm.exe拷贝到C:\MinGW\msys\1.0\bin下面。
3 修改必要配置文件
3.1 配置msys.bat
编辑C:/MinGW/msys/1.0/msys.bat文件, 在此文件的最前面(@echo off之后)添加一行如下内容:
Call ”C:\Program Files(x86)\Microsoft Visual Studio 12.0\VC\bin\vcvars32.bat”
(具体的路依VS2013实际安装路径来修改)
3.2 重命名link.exe
重命名 C:/MinGW/msys/1.0/bin/link.exe 为link_renamed.exe (依实际安装选择路径),这一步是防止这个link.exe与VC的link.exe发生冲突,编译完成后可修改回来。
3.3 配置pkg-config
使用notepad++或者其他文本工具打开C:/MinGW/msys/1.0/etc/profile文件,在
if [ $MSYSTEM == MINGW32 ]; then
export PATH=".:/usr/local/bin:/mingw/bin:/bin:$PATH"
else
export PATH=".:/usr/local/bin:/bin:/mingw/bin:$PATH"
fi
后面加上下面的环境变量设置
if [ -z “$PKG_CONFIG” ]; then
export PKG_CONFIG=E:/MinGW/bin/pkg-config.exe
fi
if [ -z “$PKG_CONFIG_PATH” ]; then
export PKG_CONFIG_PATH=MinGW/lib/pkgconfig:/usr/local/lib/pkgconfig
fi
4 源码编译
1. 双击运行 C:\MinGW\msys\1.0\msys.bat 批处理文件
2. 切换目录到源码目录 E:\study\AV\ffmpeg\compile\windows\src\ffmpeg
3. 执行configure
4. 执行make
5. 执行make install