这篇文章主要是讲述如何在mac os下面编译FFmpeg。
1.下载FFmpeg
官网地址是http://ffmpeg.org/,然后找到mac os版本的,点击下载。
下载后进行解压。
因为FFmpeg需要用到ndk开发环境,同时还需要下载ndk安装包,安装后解压。
2.配置环境
启动终端,进入home目录
创建.bash_profile文件(touch .bash_profile)
编辑.bash_profile文件(open -e .bash_profile)
如同我们编辑android sdk开发环境一样,我们如果要编译ffmpeg,就需要配置AndroidNDK开发环境,
下载ndk的网址如下:
https://developer.android.google.cn/ndk/downloads/
我的配置后的文件如下:
关闭文件,执行 source .bash_profile命令。
这时候随便打开一个终端窗口,输入ndk-build命令来查看刚才的配置是否成功。
3.开始编译
因为android平台不能识别FFmpeg编译出来的动态库文件名,所以需要手动修改FFmpeg的configure文件。
用编辑器打开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)'
4.编写shell文件
#!/bin/sh
NDK=/Users/preqel/AndroidStudioProjects/android-ndk-r20b/androidndk_r20b
SYSROOT=$NDK/platforms/android-21/arch-arm
NDKTOOLCHAIN=$NDK/toolchains/arm-linux-androideabi-4.9/prebuilt/darwin-x86_64
function build_one
{
./configure \
--prefix=$PREFIX \
--enable-shared \
--disable-static \
--disable-doc \
--disable-ffmpeg \
--disable-ffplay \
--disable-ffprobe \
--disable-ffserver \
--disable-advevice \
--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" \
$ADDITIONAL_CONFIGURE_FLAG
make clean
make
make install
}
CPU=arm
PREFIX=${pwd}/android/$CPU
ADDI_CFLAGS="-marm"
build_one
这一步比较难,必须要熟悉shell脚本中每个语句的意思,否则很有可能因为手敲多了一个空格,或者路径配置不对,造成编译不通过,而且排查原因也十分困难。
#5.编译动态链接库
执行./ build_android.sh