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.  如图所示:

其中,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....

data后缀文件解码_AAC文件格式与解码流程相关推荐

  1. data后缀文件解码_WMA文件格式和解码流程 | 学步园

    1 文件格式(ASF) ASF:Advanced Systems Format (formerly Advanced Streaming Format, Active Streaming Format ...

  2. data后缀文件解码_Java语法进阶13-文件、IO流

    File File是文件和目录路径名的抽象表示形式,即File类是文件或目录的路径,而不是文件本身,因此File类不能直接访问文件内容本身,如果需要访问文件内容本身,则需要使用输入/输出流. File ...

  3. data后缀文件解码_小白学PyTorch | 17 TFrec文件的创建与读取

    [机器学习炼丹术]的学习笔记分享<> 小白学PyTorch | 16 TF2读取图片的方法 小白学PyTorch | 15 TF2实现一个简单的服装分类任务 小白学PyTorch | 14 ...

  4. data后缀文件解码_封装ThinkPHP6.0通用文件上传

    php中文网最新课程 每日17点准时技术干货分享 本文为php中文网认证作者:"wpj"投稿,欢迎加入php中文网有偿投稿计划! 本文实例讲述了封装ThinkPHP6通用文件上传方 ...

  5. data后缀文件解码_data类型的Url格式

    所谓"data"类型的Url格式, 是在RFC2397中提出的,目的对于一些"小"的数据,可以在网页中直接嵌入,而不是从外部文件载入.例如对于img这个Tag, ...

  6. python3 转码的函数_python基础3之文件操作、字符编码解码、函数介绍

    内容概要: 一.文件操作 二.字符编码解码 三.函数介绍 一.文件操作 文件操作流程: 打开文件,得到文件句柄并赋值给一个变量 通过句柄对文件进行操作 关闭文件 基本操作: 1 #/usr/bin/e ...

  7. python文件操作解码_python基础3之文件操作、字符编码解码、函数介绍

    内容概要: 一.文件操作 二.字符编码解码 三.函数介绍 一.文件操作 文件操作流程: 打开文件,得到文件句柄并赋值给一个变量 通过句柄对文件进行操作 关闭文件 基本操作: 1 #/usr/bin/e ...

  8. python基础3之文件操作、字符编码解码、函数介绍

    内容概要: 一.文件操作 二.字符编码解码 三.函数介绍 一.文件操作 文件操作流程: 打开文件,得到文件句柄并赋值给一个变量 通过句柄对文件进行操作 关闭文件 基本操作: 1 #/usr/bin/e ...

  9. php 后缀文件怎么打开,php是什么文件格式,php扩展名文件如何打开?

    php是什么文件? 对于php是什么文件?您还可能还有类似的疑问,比如: 为什么不支持php文件格式? 怎么打开php文件格式? 哪些软件可以打开php文件格式? 如何支持php文件格式?等等类似问题 ...

最新文章

  1. hung-yi lee_p17_卷积神经网络
  2. oracle netca 乱码,Oracle 11g 安装及netca,dbca乱码之解决
  3. 图解二叉树的先中后序遍历
  4. Keil 出现Debug Error! DAMAGE:after Normal block
  5. 【AutoML】强化学习如何用于模型蒸馏?
  6. 预定义的类型“System.Object”未定义或未导入
  7. 登录页面test记录
  8. 《ASP.NET Core 微服务实战》-- 读书笔记(第10章)
  9. 蔡高厅老师 - 高等数学阅读笔记 - 10 - 函数图像的描绘 - 微分三角形 -曲率(44 ~48)
  10. DSP定点与浮点计算
  11. 你在闲鱼捡过最大的漏是什么?
  12. 理解 LruCache 机制
  13. 告别鼠标——【Windows下常见系统快捷键】
  14. 线程池ThreadPoolExecutor使用
  15. 如何在通达信软件上随意画图_通达信指标公式编写教程:绘图函数DRAWLINE、DRAWTEXT 等...
  16. 日记/malloc函数与头文件
  17. r语言结构方程模型可视化_混合线性模型——R语言
  18. Excel使用VBA自动调整列宽
  19. 洛谷P4824 [USACO15FEB] Censoring S 题解
  20. Launcher布局加载流程

热门文章

  1. centos 6.3 安装QQ2012教程
  2. JWT 的 Token 过期时间为什么没有生效
  3. 猎豹浏览器抢票专版怎么用?猎豹浏览器抢票专版使用方法
  4. 排序算法:计数排序(Python)
  5. 燃气涡轮原理 第7版 英文原版(Gas Turbine Theory)(pyengine@163.com)
  6. 上海php平均工资2020,上海2020年各类平均工资一览,看看你在哪一档
  7. Gradle【有与无】【运行Gradle构建】【G8_2】Gradle Enterprise Gradle插件用户手册
  8. Flink JDBCOutputFormat
  9. 18.10----19.3知识点复盘
  10. fuser -km问题