Mac编译ffmpeg

本文记录Mac编译ffmpeg生成在Android上运行的so文件的过程。

ffmpeg下载相关的网址:https://www.ffmpeg.org/download.html

请尊重博主劳动成果,转载请标明原文出处和作者。

下载ffmpeg工程

将ffmepg源码下载到本地:

git clone https://git.ffmpeg.org/ffmpeg.git ffmpeg

修改configure

默认的配置不支持Android平台,需要修改相关配置。
Mac编译ffmpeg_第1张图片
将3330至3333行注释,添加如下四行配置:

SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
LIB_INSTALL_EXTRA_CMD='$$(RANLIB)"$(LIBDIR)/$(LIBNAME)"'
SLIB_INSTALL_NAME='$(SLIBNAME_WITH_MAJOR)'
SLIB_INSTALL_LINKS='$(SLIBNAME)'

配置编译脚本

生成arm平台的so文件的脚本build_android_arm.sh内容:

#!/bin/bash
export TMPDIR=/xxx/xxx/video/ffmpeg/tmpDir
NDK=/xxx/xxx/android/android-ndk-r14b
SYSROOT=$NDK/platforms/android-14/arch-arm/
TOOLCHAIN=/xxx/xxx/android/android-ndk-r14b/toolchains/arm-linux-androideabi-4.9/prebuilt/darwin-x86_64

CPU=arm
PREFIX=/Users/liu1359041/room/video/so/arm/
ADDI_CFLAGS="-marm"
ADDI_LDFLAGS=""

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,temp目录

export TMPDIR=/xxx/xxx/video/ffmpeg/tmpDir

TMPDIR为编译生成的临时文件存放的目录。

2,Android NDK安装目录

NDK=/xxx/xxx/android/android-ndk-r14b

3,so文件支持的最低Android版本的平台目录

SYSROOT=$NDK/platforms/android-14/arch-arm/

4,指定so文件支持的平台,PREFIX为生成的so文件存放目录

CPU=arm
PREFIX=/Users/liu1359041/room/video/so/arm/

5,Mac平台编译所使用的工具链目录

TOOLCHAIN=/xxx/xxx/android/android-ndk-r14b/toolchains/arm-linux-androideabi-4.9/prebuilt/darwin-x86_64

6,配置编译所使用的工具链文件

--cross-prefix=$TOOLCHAIN/bin/arm-linux-androideabi- \

编译

将脚本build_android_arm.sh复制到ffmepg工程的根目录,运行终端,并进入到ffmepg工程目录,运行./build_android_arm.sh。等待十几分钟,编译完成会在配置的存放的目录生成include和lib目录。include目录存放相关so的头文件(即.h文件),lib目录存放生成的so文件。

文件如下图:
Mac编译ffmpeg_第2张图片

Mac编译ffmpeg_第3张图片
xxx-数字.so这些是真正的可执行文件,xx.so是链接。

如果编译过程出现了错误,基本上是build_android_arm.sh脚本中NDK相关的配置出现了错误。

x86

生成x86平台的so文件的脚本build_android_x86.sh内容:

#!/bin/bash
export TMPDIR=/Users/liu1359041/room/video/tmpDir

NDK=/Users/liu1359041/devTools/android/android-ndk-r12b
SYSROOT=$NDK/platforms/android-14/arch-x86/
TOOLCHAIN=/Users/liu1359041/devTools/android/android-ndk-r12b/toolchains/x86-4.9/prebuilt/darwin-x86_64

CPU=x86
PREFIX=/Users/liu1359041/room/video/so/x86/

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 \
--disable-yasm \
--cross-prefix=$TOOLCHAIN/bin/i686-linux-android- \
--target-os=linux \
--arch=x86 \
--enable-cross-compile \
--sysroot=$SYSROOT \
--extra-cflags="-Os -fpic" \
$ADDITIONAL_CONFIGURE_FLAG
make clean
make
make install
}

build_one

与生成arm平台的脚步基本相同,SYSROOT,TOOLCHAIN和–cross-prefix需要配置到x86相关的NDK编译目录。如果编译x86之前有先编译过arm的,需要删除生成的config.h文件。如果不删除,生成的so文件还是arm平台的,并会存放在arm目录中。

参考博客:

https://github.com/dxjia/ffmpeg-compile-shared-library-for-android

Mac下为Android编译FFMPEG和x264 (一)
http://zheteng.me/android/2016/05/25/build-ffmpeg-for-android-with-x264/

你可能感兴趣的:(视频)