音视频编解码技术:AAC 音频编码技术_aac编解码库-程序员宅基地

技术标签: aac  音视频  音视频开发  视频编解码  音视频开发进阶  

本文目录:

  • 一、AAC编码概述
  • 二、AAC编码规格简述
  • 三、AAC编码的特点
  • 四、AAC音频文件格式

一、AAC编码概述

AAC是高级音频编码(Advanced Audio Coding)的缩写,出现于1997年,最初是基于MPEG-2的音频编码技术,目的是取代MP3格式。2000年,MPEG-4标准出台,AAC重新集成了其它技术包括SBR或PS特性,目前AAC可以定义为⼀种由 MPEG-4 标准定义的有损音频压缩格式

本文福利, 免费领取C++音视频学习资料包、技术视频/代码,内容包括(音视频开发,面试题,FFmpeg ,webRTC ,rtmp ,hls ,rtsp ,ffplay ,编解码,推拉流,srs)↓↓↓↓↓↓见下面↓↓文章底部点击免费领取↓↓

二、AAC编码规格简述

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

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 编码器支持

流行的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编码的特点

(1). AAC是一种高压缩比的音频压缩算法,但它的压缩比要远超过较老的音频压缩算法,如AC-3、MP3等。并且其质量可以同未压缩的CD音质相媲美。

(2). 同其他类似的音频编码算法一样,AAC也是采用了变换编码算法,但AAC使用了分辨率更高的滤波器组,因此它可以达到更高的压缩比。

(3). AAC使用了临时噪声重整、后向自适应线性预测、联合立体声技术和量化哈夫曼编码等最新技术,这些新技术的使用都使压缩比得到进一步的提高。

(4). AAC支持更多种采样率和比特率、支持1个到48个音轨、支持多达15个低频音轨、具有多种语言的兼容能力、还有多达15个内嵌数据流。

(5). AAC支持更宽的声音频率范围,最高可达到96kHz,最低可达8KHz,远宽于MP3的16KHz-48kHz的范围。

(6). 不同于MP3及WMA,AAC几乎不损失声音频率中的甚高、甚低频率成分,并且比WMA在频谱结构上更接近于原始音频,因而声音的保真度更好。

(7). AAC采用优化的算法达到了更高的解码效率,解码时只需较少的处理能力。

四、AAC音频文件格式

1. ACC 音频文件格式类型

AAC的音频文件格式有ADIF & ADTS:

ADIF:Audio Data Interchange Format 音频数据交换格式。这种格式的特征是可以确定的找到这个音频数据的开始,不需进行在音频数据流中间开始的解码,即它的解码必须在明确定义的开始处进行,这种格式常用在磁盘文件中。

ADTS:Audio Data Transport Stream 音频数据传输流。这种格式的特征是它是一个有同步字的比特流,解码可以在这个流中任何位置开始。它的特征类似于mp3数据流格式。

简单说,ADTS可以在任意帧解码,也就是说它每一帧都有头信息。ADIF只有一个统一的头,所以必须得到所有的数据后解码。这两种的header的格式也是不同的,一般编码后的和抽取出的都是ADTS格式的音频流。

AAC的ADIF文件格式如下:

header()

raw_data_stream()

AAC的ADTS文件中一帧的格式如下:

...

syncword

header()

error_check()

raw_data_block()

...

ADTS格式中两边的空白矩形表示当前一帧前后的数据。

2. ADIF 的 Header 结构

ADIF 的头信息如下图:

ADIF头信息位于AAC文件的起始处,接下来就是连续的 Raw Data Blocks。

3. ADTS 的 Header 头结构

一个 AAC 原始数据块长度是可变的,对原始帧加上 ADTS 头的封装,就形成了 ADTS 帧。ADTS 头中相对重要的信息有:采样率,声道数,帧长度 ,每一个带 ADTS 头信息的 AAC 流会清晰的告诉解码器它需要的这些信息,解码器才能解析读取。一般情况下 ADTS 的头信息都是 7 个字节,分为 2 部分:

  - adts_fixed_header(); —— 固定头信息,头信息中的每一帧都相同.

  - adts_variable_header(); —— 可变头信息,头信息则在帧与帧之间可变.

ADTS 的固定头信息:

Syncword: 总是0xFFF,代表一个ADTS帧的开始, 用于同步,解码器可通过0xFFF确定每个ADTS的开始位置.因为它的存在,解码可以在这个流中任何位置开始, 即可以在任意帧解码**。

ID:MPEG Version: 0 for MPEG-4, 1 for MPEG-2

Layer:always: '00'

Protection_absent:Warning, set to 1 if there is no CRC and 0 if there is CRC

Profile:表示使用哪个级别的AAC,如profile的值等于 Audio Object Type的值减1,即profile = MPEG-4 Audio Object Type - 1

sampling_frequency_index: 采样率的下标

channel_configuration:声道数. 比如2表示立体声双声道.

aac_frame_length: 一个ADTS帧的长度包括ADTS头和AAC原始流.

adts_buffer_fullness:0x7FF 说明是码率可变的码流.

number_of_raw_data_blocks_in_frame:表示ADTS帧中有number_of_raw_data_blocks_in_frame + 1个AAC原始帧.

在实际开发AAC编解码的时候,尤其是封装ADTS帧的时候,如何设置相关的Header的值,可以参考如下wiki内容:

  • https://wiki.multimedia.cx/index.php?title=MPEG-4_Audio
  • https://wiki.multimedia.cx/index.php/ADTS

注意:ACC LC和HE在采样率设置方面不同,LC格式的为正常索引,HE格式的索引为除2后对应的采样索引,这是因为:HE使用了SBR技术,即 Spectral Band Replication(频段复制),所以存储同样的音频内容,HE文件较小。使用时采样率为LC的一半。

ADTS的可变头信息:

(1)Syncword 存在的目的是为了找出帧头在比特流中的位置,ADTS格式的帧头同步字为12比特的“1111 1111 1111”.

(2)ADTS的头信息为两部分组成,其一为固定头信息,紧接着是可变头信息。固定头信息中的数据每一帧都相同,而可变头信息则在帧与帧之间可变。

4. AAC文件处理流程

(1). 判断文件格式,确定为ADIF或ADTS

(2). 若为ADIF,解ADIF头信息,跳至第6步。

(3). 若为ADTS,寻找同步头。

(4). 解ADTS帧头信息。

(5). 若有错误检测,进行错误检测。

(6). 解块信息。

(7). 解元素信息。

注意:有时候在处理AAC音频流的时候 (比如:把 AAC 音频的 ES 流从 FLV 封装格式中抽出来送给硬件解码器),编码后的 AAC 文件在PC或者手机上不能播放,导致播放错误,很大可能的原因是 AAC 文件的每一帧缺少 ADTS 头信息文件的包装拼接,这时需要加上头文件 ADTS 即可。

本文福利, 免费领取C++音视频学习资料包、技术视频/代码,内容包括(音视频开发,面试题,FFmpeg ,webRTC ,rtmp ,hls ,rtsp ,ffplay ,编解码,推拉流,srs)↓↓↓↓↓↓见下面↓↓文章底部点击免费领取↓↓

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/m0_60259116/article/details/131294521

智能推荐

能贴在Windows11桌面且与手机同步的备忘记事便签_win11 stickly note 手机版-程序员宅基地

文章浏览阅读2k次。Windows11系统已经有不少人在用,如果你也把Windows系统升到了win11,为了方便工作,首先要确定一下win11里自己常用办公软件是否在。如果是健忘一族,一定要给自己找一款好用的便签。一款好用的便签,不但能记事备忘,还能有效地梳理工作,提高工作效率。有人找便签,喜欢找能贴在Windows11桌面,且能与手机同步的备忘记事便签。这样的便签存在吗?如果存在的话,哪个便签比较好用呢?这样的便签当然有,能贴在桌面使用的跨平台同步便签敬业签非常好用。敬业签支持在Windows、web、Android_win11 stickly note 手机版

Android 自定义View之仿华为圆形加载进度条_android studio仿华为圆形加载框-程序员宅基地

文章浏览阅读5.4k次,点赞9次,收藏26次。效果图实现思路可以看出该View可分为三个部分来实现最外围的圆,该部分需要区分进度圆和底部的刻度圆,进度部分的刻度需要和底色刻度区分开来中间显示的文字进度,需要让文字在View中居中显示旋转的小圆点,小圆点需要模拟小球下落运动时的加速度效果,开始下落的时候慢,到最底部时最快,上来时速度再逐渐减慢具体实现先具体细分讲解,博客最后面给出全部源码(1)首先为View创建自定义的xml属性 在工程_android studio仿华为圆形加载框

Zabbix的介绍和部署_zabbix网络中心-程序员宅基地

文章浏览阅读707次。zabbix agent安装在被监控的主机上,zabbix agent负责定期收集客户端本地各项数据,并发送至 zabbix server 端,zabbix server 收到数据后,将数据存储到数据库中,用户基于 Zabbix WEB 可以看到数据在前端展现图像。_zabbix网络中心

linux网络下载_liunx网上下载-程序员宅基地

文章浏览阅读372次。网站下载wget 是一个用于文件下载的命令行工具用wget可以下载网页或远程文件:$ wget URL多处URL下载$ wget URL1 URL2 URL3..下载文件输出文件到指定文件$ wget ftp://example.com/somefile.img -o dloaded_file.img -o log指定重试次数$ wget -t 5 URL使用--limit-rate对wget限速$ wget --limit-rate 20k http://.....可以使用k和m指_liunx网上下载

架构师必读 : 微服务架构设计指南-程序员宅基地

文章浏览阅读109次。每个人都听说过微服务。但你知道怎么设计吗? 微服务是当今软件工程师的一个热门话题。让我们了解如何使用微服务架构风格构建真正模块化、业务敏捷的IT系统。一、微服务概念微服务体系结构由轻量级、松散耦合的服务集合组成。每个服务都实现了单个业务功能。理想情况下,这些服务应该是具有足够的内聚性,可以独立地开发、测试、发布、部署、扩展、集成和维护。正式定义 “微服务架构风格是一种将单个应用程序开发为一组小型..._微服务工程师 百度百科

2023-2024年人形机器人行业报告合集(精选397份)_高工 人形机器人报告-程序员宅基地

文章浏览阅读710次,点赞22次,收藏17次。2024人形机器人力传感器行业研究报告:人形机器人商业化图景远大,引爆六维力传感器市场空间。2024机器人行业研究报告:英伟达赋能机器人AI超预期,二季度迎机器人定点最大催化。2024人形机器人的Optimus时刻报告:IMU(姿态感知),旧火新茶,其时已至。2024人形机器人报告:MEMS IMU或为人形机器人实现两足运动平衡的最佳方案。2024人形机器人丝杠报告:丝杠作为人形机器人核心传动部件,正面临新一轮产业机遇。2024人形机器人精密减速器报告:机器人核心部件有望持续受益人形机器人产业带动。_高工 人形机器人报告

随便推点

[ArcGIS笔记] 栅格图像如何显示经纬度坐标_栅格 坐标-程序员宅基地

文章浏览阅读1.3w次,点赞3次,收藏31次。网上下载的栅格数据是WGS84坐标系,显示的是xy坐标,想要让它显示经纬度坐标,步骤如下:1.设置合适的坐标系。(1)了解数据的原有坐标系打开栅格数据后会发现没有空间参考信息,需要首先设置一下坐标系。注意一定要和源数据的坐标系相同。比如说本数据数采用WGS84的投影坐标系。(2)输出TIFF图像本人通过工具箱的定义投影、属性的编辑,都没有办法给栅格数据添加坐标系,于是上网查找找到了一种办法,如图:首先打开图层组的属性,设置数据框属性的坐标系为web mercator投影。然后右键图层,_栅格 坐标

istio 简介-程序员宅基地

文章浏览阅读4.9k次,点赞7次,收藏30次。文章目录什么是 istio?istio 解决了什么痛点?总结istio 的解决方案流量管理安全性可观察性平台支持什么是 istio?讲多了记不住,那就:服务网格 + 微服务治理。istio 解决了什么痛点?了解Istio得从微服务架构谈起,微服务是在2012年提出的概念,其根本思想是通过拆分原则,希望一个服务只负责业务中一个独立的功能,这样任何一个需求不会因为发布或者维护而影响到不相关的服务,所有服务都可以做到独立部署运维,当然这也只是微服务架构给我们带来的好处之一。但是:首先,原来的单个应用_istio

c语言课程图书信息管理系统,c语言课程设图书信息管理系统.doc-程序员宅基地

文章浏览阅读434次。c语言课程设图书信息管理系统课程设计报告课程:高级语言程序设计学号: 1010431059姓名: 胡维维班级: 嵌入式一班教师: 王群芳时间: 2011年6月计算机科学与技术系设计名称:图书信息管理系统设计图书信息包括:登录号、书名、作者名、分类号、出版单位、出版时间、价格等。试设计一图书信息管理系统,使之能提供以下功能:1、图书信息录入功能2、图书信息浏览功能3、图书信息查询功能 ..._c语2、图书信息管理图书信息包括:登录号、书名、作者名、分类号、出版单位、出版

webpack4脚手架搭建1——打包并编译es6_webpack编译es6语法打包-程序员宅基地

文章浏览阅读695次。使用webpack执行webpack -h 查看webpack命令行使用说明安装webpack与webpack-cli安装webpack cnpm install webpack -g,安装后执行webpack -v会提示安装webpack-cli,这是因为在webpack 3中,webpack本身和它的CLI以前都是在同一个包中,但在第4版中,他们已经将两者分开来更好地管理它们。所以用 c..._webpack编译es6语法打包

信息通信服务、电子商务及物流服务的创新与发展_信息通信,电子商务-程序员宅基地

文章浏览阅读828次。2019年,国际互联网的蓬勃发展促使“物联网”(IoT)、云计算、大数据、人工智能等新兴技术的普及和应用。而在物流、电子商务、信息通信网络服务领域,亦或将成为信息时代最重要的基础设施。近几年,数字经济正走向成熟,用户的接受能力也越来越高,因此,信息通信服务、电子商务及物流服务都迎来了新的机遇。这些领域正经历着蓬勃的创新变革和不断变化,也是非常值得关注的领域。2020年,我国在推进“一带一路”倡议、开放世界经济格局方面取得重大成功,也促进了互联网和电子商务的发展。_信息通信,电子商务

websocket.js的封装,包含保活机制,通用_websocket保活-程序员宅基地

文章浏览阅读774次。websocket的封装,包含保活机制_websocket保活