【音频编码】AAC编码之FDK AAC
近期需要做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相关推荐
- 音频之各种有损编码器的比较,AAC编码器之选择,频谱、差值比较,编码器下载
音频有损编码有:aac,mp3,ogg(vobis),opus等.这里只讨论主流编码格式,aac编码器有faac,qaac,fhgacc,neroacc,fdkacc,falabaac等,其封装格式有 ...
- 采集音频和摄像头视频并实时H264编码及AAC编码
0. 前言 我在前两篇文章中写了DirectShow捕获音视频然后生成avi,再进行264编码的方法.那种方法有一些局限性,不适合实时性质的应用,如:视频会议.视频聊天.视频监控等.本文所使用的技术, ...
- 采集音频和摄像头视频并实时H264编码及AAC编码[转]
0. 前言 我在前两篇文章中写了DirectShow捕获音视频然后生成avi,再进行264编码的方法.那种方法有一些局限性,不适合实时性质的应用,如:视频会议.视频聊天.视频监控等.本文所使用的技术, ...
- 【Android RTMP】音频数据采集编码 ( FAAC 音频编码参数设置 | FAAC 编码器创建 | 获取编码器参数 | 设置 AAC 编码规格 | 设置编码器输入输出参数 )
文章目录 一. 头文件.成员变量准备 二. 创建 FAAC 编码器 三. 获取并设置 FAAC 编码器参数 四. 设置 FAAC 编码器编码标准 五. 设置 FAAC 编码器 AAC 编码规格 六. ...
- 基于FFmpeg的音频编码(PCM数据编码成AAC android)
概述 在Android上实现录音,并利用 FFmpeg将PCM数据编码成AAC. 详细 代码下载:http://www.demodashi.com/demo/10512.html 之前做的一个demo ...
- 相位测试音频mp3_苹果AirPods MAX耳机音质一大短板在哪里?蓝牙AAC编码品质讨论与测试 「Soomal」...
AirPods Max是苹果发布不久的4399元售价定为比较高端的一款耳机,我们没有订购,因为订购后也得14周以后收货--太久了.我们今天发这篇文章是不是要云评测了?这里我们要重新复习一下蓝牙中的AA ...
- FFmpeg源码编译出支持音频AAC编码以及H264,H265编码的库
先决条件: 需要安装msys2(是一个在windows中模拟linux操作系统的软件) 由于在linux中编译ffmpeg比较简单, 所以利用一下msys2, 直接去官网下载安装即可 需要安装visu ...
- Android使用AudioRecord录制PCM音频、PCM转AAC、使用MediaRecorder直接录制AAC编码音频
Android为我们提供了两个音频处理的API:AudioRecord和MediaRecorder AudioRecord:偏底层的api MediaRecorder:对AudioRecord进行包装 ...
- 音频编解码·实战篇(1)PCM转至AAC(AAC编码)
音频编解码·实战篇(1)PCM转至AAC(AAC编码) 作者:柳大·Poechant 博客:blog.csdn.net/poechant 邮箱:zhongchao.ustc@gmail.com 日期: ...
- AAC 编码基本说明
Advanced Audio Coding (AAC) 是 MP3 的后继格式,它被定义於 MPEG-4 part 3 (ISO/IEC 14496-3).它通常使用在 MP4 容器内:对于音乐习惯上 ...
最新文章
- 物流系统高可用架构案例
- R语言ggplot2可视化将两个dataframe可视化的结果组合在一起实战:combining two plots from different data.frames
- 软考高项之沟通与干系人管理-背诵记忆
- 域名服务器(DNS)工作原理
- java web Jersey_使用CXF和Jersey框架来进行Java的WebService编程
- 电脑如何安装php文件夹在哪个文件夹,win7系统桌面文件在c盘哪个文件夹
- 阿里百度旷视商汤京东,AI大厂怎么看产业实践?
- JS面向对象的程序设计
- 【转】Google Chrome浏览器调试
- 使用js调用摄像头拍照
- ShFileOperation函数详解
- 电脑WindowsUDP53绕过校园网认证登陆(同时可进内外网教程)
- 「经济/商学/理财」简说
- L1-087 机工士姆斯塔迪奥 和 L1-048 矩阵A乘以B
- Solidity错误Stack Too Deep
- ESXI 7.0 安装教程
- GBASE 8C——SQL参考 5 全文检索
- 2021年电工(初级)考试题库及电工(初级)考试内容
- 背包问题C++(三种类型初涉)
- 有赞android电话面试,有赞校招面试总结