NDK r21b 编译FFmpeg 、x264 提供Android集成
在现今这个阶段,越来越多的app会涉及到音视频,那么学会使用ffmpeg和x264就很有必要了。本篇文章将讲解如何把ffmpeg、x264编译成动态库和静态库。
1. 编译环境
Linux/Ubuntu/Centis都行。在windows环境下可以安装虚拟机或者购买一个云主机,作者在阿里云购买的一个Ubuntu主机。
2. 准备工作
linux ndk下载:https://developer.android.google.cn/ndk/downloads
FFmpeg 下载:http://ffmpeg.org/download.html
x264 下载:https://www.videolan.org/developers/x264.html
将下载好的文件解压
3. 编写脚本
3.1 编译FFmpeg
1. 在解压后的ffmpeg目录新建build.sh文件,编辑build.sh,代码如下:
#!/bin/bash
export NDK=/home/study/android-ndk-r21b
export PREBUILD=$NDK/toolchains/llvm/prebuilt
export CROSS_PREFIX=${PREBUILD}/linux-x86_64/bin/arm-linux-androideabi-
export CC=$PREBUILD/linux-x86_64/bin/armv7a-linux-androideabi21-clang
export NM=$CROSS_PREFIXnm
export AR=$CROSS_PREFIXar
export PREFIX=./android/armeabi-v7a
function build_so
{
./configure \
--prefix=$PREFIX \
--cc=$CC \
--nm=$NM \
--ar=$AR \
--enable-small \
--disable-programs \
--disable-avdevice \
--disable-encoders \
--disable-muxers \
--disable-filters \
--cross-prefix=$CROSS_PREFIX \
--target-os=android \
--arch=arm \
--disable-shared \
--enable-static \
--enable-cross-compile
}
make clean
build_so
make -j4
make install
2. 修改权限 chmod +x build.sh
3. 执行 ./build.sh
4. 编译完成之后会在当前目录生成android/armeabi-v7a文件,里面的内容就是编译ffmpeg生成的静态库和头文件。
3.2 编译x264
1. 在解压后的ffmpeg目录新建build.sh文件,编辑build.sh,代码如下:
#!/bin/bash
export NDK=/home/study/android-ndk-r21b
export TOOLCHAIN=$NDK/toolchains/llvm/prebuilt/linux-x86_64
export API=21
function build_one
{
./configure \
--prefix=$PREFIX \
--disable-cli \
--enable-static \
--enable-pic \
--host=$my_host \
--cross-prefix=$CROSS_PREFIX \
--sysroot=$NDK/toolchains/llvm/prebuilt/linux-x86_64/sysroot \
make clean
make -j8
make install
}
#arm64-v8a
PREFIX=./android/arm64-v8a
my_host=aarch64-linux-android
export TARGET=aarch64-linux-android
export CC=$TOOLCHAIN/bin/$TARGET$API-clang
export CXX=$TOOLCHAIN/bin/$TARGET$API-clang++
CROSS_PREFIX=$TOOLCHAIN/bin/aarch64-linux-android-
build_one
#armeabi-v7a
PREFIX=./android/armeabi-v7a
my_host=armv7a-linux-android
export TARGET=armv7a-linux-androideabi
export CC=$TOOLCHAIN/bin/$TARGET$API-clang
export CXX=$TOOLCHAIN/bin/$TARGET$API-clang++
CROSS_PREFIX=$TOOLCHAIN/bin/arm-linux-androideabi-
build_one
2. 修改权限 chmod +x build.sh
3. 执行 ./build.sh
4. 编译完成之后会在当前目录生成android/armeabi-v7a 和 android/arm64-v8a文件,里面的内容就是编译ffmpeg生成的静态库和头文件。