AAC编码
如果说目前H.264是视频CODEC的实际霸主,那么AAC就是音频CODEC的女王。主流的音视频格式都是H.264搭配AAC,无论是非实时的媒体文件还是实时的媒体流。
2. AAC历史
Advanced Audio Coding (AAC) 是一个有损压缩的音频编码集(其实新的编码工具也支持无损)。
其设计目标是替代原有MP3编码标准,在与MP3在相似的码率下希望质量优于MP3。这一目标已达到并且由ISO和IEC标准组织标准化在MPEG-2和MPEG-4中。
AAC已被广泛支持并应用到各种设备和系统中 YouTube, iPhone, iPod, iPad, Nintendo DSi, Nintendo 3DS, iTunes,
DivX Plus Web Player and PlayStation 3. It is supported on PlayStation Vita,
Wii (with the Photo Channel 1.1 update installed), Sony Walkman MP3 series and
later, Android and BlackBerry等等。
1997年,AAC第一次出现在标准MPEG-2 Part 7,(ISO/IEC 13818-7:1997)。和视频CODEC标准类似,AAC在MPEG-2 Part 7就有三个profiles他们分别是。
l Low-Complexity profile
(AAC-LC / LC-AAC)
l Main profile (AAC Main)
l Scalable Sampling Rate
profile (AAC-SSR)
从此可知AAC-LC出现最早,所以AAC-LC的应用最广泛,兼容性最好。
1999年, AAC从原有标准升级并且合入标准MPEG-4
Part 3(ISO/IEC
14496-3:1999)
这次升级一个重要变化是引入Audio Object Types(AOT)并且把AOT概念合并到profiles中。这时profile也变成4个。
l Main (which includes most of the MPEG-4 Audio Object Types)
l Scalable (AAC LC, AAC LTP, CELP, HVXC, TwinVQ, Wavetable Synthesis,
TTSI),
l Speech (CELP, HVXC, TTSI)
l Low Rate Synthesis (Wavetable Synthesis, TTSI)合成语音。
2000年,版本更新到2,MPEG-4 Audio
Version 2 (ISO/IEC 14496-3:1999/Amd 1:2000),标准定义了一种新的AOT, 低时延AAC,the low delay AAC
(AAC-LD)。
2001年,标准化High-Efficiency Advanced Audio Coding (HE-AAC) ISO/IEC 14496-3:2001。
2003年,标准化HE-AAC v2 Profile (AAC LC with SBR and Parametric Stereo) ISO/IEC
14496-3:2005
目前AAC的标准化的版本是 ISO/IEC 14496-3:2009。
从上面标准化历史可知,AAC不在一单纯的一个编码器了,而是一个庞大的音频编码工具集合。
3. AOT
AOT就是MPEG-4 Audio Object Types的缩写。能力集协商时用的是AOT ID。
也正是由于AAC的AOT繁多,导致识别使用AAC的用户很困扰。
AAC-LC 可认为是AOT为2的AAC。
下表是AOT的对应表。




4. MPEG-4 Audio Profiles
MPEG-4在音频编码方向对音频能力集合的描述称为Audio Profiles,音频能力描述基于AOT。


5. AAC-LC
基于AAC-LC的普遍和重要性,虽然上面有介绍,这里还是单独列出来。
Advanced Audio Coding Low-Complexity,(AAC-LC / LC-AAC)格式是MPEG-2格式,设计用于数字电视。AAC-LC用于存储空间和计算能力有限的情况。这种类型没有使用预测和增益控制这两种工具,瞬时噪声整形的阶数也比较低。
AAC-LC是充分利用心理声学原理,对人类对音频信号的感知存在不相干性和统计冗余的特性,最大程度的减少用于表达信号的比特数据 ,实现音频信号快速有效地压缩,而不再追求输出信号和原始信号相似度。
AAC-LC的重要技术点有如下一些。
Temporal Noise Shaping:瞬时噪声整形是用来控制量化噪声的瞬时形态,解决掩蔽阈值和量化噪声的错误匹配的问题。TNS利用时频对偶性,即时域平稳的信号会在频域上变比剧烈,而频域平稳的信号会在时域上变化剧烈。对时域的瞬态信号可以对频谱系数进行预测编码。对频谱系数进行预测,可以及时调节量化器以适应输入信号的时域状态,可以有效的控制量化噪声,
Intensity Stereo:利用心理声学原理提高编码效率的一种方法。由于人耳对高频信号的相位不敏感,只要信号的能量和频谱相似,在感知上没有什么区别,所以当一对声道的信号相关性较高时,可以对高频部分进行一定的处理,只在一个声道中编码传输数据,而不会影响解码后的重建音质。
AAC-LC把6kHz作为声强立体声处理的起始频率,在这个频率上的都进行声强立体声处理。计算出左右声道各个子带的能量和总能量,然后计算左声道能量和总能量的比值并换算成一个强度因子,按照这个强度因子对了带内的所有频谱进行左右声道求和并归一化,右声道的数据则全部置零,这样只需要对左声道数据进行量化编码。
Perceptual Noise Substitution:感知噪声替代用于频谱成分分类似噪声(功率谱密度是均匀的)时,用人造噪声代替。当判断某个频带需要进行感知噪声替代后,只用把该频带的能量作为参数编码传输,而不需要对子带内的频谱值进行编码,解码时解出子带能量和随机矢量生成函数产生的类似噪声。
Middle/Side:立体声编码,是利用一对声道的信号之间的相关性去冗余,降低编码比特率的方法。AAC-LD编码器中对左右声道的数据相关性较大时,可以用Middle=(L+R)/ 2,Side = (L-R)/2来代替左右声道的数据进行编码。这样能量集中在一个声道数据中,而另外一个声道只要少量比特数据,这样实现了数据压缩。
5. AAC-LD
5. AAC-LD
既然说了AAC-LC,再说说AAC-LD
AAC是感知型音频编解码器,可以在较低的比特率下提供很高质量的主观音质。但是这样的编解码器在低比特率下的算法延时往往超过100ms,所以并不适合实时的双向通信。而基于G.722的语音编解码方案因为其较小的算法延时而适合于双向通信。但是这种基于语音的编解码方案只能针对语音信号提供较好的主观质量,并不适合更为复杂的音频信号,而且即使在很高的比特率下,该编解码方案给出的结果也很难达到良好的音质。
常用的感知音频编码器的延时包括:
Framing delay:进行块变换需要的块长;
Filterbank delay:分析-综合滤波器所需要的延时;
Look-ahead delay for block switching:块切换为检测瞬态而需要的延时;
Use of bit reservoir:比特池大小相对于平均比特率所需要的延时。
总延时计算公式:


如下面的AAC-LC为例:


在AAC-LD中,为了减少延时,将原来的1024的帧长改为512;没有了窗切换功能,减少了为进行窗切换所需要的前瞻延时;同时为了增强对瞬态信号的编码质量,引入了窗型切换机制,窗型包括一般的SINE窗和一个少重叠的窗,该窗与后面的窗有很少的重叠,这样通过对TNS工具的优化来消除瞬态信号产生的预回声效应。
MPEG-4 Low Delay Audio Coder (AAC-LD)是直接源于MPEG-2 AAC,并且结合了感知音频编码和双向通信必须的低延时要求。它可以保证最大的20ms的算法延时和包括语音和音乐的信号的很好的音质。现在的MPEG-4 AAC LD支持最大采样率48kHz,最大声道数目是2(可以扩展为多声道)。
6. AAC封装格式

以常用的两个格式为例。
ADIF (Audio Data Interchange Format)
ADIF是MPEG2规定的AAC音频封装格式。这种格式的特征是可以确定的找到这个音频数据的开始,不需进行在音频数据流中间开始的解码,即它的解码必须在明确定义的开始处进行。故这种格式常用在磁盘文件中。


ADTS(Audio Data Transport Stream)
这种格式的特征是它是一个有同步字的比特流,解码可以在这个流中任何位置开始。它的特征是数据流格式。
帧同步目的在于找出帧头在比特流中的位置,aac ADTS格式的帧头同步字为12比特的“1111 1111 1111”.ADTS的头信息为两部分组成,其一为固定头信息,紧接着是可变头信息。固定头信息中的数据每一帧都相同,而可变头信息则在帧与帧之间可变。
固定头信息


可变头信息


合起来就如下表


7. AAC版权和专利许可
AAC的文件和码流是不涉及版权和专利许可的问题,所以AAC文件比MP3格式更容易合法传播和分发。AAC的版权和专利许可仅针对商业目的AAC编解码器的厂商和开发者,所以FFMPEG和FAAC等包含AAC编解码器软件以开源的形式发布。
AAC的版权许可为5年一期,期满重新评估后可以继续5年一个周期。
AAC的版权费采取一次性入门费15000美元,不需要每年继费。小企业的入门费可降为1000美元。对小企业的定义是少于15人雇员并且年收入少于一百万美元。
AAC Licensors
l AT&T Corp.
l Dolby Laboratories, Inc.
l Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung, e.V.
l Koninklijke Philips N.V.
l Microsoft Corporation
l NEC Corporation
l NTT DOCOMO, INC.
l Orange SA
l Panasonic Corporation
l Telefonaktiebolaget LM Ericsson
8.最后
AAC-LC 是什么格式?和 AAC 有什么区别?
AAC是标准化在MPEG2和MPEG4的音频编码集合的总称。
AAC-LC是标准化AAC中AOT为2的一种音频编解码,它的特点是运算复杂度低,对内存占用小,标准化的时间早,对通性好,兼容性好,使用广。不足是算法时延高,不利于实时的音频通讯。
AAC编码的更多相关文章
- C++实现RTMP协议发送H.264编码及AAC编码的音视频
http://www.cnblogs.com/haibindev/archive/2011/12/29/2305712.html C++实现RTMP协议发送H.264编码及AAC编码的音视频 RTMP ...
- C++实现RTMP协议发送H.264编码及AAC编码的音视频(转)
C++实现RTMP协议发送H.264编码及AAC编码的音视频(转) RTMP(Real Time Messaging Protocol)是专门用来传输音视频数据的流媒体协议,最初由Macromedia ...
- 【转】C++实现RTMP协议发送H.264编码及AAC编码的音视频
RTMP(Real Time Messaging Protocol)是专门用来传输音视频数据的流媒体协议,最初由Macromedia 公司创建,后来归Adobe公司所有,是一种私有协议,主要用来联系F ...
- RTMP协议发送H.264编码及AAC编码的音视频,实现摄像头直播
RTMP(Real Time Messaging Protocol)是专门用来传输音视频数据的流媒体协议,最初由Macromedia 公司创建,后来归Adobe公司所有,是一种私有协议,主要用来联系F ...
- 采集音频和摄像头视频并实时H264编码及AAC编码[转]
0. 前言 我在前两篇文章中写了DirectShow捕获音视频然后生成avi,再进行264编码的方法.那种方法有一些局限性,不适合实时性质的应用,如:视频会议.视频聊天.视频监控等.本文所使用的技术, ...
- 采集音频和摄像头视频并实时H264编码及AAC编码
转自:http://www.cnblogs.com/haibindev/archive/2011/11/10/2244442.html 0. 前言 我在前两篇文章中写了DirectShow捕获音视频然 ...
- 音频AAC编码浅析
/* * unsigned long nSampleRate, // 采样率,单位是bps * unsigned long nChannels, // 声道,1为单声道,2为双声道 * unsigne ...
- Ffmpeg AAC 编码错误 Input contains (near) NaN/+-Inf
Ffmpeg AAC编码 如果传入参Frame的Sample Format 为 AV_SAMPLE_FMT_S16,会出现 错误提示 Input contains (near) NaN/+-Inf,需 ...
- (转)C++实现RTMP协议发送H.264编码及AAC编码的音视频,摄像头直播
转:http://www.cnblogs.com/haibindev/archive/2011/12/29/2305712.html C++实现RTMP协议发送H.264编码及AAC编码的音视频 RT ...
- 开发RTSP 直播软件 H264 AAC 编码
上一篇对摄像头预览,拍照做了大概的介绍,现在已经可以拿到视频帧了,在加上 RTSP 实现,就是直播的雏形,当然还要加上一些 WEB 管理和手机平台的支援,就是一整套直播软件. 介绍一些基础概念:RTP ...
随机推荐
- excel的常用技巧
如何将EXCEL表中SHEET的名字导出 (一)office的操作方法 按下ATL+F11 菜单:插入-模块 复制下面代码,然后按F5运行.会在最前面加张总表,显示工作表名称. Sub mulu( ...
- C++中的栈内存和堆内存的区别
数据结构中的堆与栈: 栈:是一种连续储存的数据结构,具有先进后出的性质.通常的操作有入栈(圧栈).出栈和栈顶元素.想要读取栈中的某个元素,就要将其之前的所有元素出栈才能完成.类比现实中的箱子一样. 堆 ...
- 不再混淆,一次搞懂!图解flexbox十余个属性
原文首发于个人博客:不再混淆,一次搞懂!图解flexbox十余个属性 flexbox的发明简直是csser的一大福音,终于可以不再需要为垂直居中一个元素而绞尽脑汁了.同时它还能够实现弹性布局,可以说没 ...
- 【uoj#143】[UER #5]万圣节的数列 构造
题目描述 给出一个的数列,将其重新排列,使得其等差子序列的数目最小.输出一种可能的排列后的数列. 题解 构造 那天和 EdwardFrog 讨论 bzoj2124 的构造时突然有的灵感,最后发现就是这 ...
- NOIP2011
DAY1 铺地毯 (carpet.cpp/c/pas) 模拟 倒序离线处理 program carpet; var l,w:..,..] of longint; n,i,a,b,g,k,x,y:lon ...
- BZOJ 4520: [Cqoi2016]K远点对
4520: [Cqoi2016]K远点对 Time Limit: 30 Sec Memory Limit: 512 MBSubmit: 638 Solved: 340[Submit][Status ...
- ThinkPHP 5.x远程命令执行漏洞分析与复现
0x00 前言 ThinkPHP官方2018年12月9日发布重要的安全更新,修复了一个严重的远程代码执行漏洞.该更新主要涉及一个安全更新,由于框架对控制器名没有进行足够的检测会导致在没有开启强制路由的 ...
- java的序列化流和打印流
对象操作流(序列化流) 每次读取和写出的都是JavaBean对象. 序列化:将对象写入到文件中的过程 反序列化:从文件中读取对象到程序的过程 transient: 标识瞬态,序列化的时候,该修饰符修饰 ...
- python安装pip、numpy、scipy、statsmodels、pandas、matplotlib等
1.安装python 2.安装numpy(开源的数值计算扩展,可用来存储和处理大型矩阵,比Python自身的嵌套列表(nested list structure)结构要高效的多. 很多库都是以此库为依 ...
- P2684 搞清洁
P2684 搞清洁 给定一段区间及若干个线段, 求使区间被完全覆盖所需的最少线段数 错误日志: 菜 Solution 补一下贪心吧 这题最小线段覆盖 首先按照左端点排序 现在对于所有左区间到达目前已覆 ...