近期需要做AAC编码,看了下几个开源的AAC编码库,综合考虑,最终选了fdk aac编码库。主要有以下几点原因:

1. 开源、音质好(目前认为是开源AAC编码器里音质最好的)
2. 音质,顺序大概是libfdk_aac>libfaac>aac>libvo_aacenc
3. 支持LC-AAC、HE-AAC、HE-AAC V2等多种编码


下载链接

http://www.linuxfromscratch.org/blfs/view/svn/multimedia/fdk-aac.html

编译安装

目前是在ubuntu下运行程序。我使用的是Ubuntu 14.04,其他linux发行版类似。将下载的文件解压,Terminal进入解压目录,“./configure”执行默认配置,然后“make”,最后“make install”即可。

如果需要在开发板上运行,可参考下面:

cd fdk-aac-0.1.6export CC=arm-linux-gcc
export CXX=arm-linux-g++./configure  --prefix=/home/cwb/app/fdkaac --host=arm-linux

代码编写

使用FDK AAC库进行编码比较简单,主要是Encoder初始化和编码两大部分。

Encoder初始化:

1.调用aacEncOpen()来分配所需配置的编码器实例。函数原型:
aacEncOpen(HANDLE_AACENCODER *phAacEncoder, const UINT encModules, const UINT maxChannels)
    
2.调用aacEncoder_SetParam()来设置编码参数,AOT、采样率、通道模式、比特率和传输类型都是必需设置的。函数原型:
aacEncoder_SetParam(const HANDLE_AACENCODER hAacEncoder, const AACENC_PARAM param, const UINT value)
    
部分代码示例:

 if (aacEncoder_SetParam(paac_context->handle, AACENC_AOT, paac_context->aacenc_type) != AACENC_OK) {printf("Unable to set the AOT\n");goto error;}if (aacEncoder_SetParam(paac_context->handle, AACENC_SBR_MODE, paac_context->sbr_enable) != AACENC_OK) { printf("Unable to set the SBR MODE enable\n");goto error;}if (aacEncoder_SetParam(paac_context->handle, AACENC_SAMPLERATE, paac_context->sampleRate) != AACENC_OK) {printf("Unable to set the AOT\n");goto error;}if (aacEncoder_SetParam(paac_context->handle, AACENC_CHANNELMODE, paac_context->enc_ch) != AACENC_OK) {printf("Unable to set the channel mode\n");goto error;}if (aacEncoder_SetParam(paac_context->handle, AACENC_CHANNELORDER, paac_context->input_ch_order) != AACENC_OK) {printf("Unable to set the channel order\n");goto error;}if (aacEncoder_SetParam(paac_context->handle, AACENC_BITRATEMODE, paac_context->bit_rate_mode) != AACENC_OK) {printf("Unable to set the bit_rate_mode\n");goto error;}if (aacEncoder_SetParam(paac_context->handle, AACENC_BITRATE, paac_context->bit_rate) != AACENC_OK) {printf("Unable to set the bitrate\n");goto error;}if (aacEncoder_SetParam(paac_context->handle, AACENC_TRANSMUX, paac_context->aac_format) != AACENC_OK) {printf("Unable to set the ADTS transmux\n");goto error;}

3.用NULL参数调用aacEncEncode()来初始化编码器实例和现有的参数集。函数原型:    
aacEncEncode(const HANDLE_AACENCODER hAacEncoder, const AACENC_BufDesc *inBufDesc, const AACENC_BufDesc *outBufDesc, const AACENC_InArgs *inargs, AACENC_OutArgs *outargs)

部分代码示例:

 if (aacEncEncode(paac_context->handle, NULL, NULL, NULL, NULL) != AACENC_OK) {printf("Unable to initialize the encoder\n");goto error;}

4.调用aacEncInfo()获取关于当前编码器实例的信息。函数原型:
aacEncInfo(const HANDLE_AACENCODER hAacEncoder, AACENC_InfoStruct *pInfo)
        
部分代码示例:

 if (aacEncInfo(paac_context->handle, &info) != AACENC_OK) {printf("Unable to get the encoder info\n");goto error;}

编码部分:

4.在循环中对输入音频数据进行编码。并为aacEncEncode()提供输入/输出参数。将输出数据写入文件或音频设备。

5.调用aacEncClose()并销毁编码器实例。

部分代码示例:

 if ((aacEncEncode(paac_context->handle, &in_buf, &out_buf, &in_args, &out_args)) != AACENC_OK) {printf("Encoding aac failed\n");return -2;}if (out_args.numOutBytes == 0){printf("Encoding aac out size is 0\n");return -3;}fwrite(m_aacOutbuf, 1, out_args.numOutBytes, outstream);aacEncClose(&paac_context->handle);

我写的示例程序:

https://download.csdn.net/download/caiwenbin1101517886/10669383

【音频编码】AAC编码之FDK AAC相关推荐

  1. 音频之各种有损编码器的比较,AAC编码器之选择,频谱、差值比较,编码器下载

    音频有损编码有:aac,mp3,ogg(vobis),opus等.这里只讨论主流编码格式,aac编码器有faac,qaac,fhgacc,neroacc,fdkacc,falabaac等,其封装格式有 ...

  2. 采集音频和摄像头视频并实时H264编码及AAC编码

    0. 前言 我在前两篇文章中写了DirectShow捕获音视频然后生成avi,再进行264编码的方法.那种方法有一些局限性,不适合实时性质的应用,如:视频会议.视频聊天.视频监控等.本文所使用的技术, ...

  3. 采集音频和摄像头视频并实时H264编码及AAC编码[转]

    0. 前言 我在前两篇文章中写了DirectShow捕获音视频然后生成avi,再进行264编码的方法.那种方法有一些局限性,不适合实时性质的应用,如:视频会议.视频聊天.视频监控等.本文所使用的技术, ...

  4. 【Android RTMP】音频数据采集编码 ( FAAC 音频编码参数设置 | FAAC 编码器创建 | 获取编码器参数 | 设置 AAC 编码规格 | 设置编码器输入输出参数 )

    文章目录 一. 头文件.成员变量准备 二. 创建 FAAC 编码器 三. 获取并设置 FAAC 编码器参数 四. 设置 FAAC 编码器编码标准 五. 设置 FAAC 编码器 AAC 编码规格 六. ...

  5. 基于FFmpeg的音频编码(PCM数据编码成AAC android)

    概述 在Android上实现录音,并利用 FFmpeg将PCM数据编码成AAC. 详细 代码下载:http://www.demodashi.com/demo/10512.html 之前做的一个demo ...

  6. 相位测试音频mp3_苹果AirPods MAX耳机音质一大短板在哪里?蓝牙AAC编码品质讨论与测试 「Soomal」...

    AirPods Max是苹果发布不久的4399元售价定为比较高端的一款耳机,我们没有订购,因为订购后也得14周以后收货--太久了.我们今天发这篇文章是不是要云评测了?这里我们要重新复习一下蓝牙中的AA ...

  7. FFmpeg源码编译出支持音频AAC编码以及H264,H265编码的库

    先决条件: 需要安装msys2(是一个在windows中模拟linux操作系统的软件) 由于在linux中编译ffmpeg比较简单, 所以利用一下msys2, 直接去官网下载安装即可 需要安装visu ...

  8. Android使用AudioRecord录制PCM音频、PCM转AAC、使用MediaRecorder直接录制AAC编码音频

    Android为我们提供了两个音频处理的API:AudioRecord和MediaRecorder AudioRecord:偏底层的api MediaRecorder:对AudioRecord进行包装 ...

  9. 音频编解码·实战篇(1)PCM转至AAC(AAC编码)

    音频编解码·实战篇(1)PCM转至AAC(AAC编码) 作者:柳大·Poechant 博客:blog.csdn.net/poechant 邮箱:zhongchao.ustc@gmail.com 日期: ...

  10. AAC 编码基本说明

    Advanced Audio Coding (AAC) 是 MP3 的后继格式,它被定义於 MPEG-4 part 3 (ISO/IEC 14496-3).它通常使用在 MP4 容器内:对于音乐习惯上 ...

最新文章

  1. 物流系统高可用架构案例
  2. R语言ggplot2可视化将两个dataframe可视化的结果组合在一起实战:combining two plots from different data.frames
  3. 软考高项之沟通与干系人管理-背诵记忆
  4. 域名服务器(DNS)工作原理
  5. java web Jersey_使用CXF和Jersey框架来进行Java的WebService编程
  6. 电脑如何安装php文件夹在哪个文件夹,win7系统桌面文件在c盘哪个文件夹
  7. 阿里百度旷视商汤京东,AI大厂怎么看产业实践?
  8. JS面向对象的程序设计
  9. 【转】Google Chrome浏览器调试
  10. 使用js调用摄像头拍照
  11. ShFileOperation函数详解
  12. 电脑WindowsUDP53绕过校园网认证登陆(同时可进内外网教程)
  13. 「经济/商学/理财」简说
  14. L1-087 机工士姆斯塔迪奥 和 L1-048 矩阵A乘以B
  15. Solidity错误Stack Too Deep
  16. ESXI 7.0 安装教程
  17. GBASE 8C——SQL参考 5 全文检索
  18. 2021年电工(初级)考试题库及电工(初级)考试内容
  19. 背包问题C++(三种类型初涉)
  20. 有赞android电话面试,有赞校招面试总结

热门文章

  1. java实现浏览器下载excel文件
  2. C++读写tif文件
  3. QGis二次开发:预览几何图形,QgsRubberBand的应用
  4. ELK 通过 Rsyslog 收集 HaProxy 日志
  5. 本地IP地址使用域名访问
  6. c# winform 制作统计图
  7. 【大数据安全分析】图计算在安全方面的应用思考
  8. 架构设计的深入思考与总结——概述
  9. Android stuido中更改图片编辑软件
  10. Matplotlib数据可视化——图中图