原因:由于需要对比音频编码效果,自带aac和fkd_aac,mp3lame的差别,故需要进行手动编译FFmpeg并包含fdk_aac,mp3lame.
环境介绍:win7,64bit.vs2015.
准备:
1:安装MinGW:http://www.mingw.org/(在线安装),也可以选择本地安装(https://sourceforge.net/projects/mingwbundle/ )
1.1:我选择了在线安装,下载后点击运行,选择了全部安装,右键选择,最后点击Installation按钮下的apply changes.
1.2:配置环境变量:path=C:\MinGW\bin\. 测试cmd gcc -v
2:安装yasm汇编编译器,因为ffmepg中为了提高效率使用到了汇编指令.
2.1:http://yasm.tortall.net/Download.html 选择win64.exe,修改名称为yasm.exe存放到c:/MinGW/msys/1.0/bin目录下.
3:下载pkg-config-0.23-2.zip和依赖库
3.1:http://ftp.gnome.org/pub/gnome/binaries/win32/dependencies/pkg-config_0.23-3_win32.zip
3.2:http://ftp.gnome.org/pub/gnome/binaries/win32/glib/2.18/glib_2.18.4-1_win32.zip
3.3:解压后将pkg-config.exe拷贝到C:/MinGW/bin/
4:下载nasm
4.1:https://www.nasm.us/pub/nasm/releasebuilds/2.13.03/
4.2:运行安装nasm2.13.03.exe,将安装后生成的nasm.exe拷贝到c:\MinGW\msys\1.0\bin\目录下.
5:配置msys.bat文件
5.1:修改C:\MinGW\msys\1.0\msys.bat文件,在@echo off前面添加如下一行
Call “C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\bin\vcvars32.bat”
5.2:C:/MinGW/msys/1.0/bin/link.exe修改为link_rename.exe.防止link.exe与VC的link.exe冲突.
6:配置pkg-config
6.1:将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=C:/MinGW/bin/pkg-config.exe fi
if [ -z “$PKG_CONFIG_PATH” ]; then
export PKG_CONFIG_PATH=MinGW/lib/pkgconfig:/usr/local/lib/pkgconfig fi
总结:通过MingW安装可以看到,虽然是64位系统,但是安装的msys为win32,所以可以知道下面我们生成的静态库和程序都是32位程序,如果希望生成64位程序的话,需要下载mingw-64.以上为工作配置完成,接下来下载源码
编译mp3lame
1:下载地址:http://sourceforge.net/projects/lame/files/ 版本为3.99.5(最新版本需要langinfo.h头文件),且去除 lame/include/libmp3lame.sym中lame_init_old方法.且configure中去除xmmintrin.h头文件的引用.
2:运行C:\MinGW\msys\1.0\msys.bat,cd到源码目录
3:./configure ,make,make install.可以在C:\MinGW\msys\1.0\local看到生成的文件.
编译libfdk-aac
1:下载地址: https://github.com/mstorsjo/fdk-aac.git
2:通过msys.bat进入当前目录
3:./autogen.sh ,./configure,make,make install
4:在此插一句关于libfdk-aac生成vs2015解决方案.只需要在源码目录下创建CMakeLists.txt.通过Cmake进行编译就可以.
FFmpeg源码编译
1:下载地址:https://github.com/FFmpeg/FFmpeg
2:通过msys.bat进入当前目录
3:cofigure --enable-shared --disable-static --enable-nonfree --enable-gpl –enable-version3 --enable-libfdk-aac --enable-libmp3lame --extra-cflags=-I/C:/MinGW/msys/1.0/local/include --extra-ldflags=-L/C:/MinGW/msys/1.0/local/lib
extra-cflags和extra-ldflags为引用第三方插件头文件和.a,如果没有引用则会提示启用的这些模块找不到.
4:make ,make install
安装FFmpeg运行的dll
libiconv-2.dll编译安装
1:下载http://www.gnu.org/software/libiconv/
2:./configure make make install
libgcc_s_dw2-1.dll
1:将MinGW/bin目录下的当前库拷贝到msys/1.0/local/bin下
通过生成的FFmepg.exe,可以看到音频编码有了libfdk_aac和libmp3lame.
总结:在编译时遇到了很多问题,但是流程总体如上.如果需要增加某些模块,则只需要下载源码进行编译,生成头文件和静态库,则通过FFmpeg的configure进行启用模块即可进行关联.而且有些开源模块的编译会遇到一些问题.