编译android的ffmpeg库

本文详细介绍了如何在Mac环境下为Android平台编译FFmpeg库。首先,下载并配置Android NDK,生成交叉编译工具链。接着,修改FFmpeg源码的configure文件,然后编写并执行build.sh脚本来编译针对不同架构的库(armeabi-v7a)。编译完成后,会在指定目录下得到FFmpeg的头文件和库文件。
摘要由CSDN通过智能技术生成

我们要让android或者ios使用ffmpeg,那么我们就要编译出来android或ios使用的ffmpeg库。

下面我们以mac编译android使用的ffmpeg库为例。

编译交叉工具链

1、下载ndk https://developer.android.google.cn/ndk/downloads/ 我们下载r21版本

2、生成交叉编译工具链 (生成mac下可以用来编译android库的工具)

我们先解压下ndk r21

在ndk的根目录下/build/tools/make-standalone-toolchain.sh 的脚本用来生成编译android的交叉编译工具链

./build/tools/make-standalone-toolchain.sh --toolchain=arm-linux-androideabi-4.9 --platform=android-19 --install-dir=../toolchain

--platform 最低支持版本

--install-dir 编译后工具的位置

我们看下toolchain文件夹下的生成的工具

我们进去bin中看下

我们把其中aarch64-linux-android22-clang aarch64-linux-android22-clang++

改为aarch64-linux-android-clang aarch64-linux-android-clang++

 

编译ffmpeg库

下载ffmpeg库

https://github.com/FFmpeg/FFmpeg 我们选择最新稳定版本即可

下载后,我们进入根目录

修改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)'

 

我们在根目录下增加一个build.sh

#!/bin/bash
#在ffmpeg目录下执行该脚本,输出在ffmpeg目录下的android-build 目录里
PREFIX=./android-build

#设置你自己的NDK位置
NDK_HOME=/Users/yuanxuzhen/tools/ndk/toolchain

COMMON_OPTIONS="\
    --target-os=android \
    --disable-static \
    --enable-shared \
    --enable-small \
    --disable-programs \
    --disable-ffmpeg \
    --disable-ffplay \
    --disable-ffprobe \
    --disable-doc \
    --disable-symver \
    --disable-asm \
    "
function build_android {

    ./configure \
    --libdir=${PREFIX}/libs/armeabi-v7a \
    --incdir=${PREFIX}/includes/armeabi-v7a \
    --pkgconfigdir=${PREFIX}/pkgconfig/armeabi-v7a \
    --arch=arm \
    --cpu=armv7-a \
    --cross-prefix="${NDK_HOME}/bin/arm-linux-androideabi-" \
    --sysroot="${NDK_HOME}/sysroot/" \
    --extra-ldexeflags=-pie \
    ${COMMON_OPTIONS}
    make clean
    make -j8 && make install


#    ./configure \
#    --libdir=${PREFIX}/libs/arm64-v8a \
#    --incdir=${PREFIX}/includes/arm64-v8a \
#    --pkgconfigdir=${PREFIX}/pkgconfig/arm64-v8a \
#    --arch=aarch64 \
#    --cpu=armv8-a \
#    --cross-prefix="${NDK_HOME}/bin/aarch64-linux-android-" \
#    --sysroot="${NDK_HOME}/sysroot/" \
#    --extra-ldexeflags=-pie \
#    ${COMMON_OPTIONS}
#    make clean
#    make -j8 && make install

#    ./configure \
#    --libdir=${PREFIX}/libs/x86 \
#    --incdir=${PREFIX}/includes/x86 \
#    --pkgconfigdir=${PREFIX}/pkgconfig/x86 \
#    --arch=x86 \
#    --cpu=i686 \
#    --cross-prefix="${NDK_HOME}/bin/i686-linux-android-" \
#    --sysroot="${NDK_HOME}/sysroot/" \
#    --extra-ldexeflags=-pie \
#    ${COMMON_OPTIONS}
#    make clean
#    make -j8 && make install
#
#    ./configure \
#    --libdir=${PREFIX}/libs/x86_64 \
#    --incdir=${PREFIX}/includes/x86_64 \
#    --pkgconfigdir=${PREFIX}/pkgconfig/x86_64 \
#    --arch=x86_64 \
#    --cpu=x86_64 \
#    --cross-prefix="${NDK_HOME}/bin/x86_64-linux-android-" \
#    --sysroot="${NDK_HOME}/sysroot/" \
#    --extra-ldexeflags=-pie \
#    ${COMMON_OPTIONS}
#    make clean
#    make -j8 && make install
};

build_android

脚本中

#在ffmpeg目录下执行该脚本,输出在ffmpeg目录下的android-build 目录里
PREFIX=./android-build
这个就是我们的输出目录

#设置你自己的NDK位置
NDK_HOME=/Users/yuanxuzhen/tools/ndk/toolchain 这个是我们上文编译出来的用于编译android库的工具文件夹。

 

我们先改下build.sh的权限

chmod a+x build.sh

./build.sh

编译过程会耗时很长时间

编译后我们就会成成下面的文件

这就是我们最后生成的头文件和库

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值