最近几天想要编译ffmpeg,就是下载了最新的版本的ffmpeg4.2,结果就是无论怎么配置都是各种错误,状况百出,后来去下载了ffmpeg3.4.7,一下子就编译成功,下面在这里记录一下:
准备环境:下载ndk-16,下载ffmpeg
使用brew安装如下的文件:
brew install automake brew install celt brew install faac
brew install fdk-aac brew install lame brew install libass
brew install libtool brew install libvorbis brew install libvpx
brew install aacenc brew install opencore-amr brew install openjpeg
brew install opus brew install sdl brew install schroedinger
brew install shtool brew install speex brew install texi2html
brew install theora brew install wget brew install x264
brew install xvid brew install yasm
最重要的是安装libaacplus,这个要使用wget命令安装
wget http://tipok.org.ua/downloads/media/aacplus/libaacplus/libaacplus-2.0.2.tar.gz
tar -xzf libaacplus-2.0.2.tar.gz
cd libaacplus-2.0.2
./autogen.sh --enable-shared --enable-static
make
sudo make install
sudo ldconfig
接下来就是在ffmpeg里面修改confiure文件里面的这四行:
把
SLIBNAME_WITH_VERSION='$(SLIBNAME).$(LIBVERSION)'
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_VERSION='$(SLIBNAME).$(LIBVERSION)'
SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
LIB_INSTALL_EXTRA_CMD='$$(RANLIB)"$(LIBDIR)/$(LIBNAME)"'
SLIB_INSTALL_NAME='$(SLIBNAME_WITH_MAJOR)'
SLIB_INSTALL_LINKS='$(SLIBNAME)'
编写shell文件
然后编写build_android.sh文件,代码如下:
#!/bin/bash
ADDI_CFLAGS="-marm"
API=27
PLATFORM=arm-linux-androideabi
CPU=armv7-a
NDK=/Users/xx/android-ndk-r16b
SYSROOT=$NDK/platforms/android-$API/arch-arm/
ISYSROOT=$NDK/sysroot
ASM=$ISYSROOT/usr/include/$PLATFORM
TOOLCHAIN=$NDK/toolchains/$PLATFORM-4.9/prebuilt/darwin-x86_64
OUTPUT=/Users/xx/ffmpeg-3.4.7/android
function build_one
{
./configure \
--prefix=$OUTPUT \
--enable-shared \
--disable-static \
--disable-doc \
--disable-ffmpeg \
--disable-ffplay \
--disable-ffprobe \
--disable-avdevice \
--disable-doc \
--disable-symver \
--cross-prefix=$TOOLCHAIN/bin/arm-linux-androideabi- \
--target-os=android \
--arch=arm \
--enable-cross-compile \
--sysroot=$SYSROOT \
--extra-cflags="-I$ASM -isysroot $ISYSROOT -Os -fpic -marm" \
--extra-ldflags="-marm" \
$ADDITIONAL_CONFIGURE_FLAG
make clean
#make -j4
make
make install
}
build_one
如果执行时报出arm-linux-androideabi-clang No such directory的错误,请切换目录到ndk/build/tools下,执行
./make_standalone_toolchain.py --arch arm --api 21 --install-dir /Users/xx/tmp/my-android-toolchain
将生成的arm-linux-androideabi-clang 和clang50文件拷贝过去即可解决问题
在/Users/xx/ffmpeg-3.4.7/android下面就可以找到编译好的so文件和include文件了。