ffmpeg编译faac小结

这两周都在为安卓平台编译带aac编码功能的ffmpeg版本。

截止今日,未编译出满意版本,时间已经过去一周有余,顿感无地自容。

我的环境,ndk-r10e,ubuntu16.04lts  faac1.28 x264(应该是最新版,x264的加入完全没问题),ffmpeg版本还在测试中,唯一成功过的是ffmpeg-n1.2.4。

具体编译脚本与环境等我编译成功后再回来加上。希望有大神看到我的环境可以指点一下,有没有不对之处。


我这一周不断测试编译,各种版本的搭配,试过fdk-aac0.1.5/fdk-aac0.1.4与ffmpeg的多个版本搭配,试过faac1.28与ffmpeg的多个版本搭配。其中fdk-aac的还没有成功过,faac的唯一成功过的一次是ffmpeg-n1.2.4。但比较无奈的是该版本太低,无法与现有项目中的众多api相匹配,只能再重新尝试。

心得一,在ffmpeg的3.++之后的版本我试过几个,使用.configure --help里面已经完全找不到faac的编译选项了,说明ffmpeg在高版本确实是不再支持faac,转而支持fdk-aac。无奈的是fdk-aac的编译一直有各种问题,从未成功。

心得二,在不断的版本尝试中,我一开始是从网上不断的下载各种版本堆放在我的虚拟机里面,不仅版本杂乱无章,随着各种中间文件的生成,占用空间开始迅速变的巨大,之后猛然发现我根本不需如此。版本切换git足够了,我想这应该契合了为什么这么多开源项目都会选择了git来做版本管理,这似乎很方便各种版本之间切换编译的操作。


#####后续

faac 1.28编译进ffmpeg的问题已经基本明了了。

ffmpeg在3.0以下我编译了ffmpeg 2.8 \ ffmpeg 2.7 \ ffmpeg 2.4都能成功编译,且编译出来的so能够被安卓代码引用正确实现对pcm音频数据编码到aac的过程。

ffmpeg 3.1和3.2的版本我也试过,同样可以正常编译,但是编译出来之后,在打开aac编码器时会返回-22的错误,我想应该是ffmpeg已经对faac不支持了(虽然ffmpeg3.1的configure --help里面还存在faac的编译选项)。

不出意外我基本可以肯定ffmpeg3.0是一个大的版本迁移,在这过程中faac的支持已经被移除。尽管我编译出了不少的版本,然而却没有我想要的。我想要的是ffmpeg3.1以上的api加aac编码能力。

下面是我的编译脚本。

#!/bin/bash
export VERSION=4.8
export NDK=/home/wall/android/android-ndk-r10e
export PREBUILT=$NDK/toolchains/arm-linux-androideabi-$VERSION/prebuilt/linux-x86_64
export PLATFORM=$NDK/platforms/android-14/arch-arm
export FFMPEG_ROOT=../ffmpeg
export X264_ROOT=../x264
export PREFIX=../ajiangwang_f32_fdk
export ELIB="$PREFIX/lib"
export FAAC_ROOT=../faac-1.28
function build_x264
{
cd $X264_ROOT
pwd
./configure --enable-static \
--prefix=$PREFIX \
--enable-shared \
--enable-pic \
--disable-asm \
--disable-cli \
--host=arm-linux \
--cross-prefix=$PREBUILT/bin/arm-linux-androideabi- \
--sysroot=$PLATFORM
make
cp libx264.a $ELIB
cd -
}
function build_faac
{
cd $FAAC_ROOT
pwd
CFLAGS="-fpic -DANDROID -fpic -mthumb-interwork -ffunction-sections -funwind-tables -fstack-protector -fno-short-enums -D__ARM_ARCH_5__ -D__ARM_ARCH_5T__ -D__ARM_ARCH_5E__ -D__ARM_ARCH_5TE__ -Wno-psabi -march=armv5te -mtune=xscale -msoft-float -mthumb -Os -fomit-frame-pointer -fno-strict-aliasing -finline-limit=64 -DANDROID -Wa,--noexecstack -MMD -MP "
CROSS_COMPILE=$PREBUILT/bin/arm-linux-androideabi-
export CPPFLAGS="$CFLAGS"
export CFLAGS="$CFLAGS"
export CXXFLAGS="$CFLAGS"
export CXX="${CROSS_COMPILE}g++ --sysroot=${PLATFORM}"
export LDFLAGS="$LDFLAGS"
export CC="${CROSS_COMPILE}gcc --sysroot=${PLATFORM}"
export NM="${CROSS_COMPILE}nm"
export STRIP="${CROSS_COMPILE}strip"
export RANLIB="${CROSS_COMPILE}ranlib"
export AR="${CROSS_COMPILE}ar"
./configure --program-prefix=$PREFIX \
--host=arm-linux
make
cp ./libfaac/.libs/libfaac.a $ELIB
cd -
}
function build_one
{
cd $FFMPEG_ROOT
./configure --target-os=linux \
--prefix=$PREFIX \
--disable-static \
--enable-shared \
--enable-cross-compile \
--enable-runtime-cpudetect \
--disable-asm \
--arch=arm \
--cc=$PREBUILT/bin/arm-linux-androideabi-gcc \
--cross-prefix=$PREBUILT/bin/arm-linux-androideabi- \
--disable-stripping \
--nm=$PREBUILT/bin/arm-linux-androideabi-nm \
--sysroot=$PLATFORM \
--enable-nonfree \
--enable-version3 \
--enable-gpl \
--disable-doc \
--enable-avresample \
--enable-demuxer=rtsp \
--enable-muxer=rtsp \
--disable-ffplay \
--disable-ffserver \
--enable-ffmpeg \
--disable-ffprobe \
--enable-libfdk-aac \
--enable-encoder=libx264 \
--enable-decoder=h264 \
--enable-protocol=rtp \
--enable-encoder=libfdk-aac \
--enable-decoder=aac \
--enable-hwaccels \
--enable-zlib \
--disable-devices \
--disable-avdevice \
--extra-cflags="-I$X264_ROOT -I$PREFIX/include -fPIC -DANDROID -D__thumb__ -mthumb -Wfatal-errors -Wno-deprecated -mfloat-abi=softfp -mfpu=vfpv3-d16 -marm -march=armv7-a" \
--extra-ldflags="-L$ELIB"
make clean
make -j4
make install
}
mkdir -p $ELIB
build_faac
build_x264
build_one


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值