【网络通信 -- 直播】音频流编码 -- 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 的格式

【网络通信 -- 直播】音频流编码 -- AAC 基础_第1张图片

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

ADTS 的格式

【网络通信 -- 直播】音频流编码 -- AAC 基础_第2张图片

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

ADTS 序列图示

【网络通信 -- 直播】音频流编码 -- AAC 基础_第3张图片

ADTS 帧头各字段含义

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

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

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

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

MPEG-4 Channel Configuration 

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

通道配置即声道数,一般 2 表示立体声双声道
Originality copy 1 set to 0 when encoding, ignore when decoding  
Home 1 set to 0 when encoding, ignore when decoding  
Copyrighted identification bit 1 set to 0 when encoding, ignore when decoding  
Copyrighted identification Start 1 set to 0 when encoding, ignore when decoding  
Aac Frame Length 13

this value must include 7 or 9 bytes of header length

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

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

0x7FF 表示码率可变的码流

0x000 表示固定码率的码流

Number of AAC Frames 2 number 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 个采样及相关数据)

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

ADTS 各字段的取值范围

1. Profile 取值

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

2. Sampling Frequency Index 采样率取值

【网络通信 -- 直播】音频流编码 -- AAC 基础_第4张图片

3. Channel Configuration 通道数取值

【网络通信 -- 直播】音频流编码 -- AAC 基础_第5张图片

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

【网络通信 -- 直播】音频流编码 -- AAC 基础_第6张图片

参考致谢

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

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

【2】AAC格式简介

【3】AAC及其封装格式

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

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

你可能感兴趣的:(流媒体系列,--,编解码)