测试编译平台为linux,首先去ffmpeg官网下载linux版本ffmpeg并解压缩,本人编译版本为2.6.9。需要下载linux版本ndk并解压缩,版本为r10e。
修改修改下载目录中的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)'
下面附上我改好的configure文件,直接覆盖原文件即可:点击下载
编写shell脚本直接生成类库
#!/bin/bash
make clean
export NDK=/usr/ndk/android-ndk-r10e
export SYSROOT=$NDK/platforms/android-9/arch-arm/
export TOOLCHAIN=$NDK/toolchains/arm-linux-androideabi-4.8/prebuilt/linux-x86_64
export CPU=arm
export PREFIX=$(pwd)/android/$CPU
export ADDI_CFLAGS="-marm"
./configure --target-os=linux \
--prefix=$PREFIX --arch=arm \
--disable-doc \
--enable-shared \
--disable-static \
--disable-yasm \
--disable-symver \
--enable-gpl \
--disable-ffmpeg \
--disable-ffplay \
--disable-ffprobe \
--disable-ffserver \
--disable-doc \
--disable-symver \
--cross-prefix=$TOOLCHAIN/bin/arm-linux-androideabi- \
--enable-cross-compile \
--sysroot=$SYSROOT \
--extra-cflags="-Os -fpic $ADDI_CFLAGS" \
--extra-ldflags="$ADDI_LDFLAGS" \
$ADDITIONAL_CONFIGURE_FLAG
make clean
make
make install
下面附上我写好的shell脚本文件点击下载
注意:shell脚本的名字为sh
编译生成
把shell脚本放入ffmpeg目录里面,也就是和configure文件在同一个目录,直接运行脚本就会生成我们需要的库文件,运行命令 ./脚本名称。
注意:我们的ffmpeg的文件可能没有权限运行,使用 chmod 777 -R ffmpeg使ffmpeg文件加下的所有文件获得最高权限
编译成功后会出现一个android文件夹,包含的是arm平台的动态库,我们只需要取出ffmpeg八大模块对应大版本库就行了
你会发现android目录下还有一个include文件夹,那是我们生成的头文件。
易错点
有时候我们传入shell脚本并不能运行,可能我们的文件格式不对,需要使用dos2unix把格式转换(linux下)。
shell脚本的NDK变量代表我们下载NDK并解压后的目录