【网络通信 -- 直播】音频流编码 -- AAC 基础

【网络通信 -- 直播】音频流编码 -- AAC 基础

【1】AAC 简介

AAC(Advance Audio Coding),高级音频编码,1997 年产生,基于 MPEG-2 的音频编码技术,当时被称为 MPEG-2 AAC,作为 MPEG-2(MP2) 标准的延伸,随着 MPEG-4(MP4) 标准在 2000年的成型则 AAC 也称为 M4A;

【1.1】AAC 编码技术参数

  • 采样率范围,8KHz-96KHz 范围比较广,即一秒在模拟信号上进行多少次采样;
  • 码率,8kbps-576kbps,支持范围比较宽,在压缩比和质量上都能考虑到;
  • 声道,最多支持 48 个主声道,16 个低频声道,声音细节更丰富,音乐场景也用的多;
  • 采样精度,即一个采样点需要在计算机表示占用的字节数,一般用 2 字节 16bit 表示;

【1.2】AAC 编码的主要规格
根据不同的编码技术,AAC 的编码分为九种规格

  • 1. MPEG-2 AAC LC 低复杂度规格(Low Complexity),编码方式比较简单,没有增益控制,但是提高了编码效率,在中等码率的编码效率和音质方面,都能找到平衡点;
  • 2. MPEG-2 AAC Main 主规格
  • 3. MPEG-2 AAC SSR 可变采样率规格(Scaleable Sample Rate)
  • 4. MPEG-4 AAC LC 低复杂度规格(Low Complexity)
  • 5. MPEG-4 AAC Main 主规格,包含了除增益控制之外的全部功能,音质最好
  • 6. MPEG-4 AAC SSR 可变采样率规格(Scaleable Sample Rate)
  • 7. MPEG-4 AAC LTP 长时期预测规格(Long Term Prediction)
  • 8. MPEG-4 AAC LD 低延迟预测规格(Low Delay)
  • 9. MPEG-4 AAC HE 高效率规格(High Efficency),这种规格适合用于低码率编码,有 Nero-ACC 编码器支持,是一种成熟的商用编码器;

【1.3】AAC 编码方式特点

  • 1. AAC 高压缩比的音频编码方式,比 G7xx、MP3、AC3 系列的压缩比都高,并且质量和 CD 差不多,但是和比较新的 Opus 还是差点,不过 Opus 目前还未充分普及;
  • 2. AAC 采用了变换编码算法,采用了更高的滤波器组,这是压缩高的原因;
  • 3. AAC 为了提高压缩比,还采用了噪声重整,反向自适应预测,联合立体声和量化霍夫曼编码算法等新技术;
  • 4. AAC 支持了更多的采样率和比特率,支持了 1-48 个音轨和多达 15 个低频音轨,具有多种语言兼容能力;
  • 5. AAC 支持了更宽的声音频率范围,从 8KHz-96KHz 远宽于 MP3 的 16KHz-48KHz 范围;
  • 6. AAC 特殊的算法可以保有声音频率甚高和甚低频率,声音细节更丰富更清晰更接近原声;
  • 7. AAC 采用了优化算法,导致解码端简单,降低了解码端的处理复杂度;

【2】AAC 封装格式

【2.1】AAC 封装类型

  • 1. ADIF,Audio Data Interchange Format 音频数据交换格式,该格式一般应用在将音频通过写文件方式存储在磁盘里的场景,不能进行随机访问,不允许在文件中间开始进行解码;只有拿到整个文件时才能开始进行渲染播放;
  • 2. ADTS,Audio Data Transport Stream 音频数据传输流,该格式的特征是用同步字节进行将 AAC 音频截断,然后可以允许客户端在任何地方进行解码播放,适合网络传输场景;

【2.2】AAC 封装头字段

ADIF 的格式

adif_sequence
adif_header + byte_alignment + raw_data_stream
adif_header + byte_alignment + raw_data_block ... ... + raw_data_block

ADTS 的格式

adts_sequence
adts_frame + adts_frame + ... ... + adts_frame
adts_fixed_header + adts_variable_header + error_check + raw_data_block + error_check

ADTS 序列图示

ADTS 帧头各字段含义

字段长度 bits说明解释
Syncword12all bits must be 1总是0xFFF,代表一个ADTS帧的开始,作为分界符,用于同步每帧起始位置
ID 即 MPEG version10 for MPEG-4, 1 for MPEG-2一般用 0,因为都是属于 MPEG 的规范
Layer2always 0 
Protection Absent1set to 1 if there is no CRC and 0 if there is CRC 
Profile2the MPEG-4 Audio Object Type minus 1

代表使用哪个级别和规范的 AAC,其中 01 代表 Low Complexity(LC),

其中 profile 等于 Audio Object Type 的值减1

Sampling Frequency Index4MPEG-4 Sampling Frequency Index (15 is forbidden)采样率下标,由于 AAC 的采样率范围是 8KHz-96KHz,所以具体用那个,由该字段决定
Private Bit1set to 0 when encoding, ignore when decoding 
Channel Configuration3

MPEG-4 Channel Configuration 

(in the case of 0, the channel configuration is sent via an inband PCE)

通道配置即声道数,一般 2 表示立体声双声道
Originality copy1set to 0 when encoding, ignore when decoding 
Home1set to 0 when encoding, ignore when decoding 
Copyrighted identification bit1set to 0 when encoding, ignore when decoding 
Copyrighted identification Start1set to 0 when encoding, ignore when decoding 
Aac Frame Length13

this value must include 7 or 9 bytes of header length

FrameLength = (ProtectionAbsent == 1 ? 7 : 9) + size(AACFrame)

一个 ADTS 帧的长度包括 ADTS 头和 AAC 原始流
ADTS Buffer Fullness11buffer fullness

0x7FF 表示码率可变的码流

0x000 表示固定码率的码流

Number of AAC Frames2number of AAC frames (RDBs) in ADTS frame minus 1, for maximum compatibility always use 1 AAC frame per ADTS frame

ADTS 帧中有 number_of_raw_data_blocks_in_frame + 1 个 AAC 原始帧;

则 number_of_raw_data_blocks_in_frame == 0 表示 ADTS 帧中有一个 AAC 数据块;

(一个 AAC 原始帧包含一段时间内 1024 个采样及相关数据)

CRC16CRC if protection absent is 0校验字段,为可选字段

ADTS 各字段的取值范围

1. Profile 取值

Object Type IDAduio Object Type
1AAC Main
2AAC LC
3AAC LTR
4SBR
5AAC scalable

2. Sampling Frequency Index 采样率取值

3. Channel Configuration 通道数取值

ADTS 的 raw_data_block 基本码流组件,头部有 3 位标志位 id_syn_ele,指示六种不同类型的元素

参考致谢

本博客为博主的学习实践总结,并参考了众多博主的博文,在此表示感谢,博主若有不足之处,请批评指正。

【1】音视频封装格式:AAC音频基础和ADTS打包方案详解

【2】AAC格式简介

【3】AAC及其封装格式

【4】[原创]桓泽学音频编解码(3):AAC 系统算法分析

【5】AAC 文件解析及解码流程

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值