【音视频 | AAC】AAC音频编码详解

2023-12-19

????博客主页????:???? https://blog.csdn.net/wkd_007 ????
????博客内容????:????嵌入式开发、Linux、C语言、C++、数据结构、音视频????
????本文内容????:????介绍AAC音频编码????
????金句分享????:????你不能选择最好的,但最好的会来选择你——泰戈尔????

本文未经允许,不得转发!!!


在这里插入图片描述

????一、概述

AAC(Advanced Audio Coding),中文名:高级音频编码。出现于1997年,基于MPEG-2的音频编码技术。由Fraunhofer IIS、杜比实验室、AT&T、索尼等公司共同开发,目的是取代MP3格式。

2000年,MPEG-4标准出现后,AAC重新集成了其特性,加入了SBR技术和PS技术,为了区别于传统的MPEG-2 AAC又称为MPEG-4 AAC。

本文简单地介绍AAC编码的一些基础概念,以及AAC格式的文件怎么组成的,需要了解更多AAC编码的内容,可以查看其相关文档《ISO-IEC 14496-3_2009》。

在这里插入图片描述

????二、AAC编码规格(Profile)

AAC共有9种规格(Profile),以适应不同的场合的需要:

  • MPEG-2 AAC LC :低复杂度规格(Low Complexity) 注:比较简单,没有增益控制,但提高了编码效率,在中等码率的编码效率以及音质方面,都能找到平衡点。
  • MPEG-2 AAC Main :主规格
  • MPEG-2 AAC SSR :可变采样率规格(Scaleable Sample Rate)
  • MPEG-4 AAC LC :低复杂度规格(Low Complexity)—现在的手机比较常见的MP4文件中的音频部份就包括了该规格音频文件
  • MPEG-4 AAC Main :主规格 注:包含了除增益控制之外的全部功能,其音质最好
  • MPEG-4 AAC SSR :可变采样率规格(Scaleable Sample Rate)
  • MPEG-4 AAC LTP :长时期预测规格(Long Term Predicition)
  • MPEG-4 AAC LD :低延迟规格(Low Delay)
  • MPEG-4 AAC HE :高效率规格(High Efficiency)—这种规格适合用于低码率编码,有Nero ACC 编码器支持

最早是基于MPEG-2标准,称为:MPEG-2 AAC。后来MPEG-4标准在原来基础上增加了一些新技术,称为:MPEG-4 AAC。

流行的Nero AAC编码程序只支持LC,HE,HEv2这三种规格,编码后的AAC音频,规格显示都是LC。HE其实就是AAC(LC)+ SBR技术,HEv2就是AAC(LC)+ SBR + PS技术;

这里再说明一下HE和HEv2的相关内容:

HE:HE-AAC v1(又称AACPlusV1,SBR),用容器的方法实现了AAC(LC)+SBR技术。SBR其实代表的是Spectral Band Replication(频段复制)。简要叙述一下,音乐的主要频谱集中在低频段,高频段幅度很小,但很重要,决定了音质。如果对整个频段编码,若是为了保护高频就会造成低频段编码过细以致文件巨大;若是保存了低频的主要成分而失去高频成分就会丧失音质。SBR把频谱切割开来,低频单独编码保存主要成分,高频单独放大编码保存音质,“统筹兼顾”了,在减少文件大小的情况下还保存了音质,完美的化解这一矛盾。

HEv2:用容器的方法包含了HE-AAC v1和PS技术。PS指“parametric stereo”(参数立体声)。原来的立体声文件文件大小是一个声道的两倍。但是两个声道的声音存在某种相似性,根据香农信息熵编码定理,相关性应该被去掉才能减小文件大小。所以PS技术存储了一个声道的全部信息,然后,花很少的字节用参数描述另一个声道和它不同的地方。


在这里插入图片描述

????三、AAC封装格式

AAC有两种封装格式:

  • ADIF :全称 Audio Data Interchange Format,音频数据交换格式,该格式一般应用在将音频通过写文件方式存储在磁盘里的场景,不能进行随机访问,不允许在文件中间开始进行解码;只有拿到整个文件时才能开始进行渲染播放;
  • ADTS :全称 Audio Data Transport Stream,音频数据传输流,该格式的特征是用同步字节进行将 AAC 音频截断,然后可以允许客户端在任何地方进行解码播放,适合网络传输场景;

简单来说,ADTS可以在任意帧进行解码,每一个帧都有头信息,但ADIF却只有一个统一的头,所以必须得到所有的数据后才能解码。一个帧就能单独解码。

两种Header的形式也不同,目前一般编码后和抽取出的基本都是ADTS格式音频流。

✨3.1 ADIF 格式

这个格式比较少见,简单认识一下即可,下图是ADIF格式的序列,由 adif_header byte_alignment raw_data_stream 三部分组成。byte_alignment是用来做字节对齐的,也就是说,ADIF格式由一个ADIF头信息(adif_header) 和 原始数据流(raw_data_stream) 构成。
在这里插入图片描述
下面看看ADIF头信息包括哪些内容,如下图:
在这里插入图片描述

✨3.2 ADTS 格式

ADTS 格式的AAC音频流是由一个个的ADTS帧组成的,下图是ADTS序列的语法,整个序列由若干个 adts_frame 组成。
在这里插入图片描述
每个ADTS帧都是由 ADTS头部 AAC音频数据 组成,下图是adts_frame的语法, adts_fixed_header (固定头部信息)和 adts_variable_header (可变头部信息)都属于ADTS头部数据, raw_data_block 表示AAC音频原始数据块。
在这里插入图片描述

下图是网络上对AAC音频流总结的一张图片,可以帮助我们宏观地认识AAC音频流的ADTS格式。
在这里插入图片描述

✨3.2.1 ADTS头部

ADTS头部有两部分,分为固定头部( adts_fixed_header )、可变头部( adts_variable_header ):

固定头部( adts_fixed_header )
在这里插入图片描述
字段解析:

  • syncword :占用12bit;
    所有的bit位都是1。总是0xFFF,代表一个ADTS帧的开始,作为分界符,用于同步每帧起始位置。
  • ID :占用 1 bit;
    表示MPEG版本,0代表MPEG-4, 1代表MPEG-2,一般用 0,因为都是属于 MPEG 的规范.。
  • layer :占用 2 bit;
    一直是0;
  • protection_absent :占用 1 bit;
    设置 1 表示没有CRC,整个ADST头为7字节;0 表示有CRC,整个ADST头为9字节。
  • profile_ObjectType :占用 2 bit,表示使用的AAC规格(profile);
    该字段的解释取决于 ID 位的值。如果ID等于 1 ,则该字段包含与ISO/IEC 13818-7中定义的ADTS流中的配置文件字段相同的信息,也就是MPEG-2的规格;当 ID 为0是表示的是MPEG-4的规格,该字段的值等于 Audio Object Type 的值减1。字段取值如下面图片的表格。
    在这里插入图片描述
  • sampling_frequency_index :占用 4 bit;
    表示采样率下标,字段取值及解释如下图:
    在这里插入图片描述
  • private_bit :占用 1 bit,编码时设置为0,解码时忽略;
    详细解释参见 ISO/IEC 11172-3, subclause 2.4.2.3 (Table 8)
  • channel_configuration :占用 3 bit;
    通道配置即声道数,一般 2 表示立体声双声道。更多的值参考下图:
    在这里插入图片描述
  • original_copy :占用 1 bit,编码时设置为0,解码时忽略;
  • home :占用 1 bit,编码时设置为0,解码时忽略。

可变头部( adts_variable_header )
在这里插入图片描述
字段解析:

  • copyright_identification_bit :占用 1 bit,编码时设置为0,解码时忽略;
  • copyright_identification_start :占用 1 bit,编码时设置为0,解码时忽略;
  • frame_length :占用 13 bit,当前 ADTS 帧的长度,包括 ADTS 头(固定+可变)和 AAC 原始流,单位byte;
  • adts_buffer_fullness :占用 11 bit, 0x7FF 表示码率可变的码流, 0x000 表示固定码率的码流;
  • number_of_raw_data_blocks_in_frame :占用 2 bit;
    该字段表示当前ADST帧中所包含的AAC帧的个数减一。为了最大的兼容性通常每个ADTS frame 包含一个AAC frame,所以该值一般为0。一个AAC原始帧包含一段时间内1024个采样及相关数据

crc(16bit)
当protection_absent == 0时,表示存在CRC,这里的两字节CRC,就携带了CRC信息。

在这里插入图片描述

????四、总结

????本文介绍了AAC编码的一些基础知识,重点介绍了ADTS帧的相关内容。

在这里插入图片描述
如果文章有帮助的话,点赞????、收藏⭐,支持一波,谢谢 ????????????

参考资料:
音频压缩技术:AAC编码
AAC编码介绍
【网络通信 – 直播】音频流编码 – AAC 基础
AAC的ADTS头文件信息介绍
音频编码之aac编码原理

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【音视频 | AAC】AAC音频编码详解 的相关文章

  • 房屋结构健康监测:守护城市生命线的明眼与智慧

    在12月18日 一场突如其来的灾难降临重庆 房屋建筑坍塌 造成3人死亡2人受伤的严重意外 这场悲剧提醒我们 房屋结构的健康不仅关乎我们的生命安全 更是社会稳定的重要基石 如何预防房屋结构问题 确保城市生命线的安全 成为了一个迫切需要解决的问

随机推荐

  • 鸿蒙(HarmonyOS)项目方舟框架(ArkUI)更改应用图标

    鸿蒙 HarmonyOS 项目方舟框架 ArkUI 更改应用图标 一 操作环境 操作系统 Windows 10 专业版 IDE DevEco Studio 3 1 SDK HarmonyOS 3 1 二 更改图标 图标的位置 entry g
  • 解释Nginx用途

    Nginx是一种流行的开源Web服务器软件 主要用于处理HTTP请求和响应 它的主要用途包括 反向代理 Nginx可以作为反向代理服务器 将客户端的请求转发到后端服务器集群上 它具有高可用性 负载均衡和容错能力 能够处理大量的并发请求 静态
  • 数据结构算法-快速排序

    核心思路 快速排序算法核心思路 选择一个 基准 元素 将数组分为两个子数组 一个包含比基准小的元素 另一个包含比基准大的元素 然后对这两个子数组进行递归排序 基准数 初始化两个索引 i 和 j 分别子数组的开头和结尾 初始化基准元素 bas
  • Python使用HTTP库发送GET请求的示例——轻松探索网络世界

    大家好 今天我要给大家介绍一个非常实用的Python库 HTTP库 它可以帮助我们轻松地发送HTTP请求 今天 我们就来学习一下如何使用HTTP库发送GET请求 首先 我们需要安装HTTP库 如果你还没有安装 可以通过pip命令进行安装 复
  • 鸿蒙(HarmonyOS)项目方舟框架(ArkUI)更改应用图标

    鸿蒙 HarmonyOS 项目方舟框架 ArkUI 更改应用图标 一 操作环境 操作系统 Windows 10 专业版 IDE DevEco Studio 3 1 SDK HarmonyOS 3 1 二 更改图标 图标的位置 entry g
  • 在Java培训班如何进阶学习

    Java作为一门广泛应用的编程语言 学习者在Java培训班学习之后 如何进一步提升自己的技能水平是一个重要的问题 下面将介绍一些进阶学习的方法 帮助学习者更好地掌握Java编程技能 1 深入学习核心概念 在Java培训班学习过程中 学习者已
  • Adobe Reader等停止工作的原因不少,但可修复性很强

    这种情况是随机发生的 比如如果你在正常的状态下关闭了电脑 第二天打开Adobe Reader时可能就会出现这个错误 但别担心 在这篇文章中 我们将解释为什么Adobe Reader或Acrobat DC停止工作 以及我们如何解决这个问题 是
  • 【保姆级教程】使用tensorflow_hub的预训练模型实现神经风格迁移

    目录 一 神经风格迁移 二 安装依赖 三 实践 四 其他 一 神经风格迁移 神经风格迁移 是一种优化技术 主要将两个图像 内容 图像 和 风格
  • 企业数字化转型进入深海区:生成式AI时代下如何制定数据战略

    随着科技的不断进步 企业数字化转型已经不再是简单的概念 而是正在进入一个全新的深海区 在这个深海区 数据变得至关重要 而生成式人工智能 AI 的兴起更是推动了数字化转型的飞速发展 本文将探讨在这个生成式AI时代下 企业应如何制定有效的数据战
  • 探索关系:Python中的Statsmodels库进阶

    目录 写在开头 1 多元线性回归 场景介绍 2 Logistic回归 2 1 Logistic回归的概念 2 2 应用案例 2 2 1 建立模型和预测
  • 房屋坍塌预警监测特点,建设建筑结构监测安全系统

    近年来 随着城市化的快速发展 房屋建筑的数量不断增加 但同时也伴随着一些安全隐患 其中 房屋坍塌是其中一个重要的安全隐患 给人们的生命财产安全带来了巨大的威胁 因此 如何有效地监测和预警房屋坍塌成为了当前的重要课题 一 房屋坍塌预警监测系统
  • 基于生成式对抗网络的视频生成技术

    随着人工智能的快速发展 生成式对抗网络 GAN 作为一种强大的生成模型 已经在多个领域展现出了惊人的能力 其中 基于GAN的视频生成技术更是引起了广泛的关注 本文将介绍基于生成式对抗网络的视频生成技术的原理和应用 探索其对电影 游戏等领域带
  • Spring Boot整合Sharding-JDBC实现强制路由

    目录 强制路由 HintManager 强制分片 强制访问主库 强制路由 ShardingSphere使用ThreadLocal管理分片键值进行Hint强制路由 可以通过编程的方式向HintManager中添加分片值 该分片值仅在当前线程内
  • 如何有效预警城市内涝,内涝积水监测仪效果

    城市内涝一直都是一个比较严肃的问题 因为对于城市的基础设施和居民的日常生活来讲 都会产生双重的影响 还有可能会威胁着人们的生命财产安全 所以采用内涝积水监测仪有效预警城市内涝是一种先进的高科技手段 不仅可以达到实时监测路面积水的目的 还可以
  • 物联网数据采集网关在工厂数字化转型中的应用

    物联网数据采集网关能将各种传感器 执行器等设备连接在一起 通过收集 处理和传输来自各种物理设备的信息 实现数据的集成和分析 同时可通过云平台进行数据交互 它具有数据转换 数据处理 数据传输等功能 是工厂数字化转型的核心组件 随着科技的飞速发
  • 【EI会议征稿】第四届计算机网络安全与软件工程国际学术会议(CNSSE 2024)

    第四届计算机网络安全与软件工程国际学术会议 CNSSE 2024 2024 4th International Conference on Computer Network Security and Software Engineering
  • 最新51单片机毕业设计项目集合

    文章目录 1前言 2 STM32 毕设课题 3 如何选题 3 1 不要给自己挖坑 3 2 难度把控 3 3 如何命名题目 4 最后 1前言 更新单片机嵌入式选题后 不少学弟学妹催学长更新STM32和C51选题系
  • PCL片段

    PCL 包含目录 D project PCL PCL 1 13 1 include pcl 1 13 pcl D project PCL PCL 1 13 1 3rdParty Boost include boost 1 82 D proj
  • 题解 | #输出某一年的各个月份的天数#

    三方寄过去了 告诉我停止24届招聘 全部毁约 牛的 he芯 毁约应届生 34316 广西北部湾银行2022年校园招聘 广西北部湾银行股份有限公司2022届校园招聘 看终端大把大把15级的 这个14级是不是终端bg的白菜了 程序员面试六战六捷
  • 【音视频 | AAC】AAC音频编码详解

    博客主页 https blog csdn net wkd 007 博客内容 嵌入式开发 Linux C语言 C 数据结构 音视频 本文内容 介绍AAC音频编码 金句分享 你不能选择最好的 但最好的会来选择你 泰戈尔 本文未经允许 不得转发