红河州住房和建设局网站,北京网站怎么优化,页面跳转 英文,新公司网站建设分录文章目录 前言一、AAC音频中的ADTS二、解析ADTS信息1.标准文档中介绍2.解析3.采样率索引和值4.下载AAC标准文档 前言 调试嵌入式设备中播放aac音频的过程中#xff0c;了解了aac音频格式#xff0c;记录在此#xff0c;防止遗忘。 一、AAC音频中的ADTS ADTS#xff08;Audi… 文章目录 前言一、AAC音频中的ADTS二、解析ADTS信息1.标准文档中介绍2.解析3.采样率索引和值4.下载AAC标准文档 前言 调试嵌入式设备中播放aac音频的过程中了解了aac音频格式记录在此防止遗忘。 一、AAC音频中的ADTS ADTSAudio Data Transport Stream是AACAdvanced Audio Coding音频编码格式的一种常见的封装格式。它用于将AAC音频数据以分帧的方式进行包装和传输。 ADTS封装格式将AAC音频数据按照一定格式进行组织包括音频帧头信息和音频数据。每个ADTS帧由7个字节的帧头和音频数据组成。 帧头包含了音频帧的一些重要信息如采样率、声道数、位率、编码类型等。音频数据是经过AAC压缩的音频信号包含了实际的音频内容。 ADTS封装格式具有一定的错误容忍性和同步性。即使在传输过程中发生了丢包或错误接收端仍然可以根据帧头信息正确地解析音频数据。此外ADTS还可以通过添加同步头信息来实现同步传输确保音频数据在接收端正确播放。 使用ADTS封装格式的好处是它的普遍性和兼容性。它被广泛支持和应用于各种音频播放器、设备和转码器中包括流媒体传输、音频文件存储等场景。 需要注意的是ADTS只是AAC的一种封装格式而AAC编码格式还可以使用其他封装格式如ADIF、LOAS等。根据具体的需求和使用环境可以选择适合的AAC封装格式进行音频存储和传输。 【以上信息来源于ChatGPT】 二、解析ADTS信息
1.标准文档中介绍 ADTS 是一种用于传输 AAC 音频的文件格式头部包含了一些关键信息。下面是各个字段的意义及其作用 syncword12 位同步字用于标识 ADTS 头部的开始固定为 0xFFF。ID1 位表示 MPEG 标准的版本0 表示 MPEG-41 表示 MPEG-2。layer2 位表示编码层次一般设置为 0。protection_absent1 位表示帧是否包含错误检测字0 表示包含1 表示不包含。profile2 位表示 AAC 的编码配置文件。sampling_frequency_index4 位表示采样频率的索引值。private_bit1 位暂时不使用一般设置为 0。channel_configuration3 位表示音频通道的配置。original_copy1 位表示原始数据复制标志0 表示副本1 表示原始数据。home1 位暂时不使用一般设置为 0。copyright_identification_bit1 位版权标志位。copyright_identification_start1 位表示此帧是否为版权开始。acc_frame_length13 位表示 ADTS 帧的长度包括头部和音频数据。adts_buffer_fullness11 位表示音频缓冲区的填充量。number_of_raw_data_blocks_in_frame2 位表示 ADTS 帧中的原始数据块数。 2.解析
typedef struct
{unsigned syncword : 12;unsigned ID : 1;unsigned layer : 2;unsigned protection_absent : 1;unsigned profile : 2;unsigned sampling_frequency_index : 4;unsigned private_bit : 1;unsigned channel_configuration : 3;unsigned original_copy : 1;unsigned home : 1;//variableunsigned copyright_identification_bit : 1;unsigned copyright_identification_start : 1;unsigned acc_frame_length : 13;unsigned adts_buffer_fullness : 11;unsigned number_of_raw_data_blocks_in_frame : 2;
} aac_adts_fixed_header_t;int get_aac_header_from_adts(char *buf, int len, aac_adts_fixed_header_t *header)
{// 使用位操作解析 ADTS 固定头部header-syncword ((buf[0] 0x0F) 8) | buf[1];header-ID (buf[1] 3) 0x01;header-layer (buf[1] 1) 0x03;header-protection_absent buf[1] 0x01;header-profile (buf[2] 6) 0x03;header-sampling_frequency_index (buf[2] 2) 0x0F;header-private_bit (buf[2] 1) 0x01;header-channel_configuration ((buf[2] 0x01) 2) | (buf[3] 6);header-original_copy (buf[3] 5) 0x01;header-home (buf[3] 4) 0x01;header-copyright_identification_bit (buf[3] 3) 0x01;header-copyright_identification_start (buf[3] 2) 0x01;header-acc_frame_length ((buf[3] 0x03) 11) | (buf[4] 3) | (buf[5] 5);header-adts_buffer_fullness ((buf[5] 0x1F) 6) | (buf[6] 2);header-number_of_raw_data_blocks_in_frame buf[6] 0x03;return 0;
}上述代码通过位操作将adts头部信息全部取出来其实常用的也就采样率和帧长度因为aac音频是允许可变码率的所以每一帧都有可能长度不一样。 3.采样率索引和值 解析adts信息里的sampling_frequency_index索引需要找到对应实际的采样率值以方便设置给解码器。 4.下载AAC标准文档
AAC标准文档下载链接