参考维基百科、知乎问题等资料对AAC格式进行总结,没有特别深入到细节,目的是让大家对AAC有一个总体的认识。
1.AAC是什么
高级音频编码(英语:Advanced Audio Coding,AAC),出现于1997年,基于MPEG-2的音频编码技术。由Fraunhofer IIS、杜比实验室、AT&T、Sony、Nokia等公司共同开发。2000年,MPEG-4标准出现后,AAC重新集成了其特性,加入了SBR技术和PS技术,为了区别于传统的MPEG-2 AAC又称为MPEG-4 AAC。
2.AAC封装格式
(参考鹏小鹕在问题AAC-LC 是什么格式?和 AAC 有什么区别?中的回答)
参考知乎的问题,AAC的音频文件格式常用的有以下两种:
- ADIF Audio Data Interchange Format 音频数据交换格式。这种格式的特征是可以确定的找到这个音频数据的开始,不需进行在音频数据流中间开始的解码,即它的解码必须在明确定义的开始处进行。故这种格式常用在磁盘文件中。
- ADTS Audio Data Transport Stream 音频数据传输流。这种格式的特征是它是一个有同步字的比特流,解码可以在这个流中任何位置开始。 简言之。ADIF只有一个文件头,ADTS每个包前面有一个文件头。
所以在直播等领域用的最多的还是ADTS。
ADTS的头信息分为两部分,一个是固定头信息、紧接着是可变头信息。 固定头信息
合起来
更直观一点:
所以必须要了解ADTS封装的格式,否则就不能自己讲AAC打包到ADTS。
在FFmpeg的adtsenc.c 中定义了adts_write_frame_header方法,可以写ADTS头,大家可以参考。
2.1.部分参数介绍
序号5的profile是AOT - 1,AOT参考这里
0: Null 1: AAC Main 2: AAC LC (Low Complexity) 3: AAC SSR (Scalable Sample Rate) 4: AAC LTP (Long Term Prediction) 5: SBR (Spectral Band Replication) 6: AAC Scalable 7: TwinVQ 8: CELP (Code Excited Linear Prediction) ....省略若干type
adts_buffer_fullness:0x7FF 说明是码率可变的码流。
3.AAC规格
因为AAC是一个庞大家族,他们共分为9种规格,以适应不同场合的需要,也正是由于AAC的规格(Profile)繁多,导致普通电脑用户感觉十分困扰: MPEG-2 AAC LC低复杂度规格(Low Complexity) MPEG-2 AAC Main主规格 MPEG-2 AAC SSR可变采样率规格(Scaleable Sample Rate) MPEG-4 AAC LC低复杂度规格(Low Complexity),现在的手机比较常见的MP4文件中的音频部分就包括了该规格音频文件 MPEG-4 AAC Main主规格 MPEG-4 AAC SSR可变采样率规格(Scaleable Sample Rate) MPEG-4 AAC LTP长时期预测规格(Long Term Predicition) MPEG-4 AAC LD低延迟规格(Low Delay) MPEG-4 AAC HE高效率规格(High Efficiency) 上述的规格中,主规格(Main)包含了除增益控制之外的全部功能,其音质最好,而低复杂度规格(LC)则是比较简单,没有了增益控制,但提高了编码效率,至“SSR”对“LC”规格大体是相同,但是多了增益的控制功能,另外,MPEG-4 AAC/LTP/LD/HE,都是用在低比特率下编码,特别是“HE”是有Nero AAC编码器支持,是近来常用的一种编码器,不过通常来说,Main规格和LC规格的音质相差不大,因此目前使用最多的AAC规格多数是“LC”规格,因为要考虑手机目前的内存能力未达合理水准。 MPEG-4 AAC LC(Low Complexity)是最常用的规格,我们叫“低复杂度规格”,我们简称“LC-AAC”,这种规格在中等码率的编码效率以及音质方面,都能找到平衡点。所谓中等码率,就是指:96kbps-192kbps之间的码率。因此,如果要使用LC-AAC规格,请尽可能把码率控制在之前说的那个区间内。 附加一篇参考文章:AAC规格(LC,HE,HEv2)及性能对比
参考
ADTS: