AAC高级音频编码是什么?AAC规格、格式分类及处理流程

AAC高级音频编码是什么

AAC(Advanced Audio Coding),中文名是高级音频编码。它是由Fraunhofer IIS、杜比实验室、AT&T、索尼等公司基于MPEG-2的音频编码技术共同开发的,目的是为了取代MP3格式。随着MPEG-4标准出现后,AAC又重新集成了SBR技术和PS技术,为了区别于传统的MPEG-2 AAC又称为MPEG-4 AAC。

AAC规格分类

一般来说,AAC音频编码格式有三种规格:LC-AAC(最基本),HE-AAC(AACPlus v1),HE-AAC v2(AACPlus v2),他们三者的关系如下图所示:

AAC高级音频编码是什么?AAC规格、格式分类及处理流程

HE-AAC v2相比较基础的AAC(LC)格式和HE-AAC格式,存在如下等式关系:

HE-AAC v2 = LC-AAC + SBR + PS

HE-AAC v2 = HE-AAC + PS

AAC格式分类

AAC根据不同的数据组成形式可以分为两种格式,分别是ADIF和ADTS。

ADIF

ADIF (Audio Data Interchange Format),中文全称是音频数据交换格式。它的特点是配置信息存储在整个文件的开头,只能从文件起始点开始解码,比较适合用于本地文件存储。

ADIF格式的音频文件数据形式如下图所示:

AAC高级音频编码是什么?AAC规格、格式分类及处理流程

ADIF 头信息

ADIF的头信息存在音频文件的头部,一般只存在一份,其中包含了码流类型、码率大小等信息,具体字段和占位大小如下图所示:

AAC高级音频编码是什么?AAC规格、格式分类及处理流程

其中,字段含义如下:

adif_id:ADIF类型标识,固定为“ADIF”。

bitstream_type:码流类型,0:CBR,固定码率模式;1:VBR,可变码率模式。

bitrate:码率大小,CBR时,表示码率大小;VBR时,表示峰值码率大小;0值时,表示unknown。

ADTS

ADTS (Audio Data Transport Stream),中文全称是音频数据传输流。他的特点是存在同步字节(12bits,0xFFF)的标识,而且每一帧AAC都有头信息,因此可以从任意帧和位置开始解码,比较适合直播流场景中。

ADTS格式的音频(文件)数据形式如下图所示:

AAC高级音频编码是什么?AAC规格、格式分类及处理流程
  • ADTS 固定头信息

ADTS的固定头信息在每个音频帧中都是一样的,包含了编码级别、采样率、声道数等信息,具体字段和占位大小如下图所示:

AAC高级音频编码是什么?AAC规格、格式分类及处理流程

其中,字段含义如下:

syncword:帧同步,标识一个帧的开始,固定为0xFFF。

ID:MPEG 标示符,0表示MPEG-4,1表示MPEG-2。

layer:固定为’00’。

protection_absent:标识是否进行误码校验,0表示有CRC校验,1表示没有CRC校验。

profile:标识使用哪个级别的AAC,1: AAC Main 2: AAC LC (Low Complexity) 3: AAC SSR (Scalable Sample Rate) 4: AAC LTP (Long Term Prediction)。

sampling_frequency_index:标识使用的采样率的下标,具体采样率可以对照下表得到。

AAC高级音频编码是什么?AAC规格、格式分类及处理流程

private_bit:私有位,编码时设置为0,解码时忽略。

channel_configuration:标识声道数,具体声道数可以对照下表得到。

AAC高级音频编码是什么?AAC规格、格式分类及处理流程

original_copy:编码时设置为0,解码时忽略。

home:编码时设置为0,解码时忽略。

  • 可变头信息

每个ADTS头中的可变部分,记录该AAC音频帧的数据大小以及有多少个数据块,具体字段和占位大小如下图所示:

AAC高级音频编码是什么?AAC规格、格式分类及处理流程

其中,字段含义如下:

copyrighted_id_bit:编码时设置为0,解码时忽略。

copyrighted_id_start:编码时设置为0,解码时忽略。

aac_frame_length:ADTS帧长度包括ADTS长度和AAC声音数据长度的和,即 aac_frame_length = (protection_absent == 0 ? 9 : 7) + audio_data_length。

adts_buffer_fullness:固定为0x7FF,表示是码率可变的码流。

number_of_raw_data_blocks_in_frame:表示当前帧有number_of_raw_data_blocks_in_frame + 1 个原始帧(一个AAC原始帧包含一段时间内1024个采样及相关数据)。

AAC的处理流程

如果是AAC音频文件,大多数情况是ADIF;如果是AAC音频码流,大多数情况是ADTS。但是为了避免误判,在处理AAC音频时还是参考下面的步骤:

1、判断AAC格式类型,判断是ADIF或者ADTS。

2、若为ADIF,解ADIF头信息,跳至第6步。

3、若为ADTS,寻找同步头。

4、解ADTS帧头信息。

5、若有错误检测,进行错误检测。

6、解块信息。

7、解元素信息。

AAC 在 ZEGO SDK 的应用

目前,音频编解码技术被广泛的应用于社会生活的方方面面,比如互动直播、在线教学、视频会议等。AAC 作为 RTC 场景下常用的编解码格式,ZEGO 的音视频SDK自然支持,音频编码&码率支持情况

  • HE_AAC: 10k ~ 64k(双声道支持最高128k)、
  • AAC_LC: 10k ~ 192k

ZEGO SDK 支持开发者根据实际需求,自定义音频码率。同时也提供了不同音质标准的预设配置,供开发者直接选用:基础音质 (16 kbps, 单声道)、标准音质 (48 kbps, 单声道;56 kbps, 双声道)、高音质 (128 kbps, 单声道;192 kbps, 双声道)。

总之,ZEGO 提供音视频的现成方案,降低开发者使用音频编解码技术的难度,体验入口:https://doc-zh.zego.im/article/4438

关于音频编解码更多详细内容可以参考文章:

音视频开发进阶课程|第五讲:音频编解码

本文来自作者投稿,版权归原作者所有。如需转载,请注明出处:https://www.nxrte.com/jishu/42495.html

(1)

相关推荐

发表回复

登录后才能评论