(一)音视频开发-编译ffmpeg3.4并交叉编译fdk_aac_0.1.6和x264

1.准备环境

1)ubuntu18.04

2)安装ndk,我选择的版本是android-r20b,因为clang编译更友好😀

3)下载ffmpeg,点击这里,下载fdk_aac,点击这里,下载x264。这里要说明一下,ffmpeg对fdk_aac的版本是有要求的,比如我们最常用的ffmpeg 3.4.x匹配的版本在fdk_aac_0.1.6及之前版本,推荐0.1.6。如果是比较新的ffmpeg 4.x,那么推荐交叉编译的版本在fdk_aac_2.0.0及以后,推荐上最新。x264我实际测试没有版本限制。

4)下载ffmpeg之后解压到任意目录,推荐在home/用户名/ffmpeg3.4,进入ffmpeg3.4目录,首先修改configure文件,将

  1. SLIBNAME_WITH_MAJOR='$(SLIBNAME).$(LIBMAJOR)'

  2. LIB_INSTALL_EXTRA_CMD='$$(RANLIB)"$(LIBDIR)/$(LIBNAME)"'

  3. SLIB_INSTALL_NAME='$(SLIBNAME_WITH_VERSION)'

  4. SLIB_INSTALL_LINKS='$(SLIBNAME_WITH_MAJOR)$(SLIBNAME)'

替换为下面内容:

  1. SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'

  2. LIB_INSTALL_EXTRA_CMD='$$(RANLIB)"$(LIBDIR)/$(LIBNAME)"'

  3. SLIB_INSTALL_NAME='$(SLIBNAME_WITH_MAJOR)'

  4. SLIB_INSTALL_LINKS='$(SLIBNAME)'

运行./configure,会自动配置,可能会出现

nasm/yasm not found or too old. Use --disable-x86asm for a crippled build.

这样的报错。

没关系,直接sudo apt-get install yasm。

再次运行./configure,成功生成配置文件。

5) 将fdk_aac以及x264压缩包文件解压至fmpeg3.4根目录下,分别命名为fdk-aac-0.1.6

和x264-master(也可以取其他名字,用这两个,后面就不需要修改脚本文件配置了)

工程目录如图所示,到这里已经成功一半了😀

6)在ffmpeg3.4根目录运行./build_android_all.sh,耐心等待,由于默认是全平台编译,所以会比较慢。如果你不需要所有平台的库,那么可以修改build_android_ffmpeg_all.sh中的红色字体部分

for arch in armeabi-v7a arm64-v8a x86 x86_64
do
    bash build_android_fdkaac.sh $arch
done

缩小至自己需要的平台范围并再次执行./build_android_all.sh。

注:目前的ffmpeg已经不需要修改类似B0到b0的变量定义错误,应该是在更新中修复了。可以放心直接编译

别忘了最最重要的,贴出编译脚本:

build_android_all.sh

bash build_android_x264_all.sh
bash build_android_fdkaac_all.sh
bash build_android_ffmpeg_all.sh

 build_android_x264_all.sh

for arch in armeabi-v7a arm64-v8a x86 x86_64
do
    bash build_android_x264.sh $arch
done

 build_android_x264.sh

#!/bin/bash

ARCH=$1

# 导入配置文件
source config.sh $ARCH
# 输出路径
LIBS_DIR=$(cd `dirname $0`; pwd)/libs/libx264
echo "LIBS_DIR="$LIBS_DIR

# x264源码路径
cd x264-master

export CC=$CC
export CXX=$CXX
export CXXFLAGS=$FF_EXTRA_CFLAGS
export CFLAGS=$FF_CFLAGS
export AR="${CROSS_PREFIX}ar"
export LD="${CROSS_PREFIX}ld"
export AS="${CROSS_PREFIX}as"
export NM="${CROSS_COMPILE}nm"
export STRIP="${CROSS_COMPILE}strip"
export RANLIB="${CROSS_COMPILE}ranlib"

PREFIX=$LIBS_DIR/$AOSP_ABI

export HOST=$HOST
export CROSS_PREFIX=$CROSS_PREFIX
export SYS_ROOT=$SYS_ROOT
export FF_CFLAGS=$FF_CFLAGS

./configure --prefix=$PREFIX \
--enable-static \
--enable-pic \
--disable-cli \
--disable-asm \
--host=$HOST \
--cross-prefix=$CROSS_PREFIX \
--sysroot=$SYS_ROOT \
--extra-cflags="$FF_CFLAGS" \
--extra-ldflags=""

make clean
make -j2
make install

cd ..

 build_android_fdkaac_all.sh

for arch in armeabi-v7a arm64-v8a x86 x86_64
do
    bash build_android_fdkaac.sh $arch
done

build_android_fdkaac.sh

#!/bin/bash

ARCH=$1

source config.sh $ARCH
LIBS_DIR=$(cd `dirname $0`; pwd)/libs/libfdk-aac
#fdk-aac源码路径
cd fdk-aac-0.1.6


PREFIX=$LIBS_DIR/$AOSP_ABI
echo "PREFIX="$PREFIX

export CC="$CC"
export CXX="$CXX"
export CFLAGS="$FF_CFLAGS"
export CXXFLAGS="$FF_EXTRA_CFLAGS"
# x86架构源码中使用了math库所以必须链接
export LDFLAGS="-lm"
export AR="${CROSS_PREFIX}ar"
export LD="${CROSS_PREFIX}ld"
export AS="${CROSS_PREFIX}as"


./configure \
--prefix=$PREFIX \
--target=android \
--with-sysroot=$SYS_ROOT \
--enable-static \
--disable-shared \
--host=$HOST 


make clean
make -j2
make install

cd ..

 build_android_ffmpeg_all.sh

# x86 x86_64
for arch in armeabi-v7a arm64-v8a x86 x86_64
do
    bash build_android_ffmpeg.sh $arch
done

bash build_android_ffmpeg.sh

#!/bin/bash
ARCH=$1

source config.sh $ARCH
NOW_DIR=$(cd `dirname $0`; pwd)
LIBS_DIR=$NOW_DIR




# 输出路径
PREFIX=$LIBS_DIR/android/$AOSP_ABI

# 头文件目录
FDK_INCLUDE=$LIBS_DIR/libs/libfdk-aac/$AOSP_ABI/include
# 库文件目录
FDK_LIB=$LIBS_DIR/libs/libfdk-aac/$AOSP_ABI/lib
X264_INCLUDE=$LIBS_DIR/libs/libx264/$AOSP_ABI/include
X264_LIB=$LIBS_DIR/libs/libx264/$AOSP_ABI/lib

./configure \
--target-os=android \
--prefix=$PREFIX \
--enable-cross-compile \
--disable-runtime-cpudetect \
--disable-asm \
--arch=$AOSP_ARCH \
--cc=$CC \
--cxx=$CXX \
--cross-prefix=$CROSS_PREFIX \
--extra-cflags="-I$X264_INCLUDE  -I$FDK_INCLUDE  $FF_CFLAGS" \
--extra-cxxflags="$FF_EXTRA_CFLAGS" \
--extra-ldflags="-L$X264_LIB -L$FDK_LIB" \
--extra-libs=-lm \
--sysroot=$SYS_ROOT \
--disable-static \
--enable-shared \
--enable-jni \
--enable-mediacodec \
--enable-pic \
--enable-gpl \
--disable-indev=v4l2 \
--enable-libx264 \
--enable-nonfree \
--enable-neon \
--enable-libfdk_aac
make clean
make -j4
make install

完结撒花.....

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值