Ubuntu下 Android NDK 编译 FFmpeg + x264 + fdk-aac (arm/x86)的配置脚本

简介: Ubuntu下 Android NDK 编译 FFmpeg + x264 + fdk-aac (arm/x86)的配置脚本

系统是Ubuntu 16.04 LTS,x264 和 fdk-aac 都是当前的最新版,FFmpeg是2.8.8,使用的NDK 版本是r10e




主要参考自


http://blog.chinaunix.net/uid-26000296-id-5213411.html

http://www.itnose.net/detail/6219672.html

http://zhangcb666.blog.163.com/blog/static/46963529201392362743670/



我的目录结构是

image.png

生成的库文件和头文件最终会根据prefix的指定,在make install之后被放置到各个android目录下

image.png

image.pngimage.png

arm的 x264 的config.sh

export NDK=/home/pan/Downloads/android-ndk-r10e
export SYSROOT=$NDK/platforms/android-9/arch-arm/
export TOOLCHAIN=$NDK/toolchains/arm-linux-androideabi-4.8/prebuilt/linux-x86_64
function build_one
{
./configure \
--prefix=$PREFIX \
--enable-static \
--enable-shared \
--enable-pic \
--disable-asm \
--enable-strip \
--host=arm-linux-androideabi \
--cross-prefix=$TOOLCHAIN/bin/arm-linux-androideabi- \
--sysroot=$SYSROOT \
--extra-cflags="-Os -fpic $ADDI_CFLAGS" \
--extra-ldflags="$ADDI_LDFLAGS" \
$ADDITIONAL_CONFIGURE_FLAG
}
CPU=arm
PREFIX=$(pwd)/android/$CPU
ADDI_CFLAGS=""
build_one

arm的 fdk-aac 的config.sh

#!/bin/sh
export NDK_HOME=/home/pan/Downloads/android-ndk-r10e
ANDROID_API=android-14
SYSROOT=$NDK_HOME/platforms/$ANDROID_API/arch-arm
ANDROID_BIN=$NDK_HOME/toolchains/arm-linux-androideabi-4.8/prebuilt/linux-x86_64/bin/
CROSS_COMPILE=${ANDROID_BIN}/arm-linux-androideabi-
export PATH=$PATH:$ANDROID_SDK/tools:$ANDROID_SDK/platform-tools
ARM_INC=$SYSROOT/usr/include
ARM_LIB=$SYSROOT/usr/lib
LDFLAGS=" -nostdlib -Bdynamic -Wl,--whole-archive -Wl,--no-undefined -Wl,-z,noexecstack  -Wl,-z,nocopyreloc -Wl,-soname,/system/lib/libz.so -Wl,-rpath-link=$ARM_LIB,-dynamic-linker=/system/bin/linker -L$NDK_HOME/sources/cxx-stl/gnu-libstdc++/libs/armeabi -L$NDK_HOME/toolchains/arm-linux-androideabi-4.8/prebuilt/linux-x86_64/arm-linux-androideabi/lib -L$ARM_LIB  -lc -lgcc -lm -ldl  "
FLAGS="--host=arm-linux-androideabi --enable-static --disable-shared"
export CXX="${CROSS_COMPILE}g++ --sysroot=${SYSROOT}"
export LDFLAGS="$LDFLAGS"
export CC="${CROSS_COMPILE}gcc --sysroot=${SYSROOT}"
CPU=arm
./configure $FLAGS \
--prefix=$(pwd)/android/$CPU

arm的FFmpeg 的config.sh

export NDK=/home/pan/Downloads/android-ndk-r10e
export SYSROOT=$NDK/platforms/android-14/arch-arm/
export TOOLCHAIN=$NDK/toolchains/arm-linux-androideabi-4.8/prebuilt/linux-x86_64
export TMPDIR=/home/pan/Downloads/tmp
function build_one
{
./configure \
--prefix=$PREFIX \
--enable-shared \
--disable-static \
--disable-doc \
--disable-ffserver \
--disable-asm \
--enable-gpl \
--enable-libx264 \
--enable-libfdk-aac \
--enable-cross-compile \
--enable-nonfree \
--cross-prefix=$TOOLCHAIN/bin/arm-linux-androideabi- \
--target-os=linux \
--arch=arm \
--sysroot=$SYSROOT \
--extra-cflags="-Os -fpic $ADDI_CFLAGS" \
--extra-ldflags="$ADDI_LDFLAGS" \
$ADDITIONAL_CONFIGURE_FLAG
}
CPU=arm
PREFIX=$(pwd)/android/$CPU
ADDI_CFLAGS="-marm -I/home/pan/Downloads/x264/android/arm/include -I/home/pan/Downloads/fdk-aac/android/arm/include -DANDROID "
ADDI_LDFLAGS="-L/home/pan/Downloads/x264/android/arm/lib -L/home/pan/Downloads/fdk-aac/android/arm/lib"
build_one

以上路径需要根据自己的目录结构进行修改,尤其是FFmpeg的config.sh,ADDI_CFLAGS 和 ADDI_LDFLAGS 分别指定了 x264 和 fdk-aac 的头文件和库文件的路径。




注意:


1.如果需要去掉生成库的版本号,可以参考这篇文章——http://www.itnose.net/detail/6219672.html

2.如果要生成非arm架构的库,也需要做对应修改;




x86的 x264 的config.sh:

export NDK=/home/pan/Downloads/android-ndk-r10e
export SYSROOT=$NDK/platforms/android-9/arch-x86/
export TOOLCHAIN=$NDK/toolchains/x86-4.8/prebuilt/linux-x86_64
function build_one
{
./configure \
--prefix=$PREFIX \
--enable-static \
--enable-shared \
--enable-pic \
--disable-asm \
--enable-strip \
--host=i686-linux-android \
--cross-prefix=$TOOLCHAIN/bin/i686-linux-android- \
--sysroot=$SYSROOT \
--extra-cflags="-Os -fpic $ADDI_CFLAGS" \
--extra-ldflags="$ADDI_LDFLAGS" \
$ADDITIONAL_CONFIGURE_FLAG
}
CPU=x86
PREFIX=$(pwd)/android/$CPU
ADDI_CFLAGS=""
build_one

x86的 fdk-aac 的config.sh

#!/bin/sh
export NDK_HOME=/home/pan/Downloads/android-ndk-r10e
ANDROID_API=android-14
SYSROOT=$NDK_HOME/platforms/$ANDROID_API/arch-x86
ANDROID_BIN=$NDK_HOME/toolchains/x86-4.8/prebuilt/linux-x86_64/bin/
CROSS_COMPILE=${ANDROID_BIN}/i686-linux-android-
export PATH=$PATH:$ANDROID_SDK/tools:$ANDROID_SDK/platform-tools
ARM_INC=$SYSROOT/usr/include
ARM_LIB=$SYSROOT/usr/lib
LDFLAGS=" -nostdlib -Bdynamic -Wl,--whole-archive -Wl,--no-undefined -Wl,-z,noexecstack  -Wl,-z,nocopyreloc -Wl,-soname,/system/lib/libz.so -Wl,-rpath-link=$ARM_LIB,-dynamic-linker=/system/bin/linker -L$NDK_HOME/sources/cxx-stl/gnu-libstdc++/libs/x86 -L$NDK_HOME/toolchains/x86-4.8/prebuilt/linux-x86_64/i686-linux-android/lib -L$ARM_LIB  -lc -lgcc -lm -ldl  "
FLAGS="--host=i686-linux-android --enable-static --disable-shared"
export CXX="${CROSS_COMPILE}g++ --sysroot=${SYSROOT}"
export LDFLAGS="$LDFLAGS"
export CC="${CROSS_COMPILE}gcc --sysroot=${SYSROOT}"
CPU=x86
./configure $FLAGS \
--prefix=$(pwd)/android/$CPU

x86的 ffmpeg 的 config.sh

export NDK=/home/pan/Downloads/android-ndk-r10e
export SYSROOT=$NDK/platforms/android-14/arch-x86/
export TOOLCHAIN=$NDK/toolchains/x86-4.8/prebuilt/linux-x86_64
export TMPDIR=/home/pan/Downloads/tmp
function build_one
{
./configure \
--prefix=$PREFIX \
--enable-shared \
--disable-static \
--disable-doc \
--disable-ffserver \
--disable-asm \
--enable-gpl \
--enable-libx264 \
--enable-libfdk-aac \
--enable-cross-compile \
--enable-nonfree \
--cross-prefix=$TOOLCHAIN/bin/i686-linux-android- \
--target-os=linux \
--arch=x86 \
--sysroot=$SYSROOT \
--extra-cflags="-Os -fpic $ADDI_CFLAGS" \
--extra-ldflags="$ADDI_LDFLAGS" \
$ADDITIONAL_CONFIGURE_FLAG
}
CPU=x86
PREFIX=$(pwd)/android/$CPU
ADDI_CFLAGS="-I/home/pan/Downloads/x264/android/x86/include -I/home/pan/Downloads/fdk-aac/android/x86/include -DANDROID "
ADDI_LDFLAGS="-L/home/pan/Downloads/x264/android/x86/lib -L/home/pan/Downloads/fdk-aac/android/x86/lib"
build_one

3.目前这种方法生成的是多个带版本号的so,也可以通过写一个Bash将它们(静态库)打包为一个ffmpeg.so方便调用。


如图:

image.pngimage.png

目录
相关文章
|
并行计算 PyTorch TensorFlow
Ubuntu安装笔记(一):安装显卡驱动、cuda/cudnn、Anaconda、Pytorch、Tensorflow、Opencv、Visdom、FFMPEG、卸载一些不必要的预装软件
这篇文章是关于如何在Ubuntu操作系统上安装显卡驱动、CUDA、CUDNN、Anaconda、PyTorch、TensorFlow、OpenCV、FFMPEG以及卸载不必要的预装软件的详细指南。
11423 4
|
应用服务中间件 Linux nginx
Jetson 环境安装(四):jetson nano配置ffmpeg和nginx(亲测)之编译错误汇总
这篇文章是关于在Jetson Nano上配置FFmpeg和Nginx时遇到的编译错误及其解决方案的汇总。
480 4
|
Ubuntu 开发工具 Android开发
Repo下载AOSP源码:基于ubuntu22.04 环境配置,android-12.0.0_r32
本文介绍了在基于Ubuntu 22.04的环境下配置Python 3.9、安装repo工具、下载和同步AOSP源码包以及处理repo同步错误的详细步骤。
1261 0
Repo下载AOSP源码:基于ubuntu22.04 环境配置,android-12.0.0_r32
|
11月前
|
Ubuntu 开发工具 git
Ubuntu编译ffmpeg解决错误:ERROR: avisynth/avisynth_c.h not found
通过本文的详细指导,您可以顺利地在Ubuntu系统上配置和编译FFmpeg,并解决Avisynth头文件缺失的问题。
478 27
|
11月前
|
Ubuntu
Ubuntu20.04 编译安装FFmpeg,出错分析以及解决方案
通过上述步骤,可以在 Ubuntu 20.04 上成功编译和安装 FFmpeg。如果遇到问题,可以通过检查依赖包的安装情况以及 `config.log` 文件来解决。掌握这些技巧和解决方案,可以有效地解决编译过程中遇到的各种问题,提高安装成功率。
1090 13
|
Ubuntu 应用服务中间件 nginx
Ubuntu安装笔记(三):ffmpeg(3.2.16)源码编译opencv(3.4.0)
本文是关于Ubuntu系统中使用ffmpeg 3.2.16源码编译OpenCV 3.4.0的安装笔记,包括安装ffmpeg、编译OpenCV、卸载OpenCV以及常见报错处理。
889 2
Ubuntu安装笔记(三):ffmpeg(3.2.16)源码编译opencv(3.4.0)
|
编解码 Ubuntu 应用服务中间件
Jetson 环境安装(三):jetson nano配置ffmpeg和nginx(亲测)
本文介绍了在NVIDIA Jetson Nano上配置FFmpeg和Nginx的步骤,包括安装、配置和自启动设置。
717 1
Jetson 环境安装(三):jetson nano配置ffmpeg和nginx(亲测)
|
Ubuntu Shell API
Ubuntu 64系统编译android arm64-v8a 的openssl静态库libssl.a和libcrypto.a
Ubuntu 64系统编译android arm64-v8a 的openssl静态库libssl.a和libcrypto.a
|
Ubuntu 开发工具 Android开发
Repo下载、编译AOSP源码:基于Ubuntu 21.04,android-12.1.0_r27
文章记录了作者在Ubuntu 21.04服务器上配置环境、下载并编译基于Android 12.1.0_r27版本的AOSP源码的过程,包括解决编译过程中遇到的问题和错误处理方法。
1158 0
|
Ubuntu Linux 开发工具
建立ubuntu下基于eclipse的android开发环境
建立ubuntu下基于eclipse的android开发环境
180 1

热门文章

最新文章