我们常常提到畅联云平台的视频汇聚功能、视频编码技术,其实音频也是视频汇聚的其中一个关键因素,今天我们来谈谈AAC音频格式。
AAC(Advanced Audio Coding),作为一项前沿的音频编码技术,在数字音频的传输与存储领域占据重要地位。作为MPEG-2及MPEG-4标准的关键组成部分,AAC以其卓越的性能,为音频数据带来了前所未有的高质量体验。
音频码流在视频播放器中的位置如下所示
结构:
AAC原始码流(又称为“裸流”)是由一个一个的ADTS frame组成的。他们的结构如下图所示。
从图上可以总结出两点:
ADTS Frame = ADTS头+AAC ES(AAC音频数据)
ADTS头包含了AAC文件的采样率、通道数、帧数据长度等信息。ADTS头分为固定头信息和可变头信息两个部分,固定头信息在每个帧中的是一样的,可变头信息在各个帧中并不是固定值。ADTS头一般是7个字节((28+28)/ 8)长度,如果需要对数据进行CRC校验,则会有2个Byte的校验码,所以ADTS头的实际长度是7个字节或9个字节。
固定头信息:adts_fixed_header()
· syncword :同步头 总是0xFFF, all bits must be 1,代表着一个ADTS帧的开始
· Layer:always: '00'
· profile:表示使用哪个级别的AAC,有些芯片只支持AAC LC 。在MPEG-2 AAC中定义了4种:
· sampling_frequency_index:表示使用的采样率下标
· channel_configuration: 表示声道数
可变头信息:adts_variable_header()
· 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个采样及相关数据)。