Win7下编译ffmpeg
下载ffmpeg源码并解压
地址http://www.ffmpeg.org/download.html
安装MinGW
下载MinGW安装器,下载地址http://www.mingw.org/
;下载完成后安装,安装完成后点运行,标记上以下几项:
然后在Installation菜单下点击Apply Changes
下载android NDK
假如使用android studio,可在Settings中点击Appearance & Behavior -> System Settings -> Android SDK
,在右侧面板点击SDK Tools
勾选,点击Apply即可
修改ffmpeg/configure文件
将该文件中的如下四行:
SLIBNAME_WITH_MAJOR='$(SLIBNAME).$(LIBMAJOR)'
LIB_INSTALL_EXTRA_CMD='$$(RANLIB)"$(LIBDIR)/$(LIBNAME)"'
SLIB_INSTALL_NAME='$(SLIBNAME_WITH_VERSION)'
SLIB_INSTALL_LINKS='$(SLIBNAME_WITH_MAJOR)$(SLIBNAME)'
替换为
SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
LIB_INSTALL_EXTRA_CMD='$$(RANLIB)"$(LIBDIR)/$(LIBNAME)"'
SLIB_INSTALL_NAME='$(SLIBNAME_WITH_MAJOR)'
SLIB_INSTALL_LINKS='$(SLIBNAME)'
假如不修改会导致编译的so文件的版本号在so后面,导致android无法识别加载
编写build_android.sh脚本文件
在ffmpeg根目录编写一个文件名为build_android.sh的脚本文件
ARM
内容如下:
NDK=D:/Users/Administrator/AppData/Local/Android/sdk/ndk-bundle
SYSROOT=$NDK/platforms/android-19/arch-arm/
TOOLCHAIN=$NDK/toolchains/arm-linux-androideabi-4.9/prebuilt/windows-x86_64
CPU=arm
PREFIX=$(pwd)/android/$CPU
ADDI_CFLAGS="-marm"
function build_one
{
./configure \
--prefix=$PREFIX \
--enable-shared \
--disable-static \
--disable-doc \
--disable-ffmpeg \
--disable-ffplay \
--disable-ffprobe \
--disable-ffserver \
--disable-asm \
--enable-gpl \
--disable-doc \
--disable-symver \
--cross-prefix=$TOOLCHAIN/bin/arm-linux-androideabi- \
--target-os=linux \
--arch=arm \
--enable-cross-compile \
--sysroot=$SYSROOT \
--extra-cflags="-Os -fpic $ADDI_CFLAGS" \
--extra-ldflags="$ADDI_LDFLAGS"
make clean
make
make install
}
build_one
其中要修改NDK,SYSROOT和TOOLCHAIN为自己的目录,注意android-19
和arm-linux-androideabi-4.9
版本,要修改为自己NDK中的版本
x86
内容如下:
NDK=D:/Users/Administrator/AppData/Local/Android/sdk/ndk-bundle
SYSROOT=$NDK/platforms/android-19/arch-x86/
TOOLCHAIN=$NDK/toolchains/x86-4.9/prebuilt/windows-x86_64
CPU=x86
PREFIX=$(pwd)/android/$CPU
function build_one
{
./configure \
--prefix=$PREFIX \
--enable-shared \
--disable-static \
--disable-doc \
--disable-ffmpeg \
--disable-ffplay \
--disable-ffprobe \
--disable-ffserver \
--disable-asm \
--enable-gpl \
--disable-doc \
--disable-symver \
--cross-prefix=$TOOLCHAIN/bin/i686-linux-android- \
--target-os=linux \
--arch=x86 \
--enable-cross-compile \
--sysroot=$SYSROOT \
--extra-cflags="-Os -fpic $ADDI_CFLAGS" \
--extra-ldflags="$ADDI_LDFLAGS"
make clean
make
make install
}
build_one
arm与x86两个脚本不能在同一个ffmpeg目录编译,否则会报错
编译
点击MinGW/msys/1.0/目录下的msys.bat
输入跳转到ffmpeg源码目录下的命令,如:(cd D:/ffmpeg)
输入
chmod +x build_android.sh
给build_android.sh增加执行权限输入
build_android.sh
编译等待很长时间后,编译会完成
假如报./configure: line <xxx>: pr: command not found
的解决方案
下载coreutils-5.97-MSYS-1.0.11-snapshot.tar.bz2之后把bin目录下的内容全部拷贝到了MinGW下的bin目录下面,重新开始上面的步骤即可
完成
编译完的so会在ffmpeg下的android目录下
参考资料
win7下编译android版ffmpeg
FFmpeg的Android平台移植—编译篇
MSys中使用configure出现无法找到pr错误解决方案