[置顶] FFmpeg学习—android 利用ffmpeg 集成libfdk-aac 录制aac 音频文件

时间:2022-03-09 19:44:27

ffmpeg 自带aac 编码器但是 不支持  AV_SAMPLE_FMT_S16 的采样,所以本文采用libfdk-aac 进行aac的编码,其中libfdk-aac编译步凑参考:http://blog.csdn.net/xiaibiancheng/article/details/69676965,ffmpeg 编译步凑参考:http://blog.csdn.net/xiaibiancheng/article/details/69445097,将libfdk-aac 集成到ffmpeg 的编译文件如下:

#!/bin/bash
NDK="/home/wh/android-ndk-r12b"
SYSROOT=$NDK/platforms/android-9/arch-arm/
TOOLCHAIN=$NDK/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64
function build_one
{
./configure --prefix=$PREFIX \
--disable-shared \
--enable-static \
--disable-debug \
--disable-doc \
--disable-ffplay \
--disable-ffprobe \
--disable-ffserver \
--disable-avdevice \
--disable-doc \
--disable-symver \
--disable-encoders \
--disable-muxers \
--disable-demuxers \
--disable-parsers \
--disable-bsfs \
--disable-protocols \
--disable-indevs \
--disable-outdevs \
--disable-filters \
--disable-decoders \
--enable-small \
--enable-asm \
--enable-nonfree \
--enable-neon \
--enable-gpl \
--enable-encoder=libfdk_aac \
--enable-decoder=libfdk_aac \
--enable-libfdk-aac \
--enable-muxer=adts \
--disable-encoder=libfaac \
--enable-protocol=file \
--cross-prefix=$TOOLCHAIN/bin/arm-linux-androideabi- \
--target-os=android \
--arch=arm \
--disable-libfaac \
--enable-cross-compile \
--sysroot=$SYSROOT \
--extra-cflags="-Os -fpic $ADDI_CFLAGS -mfpu=neon" \
--extra-ldflags="$ADDI_LDFLAGS" \
$ADDITIONAL_CONFIGURE_FLAG
make install
}
CPU=arm
PREFIX=$(pwd)/android/$CPU
ADDI_CFLAGS="-marm -I/home/wh/FFmpeg-n3.1.3/fdkacc/include/ -DANDROID"
ADDI_LDFLAGS="-L/home/wh/FFmpeg-n3.1.3/fdkacc/lib/"

CPU=armv5te
OPTIMIZE_CFLAGS="-marm -march=$CPU"
PREFIX=./android/$CPU
ADDITIONAL_CONFIGURE_FLAG="--disable-armv6 --disable-armv6t2 --disable-vfp --disable-neon"
build_one

#arm v7n
CPU=armv7-a
OPTIMIZE_CFLAGS="-marm -march=$CPU"
PREFIX=./android/$CPU
ADDITIONAL_CONFIGURE_FLAG=--enable-neon
build_one

将上述内容保存为以 .sh文件格式的文件放到ffmpeg 跟目录下  在终端执行  上述文件,将进行编译。

其中有几点说明如下:

--enable-encoder=libfdk_aac \  启用libfdk_aac编码器
--enable-decoder=libfdk_aac \  启用libfdk_aac解码器
--enable-libfdk-aac \ 注册libfdk-aac 解码器,不加这个是不会注册的,最终还是用的ffmpeg 默认的aac解码器
--enable-muxer=adts \           使用adts 容器格式,使用了这个才能创建aac文件格式数据


源码地址  https://github.com/XIAIBIANCHENG/AacRecord