目录
- 编译生成多个.so
- 打包成一个.so
- 在安卓上测试使用
编译FFmpeg
-编译环境:
Mac OS
NDK-r10e
FFmpeg 3.3.3
-编译过程
-修改configure文件
下载FFmpeg源代码之后,首先需要对源代码中的configure文件进行修改。由于编译出来的动态库文件名的版本号在.so之后(例如“libavcodec.so.5.100.1”),而android平台不能识别这样文件名,所以需要修改这种文件名。
找到 ffmpeg-3.3/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)'
-编写脚本文件
新建脚本文件 ffmpeg-3.3/build_android.sh,保存下面脚本。
需要注意的是,这个脚本文件最好不要用记事本去创建改文件后缀的方式,记事本会添加一些奇怪的结束符(Line ending),我是直接拷贝ffmpeg解压后文件夹里的version.sh改的build_android.sh
#!/bin/bash
# NDK的路径,根据自己的安装位置进行设置
NDK=~/Library/Android/sdk/ndk-bundle
# 编译针对的平台,可以根据自己的需求进行设置
# 这里选择最低支持android-14, arm架构,生成的so库是放在
# libs/armeabi文件夹下的,若针对x86架构,要选择arch-x86
PLATFORM=$NDK/platforms/android-14/arch-arm
# 工具链的路径,根据编译的平台不同而不同
# arm-linux-androideabi-4.9与上面设置的PLATFORM对应,4.9为工具的版本号,
# 根据自己安装的NDK版本来确定,一般使用最新的版本
TOOLCHAIN=$NDK/toolchains/arm-linux-androideabi-4.9/prebuilt/darwin-x86_64
ARCH=arm
TARGETOS=android
PREFIX=$(pwd)/$TARGETOS/$ARCH
PREFIX1=$(pwd)
ADDITIONAL_CONFIGURE_FLAG=
./configure \
--prefix=$PREFIX \
--enable-shared \
--disable-static \
--disable-doc \
--disable-programs \
-<