AAC ADTS 解析

ADTS的全称是 Audio Data Transport Stream。是一种运用于AAC编码数据之上的传输封装格式。当然,AAC可中的传输封装格式不止ADTS这一种。还有比如我们再VOIP产品时,如果用RTP协议作为传输协议的话,这个时候使用的就是LATM格式了。

但我们再其他的一些应用场景中比较多见的就是ADTS了。比如我们需要把AAC音频编码数据存储为文件是,就需要把AAC的ES流打包成ADTS Frame。即为ES流加上一个ADTS 头信息。

我们可以先看一下ADTS Frame的语法定义。

adts_frame

从这个ADTS Frame的语法定义中可以很清楚的知道,ADTS Header包含两个部分。
adts_fixed_header() 和adts_variable_header()。
那么下面我们就按顺序先来看一下adts_fixed_header 的语法定义吧。

adts_fixed_header

syncword: 同步字段,占12位,总是 ‘1111 1111 1111’b。
ID: 表示MPEG的版本,1表示MPEG-2。0表示 MPEG-4。
layer: 总是 ‘00’。
protection_absent: 当这个字段为“0”的时候,在ADTS header后面会跟两个字节的CRC_check字段。如果为’1’ 则没有CRC_check字段。
profile: 指示所用的AAC级别, 我们最常用的就是其中的AAC_LC
aac_profile

sampling_frequency_index: 占四个位,指代AAC音频的采样率。取值依据下表

sampling_frequency_index

private_bit: 一个字节的私有字段,ISO 标准中将不再定义这个字段的使用。无意义的字段。可以被企业用于私有化扩展。
channel_configuration: 指示AAC码流的声道数目,参照下表

channel_configuration

original/copy : ‘0’表示音频数据是Copy。‘1’表示original。

好,下面再来看看adts_variable_header的语法定义。

adts_variable_header

前面两个字段是指示版权信息的,copyright_identifier将以什么样的形式出现。

frame_length: 以字节为单位的ADTS frame的长度。包括adts_fixed_header + adts_variable_header + (crc_check) + AAC ES stream。
crc_check出现和不出现取决于protection_absent 字段。为 ‘0’则出现crc_check。
相对于
frame_length = 7 + (protection_absent ? 0 : 2) + lengthof(AAC ES Stream)。

adts_buffer_fullness: 如果这个字段的值是 0x7FF 即 ‘111 1111 1111’b 全为’1’ ,表示AAC码流是可变码率的码流。
number_of_raw_data_blocks_in_frame: 此字段加 1的值表示在 ADTS Frame中有多是个数据块。即最少会有一个AAC 数据块(number_of_raw_data_blocks_in_frame == 0)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值