最近在使用ffmpeg进行AAC编码时,发现输出的aac数据写文件后不能播放,原因是因为每帧AAC没有添加7字节的adts,其数据结构如下:
序号 | 结构名称 | 字段名称 | 位数 | 说明 |
1 | adts_fixed_header 固定头信息 | syncword | 12 | 帧同步标识一个帧的开始,固定为0xFFF |
2 | id | 1 | MPEG 标示符。0表示MPEG-4,1表示MPEG-2 | |
3 | layer | 2 | 固定为00 | |
4 | protection_absent | 1 | 标识是否进行误码校验。0表示有CRC校验,1表示没有CRC校验 | |
5 | profile | 2 | 标识使用哪个级别的AAC。0: Main 1:LC (Low Complexity) 2:SSR (Scalable Sample Rate) 3:Reserved | |
6 | sampling_frequency_index | 4 | 采样率的下标 0: 96000 1: 88200 2: 64000 3: 48000 4: 44100 5: 32000 6: 24000 7: 22050 8: 16000 9: 12000 10: 11025 11: 8000 12: 7350 13: Reserved 14: Reserved 15: frequency is written explictly | |
7 | private_bit | 1 | 固定为0 | |
8 | channel_configuration | 3 | 声道数 | |
9 | original_copy | 1 | 固定为0 | |
10 | home | 1 | 固定为0 | |
11 | adts_variable_header 可变头信息 | copyrighted_id_bit | 1 | 固定为0 |
12 | copyrighted_id_start | 1 | 固定为0 | |
13 | aac_frame_length | 13 | ADTS帧长度包括ADTS长度和AAC声音数据长度的和 | |
14 | adts_buffer_fullness | 11 | 固定为0x7FF。表示是码率可变的码流 | |
15 | number_of_raw_data_blocks_in_frame | 2 | 表示当前帧有number_of_raw_data_blocks_in_frame + 1 个原始帧(一个AAC原始帧包含一段时间内1024个采样及相关数据)。 |