AAC 文件格式解析 -- 速通版

前排提示:之所以叫 “速通版”,前提是面向有一定音视频基础知识的人群,可参考本文快速了解一些重点信息和内容。


目录

整体结构

一、ADTS 帧(重点)

二、ADTS Header

三、原始数据

PS:分享


整体结构

AAC - Advanced Audio Coding (高级音频解码), 首先定义在 MPEG-2 ,然后被采用到 MPEG-4 标准中,是一种有损音频压缩格式。

整体上看, AAC 文件 时由一系列的 AAC Sequence 组成,每个 Sequence 由 AAC Header + AAC ES 组成。

AAC 文件根据结构格式不同,分为 2 类:

  • ADTS - Audio Data Transport Stream 音频数据交换格式(最常见)
    有同步字的比特流。
    可以在任意帧做解码,也就是说它每⼀帧都有头信息。
    适合网络传输,流媒体文件。
    pre- framesyncwordheadererror_checkraw_data_streamnext-frame
  • ADIF - Audio Data Interchange 传输流格式 (已经很少用)。
    只有⼀个统⼀的头,所以必须得到所有的数据后解码。
    一般用于磁盘文件。
    headerraw_data_stream

一、ADTS 帧(重点)

注意,AAC 原始数据编码以后,直接存储的文件无法播放,可能就是因为 AAC 文件的每⼀帧缺少了ADTS 头信息文件的包装拼接。这种情况需要对原始帧加上 ADTS 头,封装成 ADTS 帧就能正常播放了。结构如下:

AAC Frame = [ ADTS Header ] + [ AAC Audio Data ]

其中, ADTS Header 的长度只有 2 种固定大小:

  • protection_absent == 0  // 表示长度是 9 Byte,会包含 2 Byte 的校验数据
  • protection_absent == 1  // 表示长度是 7 Byte

二、ADTS Header

ADTS Header 包含两部分:固定头信息 和可变头信息。结构如下:

ADTS Header = [ Fixed header ] + [ Variable header ADTS Sequence ]

  • ADTS 固定头信息

结构体定义

ADTS Header 结构体成员占位大小说明
syncword12 bit同步信息,表示 ADTS 帧的开始,固定值全 1
ID1 bitMPEG标识,0 - MPEG4, 1 - MPE2 
layer2 bit层信息,固定值全 0
protection_absent1 bitCRC 校验信息,0 - 有校验,1 - 没有校验 
profile2 bit级别,e.g. 值 01 - Low Complexity 即 AAC LC
sample_frequency_index4 bit采样率索引,对应采样率数组中的采样率值
private_bit1 bit私有位,一般编码时置 0,解码时忽略
channel_configuration3 bit声道数, e.g. 值 2 - 立体声双声道
original_copy1 bit一般编码时置 0,解码时忽略
home1 bit一般编码时置 0,解码时忽略

实际文件举例:

  • ADTS 可变头信息

结构体定义

ADTS Header 结构体成员占位说明
copyright_identification_bit1 bit版权保护,一般编码时置 0,解码时忽略
copyright_identification_start1 bit版权开始,一般编码时置 0,解码时忽略
frame_length13 bit帧长度,注意是包含 ADTS 头和 AAC 原始数据长度的计算之和。
adts_buffer_fullness11 bit码率可变的码流,固定值,全 1 
number_of_raw_data_blocks2 bit计数 n,表示 一个 ADTS 帧中有 (n + 1) 个 AAC 原始帧

实际文件举例:


三、原始数据

注意:raw data block 结尾的部分,通常会有一些填充数据 ( byte_alignment ),目的是为了内存对齐。


 


PS:分享

一个 系统深入学习音视频 知识的课程 —— https://xxetb.xetslk.com/s/45jaSl


(学无止境,文章如有纰漏不足,欢迎您不吝指正!谢谢 ^_^)

  • 37
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值