音频编解码工具 FDK_AAC简介

一、简介

1.1 什么是 FDK-AAC?

        FDK-AAC(Fraunhofer Development Kit for Advanced Audio Coding)是一个用于音频编码和解码的软件开发工具包。该工具包基于 MPEG-2 和 MPEG-4 AAC 标准,并在各种设备和平台上实现了高效、高质量的音频编码和解码。

        FDK-AAC 支持多种音频编解码格式,包括 SBR、PS、HE-AAC、AAC-ELD 等。这些格式提供了更高的压缩率和更好的音质,使您可以为您的应用提供出色的音频体验。

1.2 FDK-AAC 可以用来做什么?

        由于其高质量和高效的特性,FDK-AAC 可以在多个领域中得到广泛应用:

  • 广播和流媒体服务:FDK-AAC 提供了高质量、低延迟的音频编码,可以用于广播和流媒体服务。
  • 媒体播放器:您可以使用 FDK-AAC 在您的媒体播放器中实现高效的音频解码功能,为用户提供更优质的音频体验。
  • 视频会议和语音通话:由于其低延迟和高质量的特点,FDK-AAC 也可以用于视频会议和语音通话应用中。
  • 游戏开发:在游戏开发中,FDK-AAC 可以帮助您在游戏中实现高效、高品质的音频效果。
  • FDK-AAC 的特点

1.3 FDK-AAC 主要特点:

  • 高质量和高效:FDK-AAC 提供了高质量和高效的音频编解码能力,使其成为许多音频处理场景的理想选择。
  • 支持多种格式:FDK-AAC 支持多种音频编解码格式,包括 SBR、PS、HE-AAC、AAC-ELD 等。
  • 跨平台支持:FDK-AAC 可以在多种操作系统上运行,包括 Windows、Linux、Mac OS X 等。
  • 易于集成:FDK-AAC 提供了简单的 API 接口,使得它很容易地与其他软件系统进行集成。
  • 免费开源:FDK-AAC 是免费的开源软件,您可以自由地使用、修改和分发它。

        如果您需要在您的应用程序中实现高质量的音频编解码功能,那么 FDK-AAC 就是您的理想选择。通过使用 FDK-AAC,您可以轻松地实现出色的音频体验,为您的用户提供更多的价值。

2. FDK-AAC 编译:

2.1 源码地址:

源码地址如下:

https://github.com/mstorsjo/fdk-aac

下载代码到本地,并切换到v2.0.1

git clone https://github.com/mstorsjo/fdk-aac.git

2.2 编译环境:

本人使用的MAC电脑进行编译,mac 版本号为: Mac os 12.6.7

编译前需要准备好ndk工具,NDK 版本为:/Users/Library/Android/sdk/ndk/21.0.6113669

2.3 编译脚本

在根目录下新建build_android.sh 文件,文件内容如下:

#!/bin/sh

# --- 脚本信息 Start ---
version="0.0.1(1)"
# --- 脚本信息 End ---


# --- 输入参数指定 Start ---
# lame库目录
libDir="/Users/xxx/Documents/projectc/fdk-aac"
# ndk目录
ndkDir="/Users/xxx/Library/Android/sdk/ndk/21.0.6113669"
# 输出的库目录
productRootDir="/Users/xxx/Documents/projectc/fdk-aac/android"
# 架构
archs="armeabi-v7a arm64-v8a x86 x86_64"
# api等级
androidApiLevel="21"
# --- 输入参数指定 End ---

for arch in ${archs}
do
    echo "comile arch: ${arch}"

    case $arch in
    armeabi-v7a)
        archHost="armv7a-linux-androideabi"
        crossCompile="arm-linux-androideabi"
    ;;

    arm64-v8a)
        archHost="aarch64-linux-android"
        crossCompile=${archHost}
    ;;

    x86)
        archHost="i686-linux-android"
        crossCompile=${archHost}
    ;;

    x86_64)
        archHost="x86_64-linux-android"
        crossCompile=${archHost}
    ;;
    *)  echo "Parameter is not valid."
        exit
    ;;
esac

export CC="${ndkDir}/toolchains/llvm/prebuilt/darwin-x86_64/bin/${archHost}${androidApiLevel}-clang"
export CXX="${ndkDir}/toolchains/llvm/prebuilt/darwin-x86_64/bin/${archHost}${androidApiLevel}-clang++"
prebuilt="${ndkDir}/toolchains/llvm/prebuilt/darwin-x86_64"
export AS=${prebuilt}/bin/${crossCompile}-as
export LD=${prebuilt}/bin/${crossCompile}-ld
export NM=${prebuilt}/bin/${crossCompile}-nm
export STRIP=${prebuilt}/bin/${crossCompile}-strip
export RANLIB=${prebuilt}/bin/${crossCompile}-ranlib
export AR=${prebuilt}/bin/${crossCompile}-ar

productDir="${productRootDir}/${arch}"
rm -rf ${productDir}
mkdir ${productDir}

cd ${libDir}

./autogen.sh
# config
./configure \
--host=${archHost} \
--enable-shared \
--disable-static \
--target=android \
--disable-frontend \
--enable-static \
--prefix="${productDir}"

# make
make clean
make -j8
make install


done

在根目录下运行如下命令:

./build_android.sh

        在编译的过程中会遇到如下问题:

libSBRdec/src/lpp_tran.cpp:122:10: fatal error: 'log/log.h' file not found
#include "log/log.h"
         ^~~~~~~~~~~
1 error generated.
make: *** [libSBRdec/src/lpp_tran.lo] Error 1
make: *** Waiting for unfinished jobs....
  CXX      libSBRdec/src/lpp_tran.lo
libSBRdec/src/lpp_tran.cpp:122:10: fatal error: 'log/log.h' file not found
#include "log/log.h"
         ^~~~~~~~~~~
1 error generated.
make: *** [libSBRdec/src/lpp_tran.lo] Error 1

        通过log可以看出 libSBRdec/src/lpp_tran.cpp文件中找不到“log/log.h"头文件,打开对应的文件,查找根log.h 相关的代码不多,都是打印log。于是将相关的代码注释掉,再次重新编译。可以正常运行;

//121行-123行代码如下:
#ifdef __ANDROID__
#include "log/log.h"
#endif

// ...
//339行到344行代码:

#ifdef __ANDROID__
  else {
    // Safetynet logging
    android_errorWriteLog(0x534e4554, "112160868");
  }
#endif

//...

//937-942行代码如下:
#ifdef __ANDROID__
  else {
    // Safetynet logging
    android_errorWriteLog(0x534e4554, "112160868");
  }
#endif

2.4 编译结果

编译完成以后,可以在android 目录下看到生成的头文件和动态库,如下:

 

三.参考文献:

1. FDK-AAC: 高质量音频编码库

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值