我们要让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
编译过程会耗时很长时间
编译后我们就会成成下面的文件
这就是我们最后生成的头文件和库