Mac下使用NDK编译FFmpeg生成so文件

前提:
已安装NDK并且能够正常使用。

具体步骤:

  • 访问FFmpeg官网下载FFmpeg压缩包并解压缩。

  • 为了让编译出来的so库适合Android,所以要修改配置文件。

  • 用编辑器(我用的是sublime)打开 /ffmpeg-3.2.4/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.2.4/下创建 buildffmpeg.sh文件,并将以下内容复制到此文件
#!/bin/bash
export TMPDIR=/Users/yeoggc/Dev/DevProject3/FFmpegProject/tempdirforffmpeg
NDK=/Users/yeoggc/Library/Android/sdk/ndk-bundle
SYSROOT=$NDK/platforms/android-18/arch-arm/
TOOLCHAIN=/Users/yeoggc/Library/Android/sdk/ndk-bundle/toolchains/arm-linux-androideabi-4.9/prebuilt/darwin-x86_64
CPU=arm
PREFIX=/Users/yeoggc/Dev/DevProject3/FFmpegProject/outputso/arm/
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
  • 修改其中五处内容分别是
    1. 指定临时目录
      export TMPDIR=/Users/yeoggc/Dev/DevProject3/FFmpegProject/tempdirforffmpeg
      指定一个临时目录,可以是任何路径,但必须保证存在,否则会报错的。
  1. 指定NDK路径
    NDK=/Users/yeoggc/Library/Android/sdk/ndk-bundle

  2. 指定使用NDK Platform版本
    SYSROOT=$NDK/platforms/android-18/arch-arm/
    这里指定的ndk platform的路径,一定要选择比你的目标机器使用的版本低的,比如你的手机是android-15版本,那么就选择低于15的

  3. 指定编译工具链
    $NDK/toolchains/arm-linux-androideabi-4.9/prebuilt/darwin-x86_64

  4. 指定编译后的安装目录
    PREFIX=./android/$CPU
    这个目录是ffmpeg编译后的so的输出目录,会有一个include和lib文件夹生成在这里。

  • 设置build_ffmpeg.sh权限并执行

在终端输入以下命令设置权限:

chmod 777 /Users/yeoggc/Dev/DevProject3/FFmpegProject/ffmpeg-3.2.4/build_android.sh

在终端并且ffmpeg-3.2.4路径下,输入以下命令:

./build_ffmpeg.sh

等不到十分钟,打开你sh文件里指定的临时目录, 该目录下生成 include和lib两个文件夹,将lib文件夹中的 pkgconfig 目录和so的链接文件删除,只保留so文件,然后include 和lib两个目录拷贝出来这就是我们想要的了。

参考:

  • ffmpeg-compile-shared-library-for-android
  • FFmpeg之一编译ForAndroid

你可能感兴趣的:(Mac下使用NDK编译FFmpeg生成so文件)