音频编码格式介绍-AAC

目录

  1. 概述
  2. 帧格式
  3. 算法简介
  4. 开源的软件
  5. AAC和MP3的关键性不同
  6. 参考阅读

1. 概述

AAC(Advanced Audio Coding),被认为是MP3的继任者,相对MP3有更高的压缩效率。由Fraunhofer IIS、杜比实验室、AT&T、Sony(索尼)等公司共同开发。1997年由MPEG正式宣布为国际标准,为MPEG-2标准的第7部分-ISO/IEC 13818-7:1997。MPEG-4标准中,AAC音频流部分在ISO/IEC 14496-3 (subpart 4)中规定。

AAC被iPhone、iTunes以及大多数便携式设备所使用。
AAC有很多的选项和profiles。

2. 帧格式

AAC音频格式有:

  • ADIF(Audio Data Interchage Format),音频数据交换格式:只有一个统一的头,必须得到所有数据后解码,适用于本地文件。
  • ADTS(Audio Data Transport Stream),音视数据传输流:每一帧都有头信息,任意帧解码,适用于传输流。

下面主要介绍ADTS。

ADTS的组成单元是ADTS Frame。


adts帧.png
  • ADTS Frame由ADTS_Header和AAC ES组成。
  • ADTS_Header包含采样率、声道数、帧长度的信息。
  • ADTS头信息的长度是7个字节或9字节(有CRC的情况)。

ADTS_Header的可以分为以下三部分:

  • adts_fixed_header:每一帧的内容是不变的。
  • adts_variable_header:每一帧的内容是存在变化的。
  • crc:16bits,protection_absent字段为0时存在。

adts_fixed_header:

字段 比特数 说明
syncword 12 所有位必须为1,即0xFFF。
ID 1 0代表MPEG-4, 1代表MPEG-2。
layer 2 所有位必须为0。
protection_absent 1 1代表没有CRC,0代表有。
profile 2 配置级别
sampling_frequency_index 4 标识使用的采样频率,具体见下表Table35。
private_bit 1 see ISO/IEC 11172-3, subclause 2.4.2.3 (Table 8).
channel_configuration 3 取值为0时,通过inband 的PCE设置channel configuration。
original/copy 1 编码时设置为0,解码时忽略。
home 1 编码时设置为0,解码时忽略。

在MPEG-2 AAC中定义了3种profile:

  • MPEG-2 AAC Main
  • MPEG-2 AAC LC (Low Complexity)
  • MPEG-2 AAC SSR (Scalable Sampling Rate)

在MPEG-4 AAC中定义了6种profile:

  • MPEG-4 AAC Main
  • MPEG-4 AAC LC (Low Complexity)
  • MPEG-4 AAC SSR (Scalable Sample Rate)
  • MPEG-4 AAC LTP (Long Term Predicition)
  • MPEG-4 AAC LD (Low Delay)
  • MPEG-4 AAC HE (High Efficiency) AACPlusV1/V2(3GPP)
sampling_frequency_index采样频率表.PNG

adts_variable_header:

字段 比特数 说明
copyright_identification_bit 1 编码时设置为0,解码时忽略。
copyright_identification_start 1 编码时设置为0,解码时忽略
frame_length 13 帧长度,包括header和crc的长度,单位byte
adts_buffer_fullness 11
number_of_raw_data_blocks_in_frame 2 number of AAC Frames(RDBs) in ADTS frame minus 1, 为了最大的兼容性通常每个ADTS frame 包含一个AAC frame。

AAC ES部分说明

  1. 一个frame的原始数据包含1024个样本时间段的音频数据。

ffmpeg中添加ADTS头的代码,可以很清晰的了解ADTS头的结构:

static int adts_write_frame_header(ADTSContext *ctx,
                                   uint8_t *buf, int size, int pce_size)
{
    PutBitContext pb;

    unsigned full_frame_size = (unsigned)ADTS_HEADER_SIZE + size + pce_size;
    if (full_frame_size > ADTS_MAX_FRAME_BYTES) {
        av_log(NULL, AV_LOG_ERROR, "ADTS frame size too large: %u (max %d)\n",
               full_frame_size, ADTS_MAX_FRAME_BYTES);
        return AVERROR_INVALIDDATA;
    }

    init_put_bits(&pb, buf, ADTS_HEADER_SIZE);

    /* adts_fixed_header */
    put_bits(&pb, 12, 0xfff);   /* syncword */
    put_bits(&pb, 1, 0);        /* ID */
    put_bits(&pb, 2, 0);        /* layer */
    put_bits(&pb, 1, 1);        /* protection_absent */
    put_bits(&pb, 2, ctx->objecttype); /* profile_objecttype */
    put_bits(&pb, 4, ctx->sample_rate_index);
    put_bits(&pb, 1, 0);        /* private_bit */
    put_bits(&pb, 3, ctx->channel_conf); /* channel_configuration */
    put_bits(&pb, 1, 0);        /* original_copy */
    put_bits(&pb, 1, 0);        /* home */

    /* adts_variable_header */
    put_bits(&pb, 1, 0);        /* copyright_identification_bit */
    put_bits(&pb, 1, 0);        /* copyright_identification_start */
    put_bits(&pb, 13, full_frame_size); /* aac_frame_length */
    put_bits(&pb, 11, 0x7ff);   /* adts_buffer_fullness */
    put_bits(&pb, 2, 0);        /* number_of_raw_data_blocks_in_frame */

    flush_put_bits(&pb);

    return 0;
}

3. 算法简介

AAC是一种宽带音频编码算法,它利用两种主要的编码策略来大幅减少表示高质量数字音频所需的数据量:

  • 丢弃在感知上不相关的信号分量。
  • 消除了编码音频信号中的冗余。

实际的编码过程包括以下步骤:

  • 使用前向修改的离散余弦变换(MDCT)将信号从时域转换到频域。这是通过使用滤波器组来完成的,这些滤波器组采用适当数量的时间采样并将其转换为频率采样。
  • 基于心理声学模型量化频域信号并对其进行编码。
  • 添加内部纠错码。
  • 存储或传输信号。
  • 为了防止损坏的样本,将Luhn mod N算法的现代实现应用于每个帧。

算法部分更多介绍可参考[5]。

4. 开源软件

  • FAAD2:开源的MPEG-4和MPEG-2 AAC解码器。
  • fdk-aac:Fraunhofer IIS
    开发的开源项目的aac编解码库,包含在android项目中。

5. AAC和MP3的关键性不同

AAC是在MP3基础上开发出来的,所以两者的编码系统有一些相同之处。但是对比一下两者的编码流程图,你会发现AAC的编码工序更为复杂。

  1. 滤波器组(Filter bank):
  2. 时域噪音修整(Temporal Noise Shaping,TNS):这项神奇的技术可以通过在频率域上的预测,来修整时域上的量化噪音的分布。在一些特殊的语音和剧烈变化信号的量化上,TNS技术对音质的提高贡献巨大!
  3. 预测(Prediction):对音频信号进行预测可以减少重复冗余信号的处理,提高效率。
  4. 量化(Quantization):AAC的量化过程是使用两个巢状循环进行反复运算。通过对量化分析的良好控制,比特率能够被更高效地利用。
  5. 比特流格式(Bit-stream format):在AAC中,信息的传输都要经过熵编码,以保证冗余尽可能少。此外AAC拥有一个弹性的比特流结构,使得编码效率进一步提高。
  6. 长时期预测(Long Term Prediction,LTP):这是一个MPEG-4 AAC中才有的工具,它用来减少连续两个编码音框之间的信号冗余,对于处理低码率的语音非常有效。
  7. 知觉噪音代替(Perceptual Noise Substitution,PNS):这也是MPEG-4 AAC中才有的工具,当编码器发现类似噪音的信号时,并不对其进行量化,而是作个标记就忽略过去,当解码时再还原出来,这样就提高了效率。

6. 参考

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 220,809评论 6 513
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 94,189评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 167,290评论 0 359
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,399评论 1 294
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,425评论 6 397
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 52,116评论 1 308
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,710评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,629评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 46,155评论 1 319
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,261评论 3 339
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,399评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 36,068评论 5 347
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,758评论 3 332
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,252评论 0 23
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,381评论 1 271
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,747评论 3 375
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,402评论 2 358

推荐阅读更多精彩内容