`
chriszeng87
  • 浏览: 736783 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

AAC文件格式与解码流程

阅读更多

1 文件格式

1.1 概述及分类

AAC“Advanced Audio Coding”的缩写,中文称为“高级音频编码”,被手机界称为“21世纪数据压缩方式”,AAC所采用的运算方式是与MP3的运算有所不同,AAC同时可以支持多达48个音轨,15个低频音轨,更多种取样率和比特率与及有多种言语的兼容能力,更高的译码效率,总括来说,AAC可以在对比MP3文件缩小30%的前题下提供更好的音质。

AAC帧与帧之间编码完全独立,所以其广泛运用于流媒体。

由于对AAC有重要贡献的公司比较多,如Fraunhofer,Dolby, Sony和AT&T,导致AAC子格式多,很容易搞混。他们是共分为9种规格,以适应不同场合的需要:

a) MPEG-2 AAC LC 低复杂度规格 (Low Complexity)

b) MPEG-2 AAC Main 主规格

c) MPEG-2 AAC SSR 可变取样率规格 (Scaleable Sample Rate)

d) MPEG-4 AAC LC 低复杂度规格(Low Complexity),现在的手机比较常见的MP4文件中的音频部份就包括了该规格音频文件

e) MPEG-4 AAC Main 主规格

f) MPEG-4 AAC SSR 可变取样率规格 (Scaleable Sample Rate)

g) MPEG-4 AAC LTP 长时期预测规格(Long Term Predicition)

h) MPEG-4 AAC LD 低延迟规格(Low Delay)

i) MPEG-4 AAC HE 高效率规格(High Efficiency)(即AAC+,含SBR)

上述的规格中,主规格“Main”包含了除增益控制之外的全部功能,其音质是最好,而低复杂度规格则是比较简单,没有了增益控制,但提高了编码效率,至“SSR”对“LC”规格大体是相同,但是多了增益的控制功能,另外,MPEG-  4/AAC/LTP/LD/HE,都是用在低码率下编码,特别是“HE”是有Nero ACC编码器支持,是近来多用的一种编码率种,不过通常来说,Main规格和LC规格的音质相差是不大。

以上规格的划分是比较官方的分发,wiki上也是如此划分。事实上MPEG-4与MPEG-2 AAC流除了在文件头(header)上并没有什么区别。只是一些应用软件象QuickTime并不承认MPEG-2 AAC。Real的解码程序中,并未对这2种进行区分。所以从编解码来看,按如下划分更清晰:

a)LC profile:最简单的profile,苹果iTune使用这种格式(iTune也使用Apple LosslessAAC ,不过似乎没有划分到AAC家族中,一个文件通常上20M)。

b) MAIN profile: LC profile + 后向预测(backwards prediction)

c) SRS: sample-rate scalability,submitted by Sony and reportedly

d) LTP:long term prediction, main profile + forward prediction

e)HE-AAC: high efficiency AAC,又叫aacPlus,使用SBR,可能使用PS.AAC + SBR(Spectral Band Replication)aacPlusv1, AAC + SBR + PS(Parametric Stereo)aacPlus v2.  如图所示:

image

其中,aacPlus v1已被运动图像专家组MPEG指定为其标准MPEG-4 HE AAC.

1.2 AAC的编码器

a) FhG Fraunhofer IIS研发的权威编码器,拥有很好的音质,不对外开放。

b) Nero AAC可能是目前最完美的AAC编码器了,同时支持"LC AAC/HE AAC"规格,Nero AAC编码器提供了品质最好的"VBR LC AAC"格式,同时亦对面"HE AAC"规格保证了在低码率下也有良好的表现,千千静听 + Nero插件,就可以编码AAC文件了,我当初就这么做测试向量的,哈哈。

c) QuickTime/iTune Apple公司的两款Media软件都提供了AAC编码功能,其编码技术来自“DolbyLaboratories”,是目前音质最好的中码编率编码器,它编码的48kbps立体声音质比其它AAC编码器好20 - 25%,甚至64 kbps的Dolby AAC音效可媲美128 kbps的MP3。

d) FAAC:免费,开源,郑重推荐。

1.3 文件后缀名

用aac编码的文件可能使用这三种后缀名:aac,m4a,mp4.

AAC:以aac为后缀的文件无文件头,由一些列的帧组成文件,帧头分ADIF和ADTS两种。

M4A:用MP4作为container,这种MP4文件里面只有音频帧,无视频帧。由MP4文件头+一系列的帧组成,帧头比AAC为后缀的文件要短。所以在保持压缩数据不变的情况下,将AAC转为M4A,文件会小一些,因为每帧省几个字节,合起来省下的字节数通常比MP4文件头还大。

MP4:可以同时有视频帧和音频帧,也可以只有音频或视频帧。

注:在下面的1.5节中,会详细说一下AAC为后缀的文件格式,MP4 container的格式可以参照我的另一篇文章,MPEG4-Part14 -- MP4 file format

1.4 编码工具推荐

FAAC 和 千千静听+nero插件

1.5 File format specification--以aac为后缀名的文件格式

AAC没有文件头,由帧序列组成。一共有2种格式的帧头,ADTS和ADIF。一个文件中通常不会2种帧共存,并且大多数AAC文件包含的帧为    ADTS。

ADIF:Audio Data Interchange Format 音频数据交换格式。这种格式的特征是可以确定的找到这个音频数据的开始,不需进行在音频数据流中间开始的解码,即它的解码必须在明确定义的开始处进行。故这种格式常用在磁盘文件中。

ADTS:Audio Data Transport Stream 音频数据传输流。这种格式的特征是它是一个有同步字的比特流,解码可以在这个流中任何位置开始。

//以下对文件格式说明使用的表格来自ISO-IEC-13818-7

1.5.1 ADIF

ADIF的帧序列按如下方式组成一个文件:

                                          Table 2– Syntax of adif_sequence()

Syntax

No. of bits

Mnemonic

adif_sequence()

   

{

   

adif_header();

   

byte_alignment();

   

raw_data_stream();

   

}

   

其中Header结构如下:

                                  Table 3 – Syntax of adif_header()

Syntax

No. of bits

Mnemonic

adif_header()

   

{

   

adif_id;

32

bslbf

copyright_id_present;

1

bslbf

if (copyright_id_present) {

   

copyright_id;

72

bslbf

}

   

original_copy;

1

bslbf

home;

1

bslbf

bitstream_type;

1

bslbf

bitrate;

23

uimsbf

num_program_config_elements;

4

bslbf

if (bitstream_type == ‘0’) {

   

adif_buffer_fullness;

20

uimsbf

}

   

for (i = 0; i < num_program_config_elements + 1; i++) {

   

program_config_element();

   

}

   

}

   

1.5.2 ADTS

ADTS文件有帧序列组成,如下表所示:

Table 4 – Syntax of adts_sequence()

Syntax

No. of bits

Mnemonic

adts_sequence()

   

{

   

while (nextbits() == syncword) {

   

adts_frame();

   

}

   

}

   

 

每帧除去最前面的同步字后,结构如下:

Table 5 – Syntax of adts_frame()

Syntax

No. of bits

Mnemonic

adts_frame()

   

{

   

adts_fixed_header();

   

adts_variable_header();

   

if (number_of_raw_data_blocks_in_frame == 0) {

   

adts_error_check();

   

raw_data_block();

   

}

   

else {

   

adts_header_error_check();

   

for (i = 0; i <= number_of_raw_data_blocks_in_frame; i++) {

   

raw_data_block();

   

adts_raw_data_block_error_check();

   

}

   

}

   

}

   

 

其中,ADTS头分两部分,固定头和可变头,固定头每帧一样,可变头帧与帧可以不同。

Table 8 – Syntax of adts_fixed_header()

Syntax

No. of bits

Mnemonic

adts_fixed_header()

   

{

   

syncword;

12

bslbf

ID;

1

bslbf

layer;

2

uimsbf

protection_absent;

1

bslbf

profile;

2

uimsbf

sampling_frequency_index;

4

uimsbf

private_bit;

1

bslbf

channel_configuration;

3

uimsbf

original/copy;

1

bslbf

home;

1

bslbf

}

   

 

Table 9 – Syntax of adts_variable_header()

Syntax

No. of bits

Mnemonic

adts_variable_header()

   

{

   

copyright_identification_bit;

1

bslbf

copyright_identification_start;

1

bslbf

frame_length;

13

bslbf

adts_buffer_fullness;

11

bslbf

number_of_raw_data_blocks_in_frame;

2

uimsfb

}

   

 

2 解码流程

to be continued....

 

转自:http://blog.csdn.net/evanwu_85/article/details/5946594

分享到:
评论

相关推荐

    AAC 文件解析及解码流程

    **AAC 文件解析及解码流程** **一、AAC 概述** 高级音频编码(Advanced Audio Coding,简称 AAC)是一种有损音频压缩格式,于1997年诞生,旨在替代MP3...理解AAC文件解析和解码流程有助于开发高效能的音频处理系统。

    AAC音频解码器

    AAC音频解码器是用于处理AAC(Advanced Audio Coding)音频格式的软件组件,它能够将AAC编码的音频数据转换为可播放的音频流。在数字媒体领域,AAC因其高效的压缩比和高质量的音质而被广泛应用,特别是在移动设备和...

    Android MediaCodec解码AAC,AudioTrack播放PCM音频

    在`MyAudioDecoder`这个示例中,我们可以假设它实现了一个完整的解码和播放流程,包括错误处理和状态管理。代码可能包含了读取AAC数据、配置MediaCodec、管理输入和输出缓冲区、以及使用AudioTrack播放音频的逻辑。 ...

    安卓aac解码播放

    3. **MediaExtractor与MediaCodec的配合**:在Android中,MediaExtractor用于从音频文件中提取AAC数据流,并将其传递给MediaCodec进行解码。MediaExtractor能识别多种容器格式,如.mp4或.aac,从中找到AAC音频轨道。...

    AAC解码算法原理详解(附代码)

    1. AAC解码流程 AAC解码的核心流程主要包括以下几个步骤: - **同步与元素解码**:首先,解码器需要找到AAC比特流中的帧起点,这通常通过查找特定的同步字来完成。接着,解析AAC帧的头部信息,获取必要的解码参数。...

    faad2解码aac

    5. **AACPCM.c与音频转换**:解码AAC后,通常需要将其转换为PCM格式,以便于播放或进一步处理。AACPCM.c可能包含了这样的转换逻辑,包括采样率转换、位深度转换、声道重排等步骤。 6. **编译流程**:在NDK11下编译...

    aac音频文件decoder

    在实际应用中,使用`faad2`解码AAC文件的流程可能包括以下几个步骤: 1. **加载AAC文件**:通过`faad`的API打开AAC音频文件,解析其元数据,如采样率、声道数、位深度等。 2. **初始化解码器**:根据元数据创建解码...

    AAC解码源码

    本项目提供的AAC解码源码能够帮助开发者理解和实现AAC音频的解码流程。 解码过程通常分为以下几个步骤: 1. **帧解析**:AAC音频数据被组织成一系列的帧,每个帧包含头部和数据部分。头部信息包含如采样率、通道数...

    fdk-aac android 编解码源码

    3. **JNI接口**: 创建JNI层的C++代码,定义Java与C++之间的接口,使用`fdk-aac`的API进行音频编码和解码操作。 4. **Java调用**: 在Java代码中,通过`System.loadLibrary("fdk_aac")`加载库,然后通过JNI接口调用C++...

    AAC解码算法原理详解

    这一阶段的任务是解析AAC文件的格式信息,包括ADIF(Audio Data Interchange Format)和ADTS(Audio Data Transport Stream)。ADIF适合文件存储,而ADTS用于流媒体传输。同步字用于识别帧边界,而元素解码则涉及对...

    AAC 格式分析器源码

    4. **AAC解码流程** - **初始化解码器**: 创建解码上下文,设置解码器参数,如编码配置、采样率等。 - **解码帧**: 将ADTS帧数据送入解码器,获取PCM数据。 - **处理PCM数据**: PCM数据是原始的无压缩音频样本,...

    ffmpeg 解析aac sdts格式文件

    在本话题中,我们将深入探讨如何使用FFmpeg解析AAC SDTS格式的文件。 AAC(Advanced Audio Coding)是一种高效音频编码标准,广泛应用于数字音频广播、流媒体服务和音频文件存储。它提供了比MP3更高的音质,但文件...

    AAC音频的解码算法

    #### 四、AAC文件格式 AAC支持两种主要的文件格式:ADIF(Audio Data Interchange Format)和ADTS(Audio Data Transport Stream)。 ##### 1. ADIF - **特点**:适用于磁盘文件,可以在明确的起始位置开始解码。 -...

    Android利用MediaCodec硬解码H264,AAC文件并播放Demo

    本文将详细讲解如何利用MediaCodec进行H264和AAC的硬解码,并播放视频文件。 首先,理解H264和AAC。H264是一种高效能的视频编码标准,它在保持视频质量的同时,显著降低了数据存储和传输的需求。AAC(Advanced ...

    aac音频解码器

    1. **解封装**:首先,解码器需要读取并解析AAC文件的容器格式,如MPEG-4 Part 14(.mp4)、ADTS(Audio Data Transport Stream,通常用于未封装的.AAC文件)或FLAC等,从中提取出原始的AAC编码数据。 2. **熵解码*...

    aac pcm 编解码

    在移动设备上进行音频处理时,AAC (Advanced Audio Coding)、PCM (Pulse Code Modulation) 和 AMR (Adaptive Multi-Rate) 是常见的音频编解码格式。这些格式各有特点,适用于不同的应用场景。本篇文章将详细介绍AAC...

    AAC解码算法原理详解.pdf

    5. 文件格式识别:AAC文件格式主要有ADIF和ADTS两种。ADIF是音频数据交换格式,适用于磁盘文件,可以从文件的起始位置直接开始解码。ADTS是音频数据传输流格式,适用于在线传输,因为其包含同步字,所以可以在比特流...

    AAC.rar_AAC编解码文档_aac_aac decode

    6. 文件格式解析:读取和写入AAC音频文件的二进制数据。 通过研究这些文档和代码,可以深入理解AAC编解码的复杂性,以及如何在实际项目中应用这些技术。这对于音频软件开发者、音频工程师,甚至是那些想要优化音频...

    AAC解码算法原理详解.doc

    这一阶段的目标是识别AAC文件格式(如ADIF或ADTS)并解码头信息。ADIF(Audio Data Interchange Format)适用于磁盘文件,其解码从明确定义的起点开始;而ADTS(Audio Data Transport Stream)是适合比特流传输的...

Global site tag (gtag.js) - Google Analytics