一、ADTS格式的AAC裸流实例分析
在《音视频入门基础:AAC专题(3)------AAC的ADTS格式简介》中对AAC的ADTS格式进行了简介。下面用一个具体的例子来对ADTS格式的AAC裸流进行分析。
通过《音视频入门基础:AAC专题(2)------使用FFmpeg命令生成AAC裸流文件》生成的AAC裸流文件就是ADTS格式的。用notepad++打开该文件,下图红框中的数据为文件头(header),可以看到Header为:0xFF F1 50 80 03 9F FC,也就是二进制的0b11111111 11110001 01010000 10000000 00000011 10011111 11111100(注:这里是因为先知道了Header里面没有CRC校验,所以才确定它为7个字节):
![](https://i-blog.csdnimg.cn/direct/96f5fc41d8c5473689d1f50035d86341.png)
(一)adts_fixed_header
syncword:占12位,每个位都必须被设置为1,也就是0b111111111111,用于标识ADTS帧的起始位置:
![](https://i-blog.csdnimg.cn/direct/ad486261ef884d109ff6f77e5412b877.png)
ID:占1位,值为0表示音频数据是MPEG-4 AAC:
![](https://i-blog.csdnimg.cn/direct/7067fb0a23ac422b9feeb3c071cdf27d.png)
**layer:**占2位,总被设置为00:
![](https://i-blog.csdnimg.cn/direct/116a8afe6dac4e7898dc2eec23edb7ed.png)
protection_absent:占1位,值为1表示CRC校验不存在:
![](https://i-blog.csdnimg.cn/direct/d55dbbbff96b4547a4894fc15206a346.png)
profile_ObjectType:占2位。值为1表示规格是AAC LC。该版本是AAC标准的基本部分,其中"LC"代表"Low Complexity",意味着该编码器使用较少的计算资源来实现高质量的音频压缩:
![](https://i-blog.csdnimg.cn/direct/ddefe47589e64dfcbacb6cfdcf7a2c6e.png)
samplingFrequencyIndex:占4位。值为0b0100,也就是十进制的4表示音频采样频率为44100Hz:
![](https://i-blog.csdnimg.cn/direct/ce4db3454f614eca948a16acf40ed24f.png)
private_bit:占1位,没用:
![](https://i-blog.csdnimg.cn/direct/b65b8be05b05420f93aafb5f3601e5c6.png)
channel_configuration:占3位。值为0b010,也就是十进制的2表示是双声道:
![](https://i-blog.csdnimg.cn/direct/221a2ad6f1e14dd29f1a7fba4005647c.png)
original_copy:占1位。值为0表示编码的比特流没有版权:
![](https://i-blog.csdnimg.cn/direct/56b094f2c6654fceb29bb6f5724410ab.png)
home:占1位。值为0表示比特流是一个拷贝:
![](https://i-blog.csdnimg.cn/direct/6e95c1e073e84a2c941a1e39003717c4.png)
(二)adts_variable_header
copyright_identification_bit:占1位。为72位版权标识字段中的一位:
![](https://i-blog.csdnimg.cn/direct/3840a9d1da1f4d9789c6b6c6ea5bcc7e.png)
copyright_identification_start:占1位。值为0表示没有版权标识传输:
![](https://i-blog.csdnimg.cn/direct/163c3103504543b0aae04b4ac4f4e25f.png)
aac_frame_length:占13位。值为0b11100,也就是十进制的28表示整个ADTS音频帧的长度为28字节:
![](https://i-blog.csdnimg.cn/direct/3819e26574934f308f3ea88a0ca6fe0c.png)
adts_buffer_fullness:占11位。值为0b11111111111,也就是0x7FF,表示比特流是可变速率比特流:
![](https://i-blog.csdnimg.cn/direct/95c4de420d964b5f929e2aaea092257b.png)
number_of_raw_data_blocks_in_frame:占2位。值为0表示该ADTS音频帧中只有一个AAC原始数据块:
![](https://i-blog.csdnimg.cn/direct/f409ec00615f4c8fba0ae35dd850d7ce.png)
二、使用工具分析AAC裸流文件
实际开发中我们一般都是使用工具去分析AAC的Header。比如AAC Audio ES Viewer(在Download - Jongbel Media Solutions 可以下载):
![](https://i-blog.csdnimg.cn/direct/88a84660590d4787b1eb3e62f6820c73.png)
用Elecard Stream Analyzer工具也可以分析AAC的Header:
![](https://i-blog.csdnimg.cn/direct/76dbbea8cf124b3da98efa764aa2dcc1.png)