x264和fdk-aac的编译和FFmpeg的链接
Posted 一杯清泉
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了x264和fdk-aac的编译和FFmpeg的链接相关的知识,希望对你有一定的参考价值。
一、编译环境
- ffmpeg-4.2.2.tar.bz2
- Mac
- NDK21.1.6352462
- ARCH=arm64
- CPU=armv8-a
- TOOL_CPU_NAME=aarch64
编译工具链目录:
/Users/xxx/Library/android/sdk/ndk/21.1.6352462/toolchains/llvm/prebuilt/darwin-x86_64/bin
交叉编译环境目录:
/Users/xxx/Library/Android/sdk/ndk/21.1.6352462/toolchains/llvm/prebuilt/darwin-x86_64/sysroot
和FFmpeg环境一致。
二、x264编译
1、下载
https://code.videolan.org/videolan/x264/-/archive/master/x264-master.tar.bz2
2、解压缩项目根目录添加脚本
build_clang_x264.sh:
#!/bin/bash
export NDK=/Users/xxx/Library/Android/sdk/ndk/21.1.6352462 # 这里需要替换成你本地的 NDK 路径,其他的不用修改
TOOLCHAIN=$NDK/toolchains/llvm/prebuilt/darwin-x86_64
export API=21
function build_android
{
./configure \\
--prefix=$PREFIX \\
--disable-cli \\
--disable-shared \\
--enable-static \\
--enable-pic \\
--host=$my_host \\
--cross-prefix=$CROSS_PREFIX \\
--sysroot=$NDK/toolchains/llvm/prebuilt/darwin-x86_64/sysroot \\
make clean
make -j8
make install
}
#arm64-v8a
PREFIX=../so/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_android
3、可执行权限
chmod +x build_x264_clang.sh
4、运行编译脚本
./build_x264_clang.sh
5、结果
等大约3分钟编译结束:
三、fdk-aac编译
1、下载
http://jaist.dl.sourceforge.net/project/opencore-amr/fdk-aac/fdk-aac-2.0.1.tar.gz
2、解压缩项目根目录添加脚本
build_clang_fdk_aac.sh:
#!/bin/bash
NDK=/Users/xxx/Library/Android/sdk/ndk/21.1.6352462 # 这里需要替换成你本地的 NDK 路径,其他的不用修改
HOST_TAG=darwin-x86_64
TOOLCHAIN=$NDK/toolchains/llvm/prebuilt/$HOST_TAG
PREFIX=../so/arm64-v8a
API=21
function build_android
{
./configure \\
--host=$HOST \\
--disable-shared \\
--enable-static \\
--prefix=$PREFIX \\
CPPFLAGS="-fPIC"
make clean
make -j8
make install
}
# arm64-v8a
CPU=armv8-a
HOST=aarch64-linux-android
export AR=$TOOLCHAIN/bin/aarch64-linux-android-ar
export AS=$TOOLCHAIN/bin/aarch64-linux-android-as
export LD=$TOOLCHAIN/bin/aarch64-linux-android-ld
export RANLIB=$TOOLCHAIN/bin/aarch64-linux-android-ranlib
export STRIP=$TOOLCHAIN/bin/aarch64-linux-android-strip
export CC=$TOOLCHAIN/bin/aarch64-linux-android$API-clang
export CXX=$TOOLCHAIN/bin/aarch64-linux-android$API-clang++
build_android
5、结果
等大约1分钟编译结束:
四、链接 fdk-aac 和 x264
Android 平台,一般我们要链接第三方库的时候,需要第三方库的头文件和相应的 .a 或 .so 库。在 FFmpeg-4.2.2 解压目录下,新建编译 FFmpeg 并链接 fdk-aac 和 x264 脚本 。
1、下载
https://ffmpeg.org/releases/ffmpeg-4.2.2.tar.bz2
2、脚本
build_clang_ffmpeg_link_fdk_aac_x264.sh:
#!/bin/bash
export NDK=/Users/xxx/Library/Android/sdk/ndk/21.1.6352462 # 这里需要替换成你本地的 NDK 路径,其他的不用修改
TOOLCHAIN=$NDK/toolchains/llvm/prebuilt/darwin-x86_64
function build_android
{
./configure \\
--prefix=$PREFIX \\
--enable-neon \\
--enable-hwaccels \\
--enable-gpl \\
--disable-postproc \\
--enable-static \\
--enable-shared \\
--disable-debug \\
--enable-small \\
--enable-jni \\
--enable-mediacodec \\
--disable-doc \\
--enable-ffmpeg \\
--disable-ffplay \\
--disable-ffprobe \\
--disable-avdevice \\
--disable-doc \\
--disable-symver \\
--enable-libx264 \\
--enable-libfdk-aac \\
--enable-encoder=libx264 \\
--enable-encoder=libfdk-aac \\
--enable-nonfree \\
--enable-muxers \\
--enable-decoders \\
--enable-demuxers \\
--enable-parsers \\
--enable-protocols \\
--cross-prefix=$CROSS_PREFIX \\
--target-os=android \\
--arch=$ARCH \\
--cpu=$CPU \\
--cc=$CC \\
--cxx=$CXX \\
--enable-cross-compile \\
--sysroot=$SYSROOT \\
--extra-cflags="-I$X264_INCLUDE -I$FDK_INCLUDE -Os -fpic $OPTIMIZE_CFLAGS" \\
--extra-ldflags="-lm -L$FDK_LIB -L$X264_LIB $ADDI_LDFLAGS"
make clean
make -j8
make install
}
#armv8-a
ARCH=arm64
CPU=armv8-a
API=21
CC=$TOOLCHAIN/bin/aarch64-linux-android$API-clang
CXX=$TOOLCHAIN/bin/aarch64-linux-android$API-clang++
SYSROOT=$NDK/toolchains/llvm/prebuilt/darwin-x86_64/sysroot
CROSS_PREFIX=$TOOLCHAIN/bin/aarch64-linux-android-
PREFIX=$(dirname $(pwd))/so/$CPU
OPTIMIZE_CFLAGS="-mfloat-abi=softfp -mfpu=vfp -marm -march=$CPU "
BASE_PATH=/Users/xxx/Desktop/so
LIB_TARGET_ABI=arm64-v8a
#指定 fdk-aac 的头文件和静态库目录
FDK_INCLUDE=$BASE_PATH/fdk-aac/so/$LIB_TARGET_ABI/include
FDK_LIB=$BASE_PATH/fdk-aac/so/$LIB_TARGET_ABI/lib
#指定 x264 的头文件和静态库目录
X264_INCLUDE=$BASE_PATH/x264/so/$LIB_TARGET_ABI/include
X264_LIB=$BASE_PATH/x264/so/$LIB_TARGET_ABI/lib
build_android
cp $FDK_LIB/libfdk-aac.a $PREFIX/lib
cp $X264_LIB/libx264.a $PREFIX/lib
3、结果
下载地址:https://download.csdn.net/download/yoonerloop/20906326
4、测试
以上是关于x264和fdk-aac的编译和FFmpeg的链接的主要内容,如果未能解决你的问题,请参考以下文章