美文网首页
音视频数据处理(三)-AAC音频码流分析

音视频数据处理(三)-AAC音频码流分析

作者: 码农修仙 | 来源:发表于2021-01-30 22:00 被阅读0次

一、AAC概述

AAC(Advanced Audio Coding),高级音频编码,是基于MPEG-2的音频编码技术,于1997年推出,主要用于取代MP3格式。2000年,随着MPEG-4标准的推出,AAC重新集成了新的技术(如SBR、PS等)特性,称之为MEPG-4 AAC。AAC共有9种规格,具体如下所示:

编号 规格 说明
1 MPEG-2 AAC LC 低复杂度规格
2 MPEG-2 AAC Main 主规格
3 MPEG-2 AAC SSR 可变采样率规格
4 MPEG-4 AAC LC 低复杂度规格
5 MPEG-4 AAC Main 主规格
6 MPEG-4 AAC SSR 可变采样率规格
7 MPEG-4 AAC LTP 长期预测规格
8 MPEG-4 AAC LD 低延迟规格
9 MPEG-4 AAC HE 高效率规格

AAC是一种高压缩比的音频压缩算法,本文主要从数据处理的角度对AAC音频码流进行分析。

二、AAC码流结构

AAC音频格式有两种:具体如下:

ADIF(Audio Data Interchange Format),音频数据交换格式:只有一个统一的头,必须得到所有数据后解码,适用于本地文件。

ADTS(Audio Data Transport Stream),音视数据传输流:每一帧都有头信息,可在任意帧解码,适用于传输流。

ADIF格式如下所示:

ADIF Header raw_data_stream

ADIF Header格式定义如下所示:

ADIF Header.png

ADTS码流是由连续的多个ADTS Frame组成的,ADTS Frame是由ADTS Header和AAC ES组成的,具体如下所示:

...... ADTS Header AAC ES ADTS Header AAC ES ......

ADTS Header,一般为7字节或9字节(有CRC校验),包含采样率、声道数、帧长度等信息,主要由adts_fixed_header、adts_variable_header、crc三部分组成。

adts_fixed_header:固定头,内容是不变的,每一帧的内容都相同,具体格式如下所示:

adts_fixed_header.png

syncword(12bit):同步字值为0xFFF,所有位为1。

ID(1bit):0表示MPEG-4,1表示MPEG-2。

layer(2bit):所有位值为0。

protection_absent(1bit):0表示有CRC,1表示没有CRC。

profile(2bit):配置级别,MPEG-2中定义profile取值如下图所示:

profile.png

sampling_frequency_index(4bit):采样频率,具体取值如下图所示:

sampling_frequency_index.png

private_bit(1bit):see ISO/IEC 11172-3, subclause 2.4.2.3 (Table 8)。

channel_configuration(3bit):表示声道数。

original/copy(1bit):编码默认值为0,解码忽略此值。

home(1bit):编码默认值为0,解码忽略此值。

adts_variable_header:可变头,内容是变化的,每一帧的内容存在变化,具体格式如下所示:

adts_variable_header.png

copyright_identification_bit(1bit):编码默认值为0,解码忽略此值。

copyright_identification_start(1bit):编码默认值为0,解码忽略此值。

frame_length(13bit):帧长度,即整个ADTS Frame的长度。

adts_buffer_fullness(11bit):默认值为0x7FF,表示可变码流。

number_of_raw_data_blocks_in_frame(2bit):其值加1表示ADTS Frame中原始数据块的个数。

三、AAC数据示例

利用UItraEdit工具打开一个AAC文件进行数据分析,如下图所示:

AAC.png

红色标注部分为ADTS Header,根据前文所述,第一个Header详细数据分析如下:

syncword(12bit):值为0xFFF。

ID(1bit):值为1,表示MPEG-2。

layer(2bit):值为0。

protection_absent(1bit):值为1,表示没有CRC。

profile(2bit):值为1,表示LC。

sampling_frequency_index(4bit):值为4,表示44100Hz。

private_bit(1bit):值为0。

channel_configuration(3bit):值为2,表示双通道。

original/copy(1bit):值为0。

home(1bit):值为0。

copyright_identification_bit(1bit):值为0。

copyright_identification_start(1bit):值为0。

frame_length(13bit):值为106,表示整个ADTS Frame的长度。

adts_buffer_fullness(11bit):值为0x7FF,表示可变码流。

number_of_raw_data_blocks_in_frame(2bit):值为0,表示ADTS Frame中原始数据块的个数为1。

相关文章

  • 视音频数据处理入门:AAC音频码流解析

    音频码流在视频播放器中的位置如下所示。 本文中的程序是一个AAC码流解析程序。该程序可以从AAC码流中分析得到它的...

  • FFmpeg转封装(7)

    音视频文件音视频流抽取 1.FFmpeg抽取音视频文件中的AAC音频流 2.FFmpeg抽取音视频文件中的H.26...

  • RTMP推送AAC ADTS音频流

    最近在弄rtmp推流AAC格式的音频流,于是对AAC文件解析一个总结。 第一部分 AAC ADTS格式分析 AAC...

  • ffmpeg 基础知识梳理 六 AAC音频码流解析

    本文中的程序是一个AAC码流解析程序。该程序可以从AAC码流中分析得到它的基本单元ADTS frame,并且可以简...

  • aac和h264软解码ffmpeg(十)

    前言 音视频解码是一个很常用的需求场景,同时它也是一个非常耗时的过程。压缩的音视频数据aac音频流,h264视频流...

  • Android 音视频之音频编码转换

    简介 我在之前文章《Android 音视频之音频AAC编码》中介绍过,如何将音频原始pcm数据进行AAC编码。本章...

  • AAC知识

    音频码流在视频播放器中的位置: AAC原始码流(又称为“裸流”)是由一个一个的ADTS(Audio Data Tr...

  • FLV解析

    之前的文章里已经介绍了音频码流AAC和视频码流H.264,接下来就是要把他们打包并封装格式了。 FLV用途 FLV...

  • AAC格式及音频码流解析

    介绍 AAC的音频文件格式有ADIF & ADTS: ADIF:Audio Data Interchange Fo...

  • 音视频开发学习 解析AAC码流中的ADTS frame

    音频码流在视频播放器中的位置如下所示。 一、AAC音频编码介绍 AAC共有9种规格,以适应不同的场合的需要: MP...

网友评论

      本文标题:音视频数据处理(三)-AAC音频码流分析

      本文链接:https://www.haomeiwen.com/subject/lqtdtltx.html