Android移植FFmpeg(1)-编译
环境:win7 FFmpeg-n3.2.2 mingw
1.下载mingw,并安装
下载之后,安装,选中这两项后apply changes
进入到mingw的安装目录下,找到\MinGW\msys\1.0目录,由于编译要使用make命令,把bin的路径配置到环境变量中,然后打开msys.bat,一会编译使用
2.下载FFmpeg,我下载的版本是3.2.2,下载之后解压。然后找到configure文件,用ultraedit或者notepad++打开,找到如下代码
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文件命名的需要
3.在FFmpeg目录下新建build_android.sh文件,内容如下
#!/bin/bash
export TMPDIR=F:/ffmpeg/FFmpeg-n3.2.2/tmpdir
NDK=G:/devtool/android-studio-sdk/ndk-bundle
SYSROOT=$NDK/platforms/android-23/arch-arm/
TOOLCHAIN=$NDK/toolchains/arm-linux-androideabi-4.9/prebuilt/windows-x86_64
CPU=arm
PREFIX=F:/ffmpeg/FFmpeg-n3.2.2/install
ADDI_CFLAGS="-marm"
function build_one
{
./configure \
--prefix=$PREFIX \
--enable-shared \
--disable-static \
--disable-doc \
--disable-ffmpeg \
--disable-ffplay \
--disable-ffprobe \
--disable-ffserver \
--disable-doc \
--disable-symver \
--enable-small \
--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" \
$ADDITIONAL_CONFIGURE_FLAG
make clean
make
make install
}
build_one
read -p "Press any key to continue." var
其中,TMPDIR是个临时目录,编译时需要用到,可以随意指定路径;
NDK则替换为本机的ndk路径;
SYSROOT根据本机设置,但不要大于你的target,比如你的target是23,就不要用 大于Android-23的;
PREFIX则是编译后so的存放地址,路径可以随便指定。
4.在刚才打开的mingw中,切换到FFmpeg目录下,执行./build_android.sh
在此过程中会提示一堆pr command not found的提示,不用管,继续执行下去即可
经过了漫长的等待,会在install目录下生成so包和头文件