AAC ADTS格式分析

AAC音频格式

AAC音频格式:Advanced Audio Coding(高级音频解码),是一种由MPEG-4标准定义的有损音频压缩格式,由Fraunhofer发展,Dolby,Sony和AT&T是主要的贡献者。

  • ADIF:Audio Data Interchange Format音频数据交换格式。这种格式的特征是可以确定的找到这个音频数据的开始,不需要进行在音频数据流中间开始的解码,即它的解码必须在明确定义的开始处进行。所以这种格式常用在磁盘文件中。
  • ADTS:Audio Data Transport Stream是AAC音频的传输流格式。AAC音频格式在MPEG-2中有定义。AAC后来又被采用到MPEG-4标准中。这种格式的特征是他是一个有同步字的比特流,解码可以在这个流中任何位置开始。它的特征类似于mp3数据流格式。

简单来说,ADTS可以在任意帧解码,也就是说它每一帧都有头信息。ADIF只有一个同意的头,必须在得到所有数据后才能解码。

这两种header的格式也是不同的,目前一般编码后的和抽取出的都是ADTS格式的音频流。两者具体结构如下图:

AAC的ADIF头

AAC的ADTS头

有的时候当你编码AAC裸流的时候,会遇到写出来的AAC文件不能在PC和手机上播放的问题,很大可能是AAC文件的每一帧缺少ADTS头信息文件的包装拼接。

ADTS

AAC音频文件的每一帧由ADTS Header和AAC Audio Data组成,就是头和数据,结构体如下:

每一帧ADTS头文件都包含了音频的采样率,声道,帧长度等信息,这样解码器才能解析读取。

一般情况下ADTS的头信息都是7字节,分为两个部分:

  • adts_fixed_header();
  • adts_variable_header();
    其一为固定头信息,紧接着是可变头信息。固定头信息中的数据每一帧都相同,可变头信息则在帧与帧之间可变。
  • syncword:同步头,总是为0xFFF,代表一个ADTS帧的开始
  • ID:MPEG标识符,0表示MPEG-4,1表示MPEG-2
  • Layer:总是为00
  • protection_absent:是否误码校验,如果为1代表没有CRC校验,如果为0代表有CRC校验
  • profile:表示支持哪个级别的AAC,如01 Low Complexity(LC)---AAC LC。有些芯片只支持AAC LC

MPEG-2 AAC中定义了三种:

profile = MPEG-4 Audio Object Type -1

MPEG-4:

  • sampling_frequency_index:表示使用的采样率下标,通过这个下标在Sampling Frequencies数组中查找得知采样率的值。
  • channel_configuration:表示声道数,比如2表示双声道

接下来看adts_variable_header();

  • frame_length:一个ADTS帧的长度包括ADTS头和AAC原始流
  • adts_buffer_fullness:0x7FF说明码率是可变的码流
  • number_of_raw_data_blocks_in_frame:表示ADTS帧中有number_of_raw_data_blocks_in_frame+1个AAC原始帧。

下面是ADTS的AAC文件部分,高字节开始计算:

fixed header

FF F1 4C 4->11111111 11110001 01001100 0100

111111111111->帧头

0->MPEG-4

00->Layer总是为00

1->没有校验

01->AAC SSR

0011->48000采样率

0

001->单声道

0

0

variable header

0 20 FF FC

0

0

0000100000111->帧长度263

11111111111

00

参考资料:https://github.com/0voice

相关推荐
天行健,君子而铎9 小时前
数据分类分级的范式转换:从规则匹配到场景化高准确率一键部署
网络·数据库·安全
深圳市快瞳科技有限公司13 小时前
宠物门禁端侧AI落地解析:画质检测、活体甄别与离线推理
网络
一条泥憨鱼15 小时前
【从0开始学习计算机网络】| ARP 协议:地址解析,ARP 欺骗,链路层寻址
网络·后端·学习·计算机网络
m0_7156744315 小时前
数据分类分级的范式转换:从规则匹配到场景化高准确率一键部署
大数据·网络·人工智能·网络安全
dog25016 小时前
带宽,时延,抖动的不可能三角
网络·tcp/ip
砚凝霜17 小时前
【软考信息安全】第十六章 网络安全风险评估过程与技术方法
网络·安全·web安全
Eloudy18 小时前
MLNX_OFED 的 install.pl 安装流程分析
网络·rdma·roce
对讲机数码科普19 小时前
从电路原理到协议栈:模拟对讲机与数字对讲机的技术内核拆解
运维·网络·架构·软件工程
我送炭你添花20 小时前
ASA原理与电子维修实战:前言 一路修来,一路学习
运维·网络·学习
张小姐的猫20 小时前
【Linux】网络编程 —— 多路转接:epoll
linux·运维·网络