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的链接的主要内容,如果未能解决你的问题,请参考以下文章

ubuntu 交叉编译 armv7_32 ffmpeg x264(已完成)

交叉编译x264和ffmpeg

在配置 ffmpeg 时出现错误“未找到 x264”

centos编译ffmpeg x264

x264 x265交叉编译 ffmpeg交叉编译安装

Windows系统下编译FFmpeg for Android(支持x264)