美畅物联丨音视频基础入门:AAC音频格式解析

2024年7月26日
美畅物联丨音视频基础入门:AAC音频格式解析

​我们常常提到畅联云平台的视频汇聚功能、视频编码技术,其实音频也是视频汇聚的其中一个关键因素,今天我们来谈谈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个采样及相关数据)。

美畅物联视频开放平台物联网开放平台AIoT底座视频中台物联底座视频底座视频汇聚视频联网视频智能视频接入网关GPU服务器边缘智能网关视频智能分析AI智能主机算法超市