AAC的ADTS头解析

1. ADTS(Audio Data Transport Stream)头之于AAC

AAC音频文件的每一帧都由一个ADTS头和AAC ES(AAC音频数据)组成。

AAC数据帧

2. ADTS头分析

ADTS头包含了AAC文件的采样率、通道数、帧数据长度等信息。ADTS头分为固定头信息和可变头信息两个部分,固定头信息在每个帧中的是一样的,可变头信息在各个帧中并不是固定值。ADTS头一般是7个字节((28+28)/ 8)长度,如果需要对数据进行CRC校验,则会有2个Byte的校验码,所以ADTS头的实际长度是7个字节或9个字节。

2.1 固定头信息:adts_fixed_header()

ADTS头的固定头信息在每个帧中都是一样的。

adts_fixed_header
  • syncword:帧同步标识一个帧的开始,固定为0xFFF
  • ID:MPEG 标示符。0表示MPEG-4,1表示MPEG-2
  • layer:固定为'00'
  • protection_absent:标识是否进行误码校验。0表示有CRC校验,1表示没有CRC校验
  • profile:标识使用哪个级别的AAC。1: AAC Main 2:AAC LC (Low Complexity) 3:AAC SSR (Scalable Sample Rate) 4:AAC LTP (Long Term Prediction)
  • sampling_frequency_index:标识使用的采样率的下标
  • private_bit:私有位,编码时设置为0,解码时忽略
  • channel_configuration:标识声道数
  • original_copy:编码时设置为0,解码时忽略
  • home:编码时设置为0,解码时忽略
sampling_frequency_index
channel_configuration

2.2 可变头信息:adts_variable_header()

adts_variable_header.png
  • copyrighted_id_bit:编码时设置为0,解码时忽略
  • copyrighted_id_start:编码时设置为0,解码时忽略
  • aac_frame_length:ADTS帧长度包括ADTS长度和AAC声音数据长度的和。即 aac_frame_length = (protection_absent == 0 ? 9 : 7) + audio_data_length
  • adts_buffer_fullness:固定为0x7FF。表示是码率可变的码流
  • number_of_raw_data_blocks_in_frame:表示当前帧有number_of_raw_data_blocks_in_frame + 1 个原始帧(一个AAC原始帧包含一段时间内1024个采样及相关数据)。

参考链接

https://wiki.multimedia.cx/index.php?title=ADTS

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 摘要 该配置文件定义了支持高质量音频分发所需的Bluetooth®设备的要求。这些要求以终端用户服务的方式表达,并...
    公子小水阅读 13,416评论 0 4
  • 国家电网公司企业标准(Q/GDW)- 面向对象的用电信息数据交换协议 - 报批稿:20170802 前言: 排版 ...
    庭说阅读 13,850评论 6 13
  • 做这个东西很久了,从去年十二月份开始的,快5个月了。。。期间因为工作一直断断续续,直到最近才有了些进展,也就到此为...
    0_0啊阅读 14,276评论 1 13
  • 前言 好记性不如烂笔头,最近有点空把一些知识也整理了一遍,后面陆续写一些总结吧!先从这个不太熟悉的音视频这块开始吧...
    zerocc2014阅读 12,815评论 8 93
  • [TOC] 音视频&流媒体 是什么促使我要写这一篇音视频入门文章?那是因为和一妹子打赌码率的概念,结果输了;对一个...
    AllenWu阅读 10,394评论 1 24