音视频入门基础:AAC专题(11)——AudioSpecificConfig简介

news2024/11/24 11:59:57

=================================================================

音视频入门基础:AAC专题系列文章:

音视频入门基础:AAC专题(1)——AAC官方文档下载

音视频入门基础:AAC专题(2)——使用FFmpeg命令生成AAC裸流文件

音视频入门基础:AAC专题(3)——AAC的ADTS格式简介

音视频入门基础:AAC专题(4)——ADTS格式的AAC裸流实例分析

音视频入门基础:AAC专题(5)——FFmpeg源码中,判断某文件是否为AAC裸流文件的实现

音视频入门基础:AAC专题(6)——FFmpeg源码中解码ADTS格式的AAC的Header的实现

音视频入门基础:AAC专题(7)——FFmpeg源码中计算AAC裸流每个packet的size值的实现

音视频入门基础:AAC专题(8)——FFmpeg源码中计算AAC裸流AVStream的time_base的实现

音视频入门基础:AAC专题(9)——FFmpeg源码中计算AAC裸流每个packet的duration和duration_time的实现

音视频入门基础:AAC专题(10)——FFmpeg源码中计算AAC裸流每个packet的pts、dts、pts_time、dts_time的实现

音视频入门基础:AAC专题(11)——AudioSpecificConfig简介

音视频入门基础:AAC专题(12)——FFmpeg源码中,解码AudioSpecificConfig的实现

=================================================================

一、引言

MPEG-4包括一个以统一方式处理不同音频格式组的系统。每种格式都用一个唯一的音频对象类型(Audio Object Type, 简称AOT)来表示。所有Audio Object Type共享的通用格式全局header称为音频特定配置(Audio Specific Config)。简单来讲Audio Specific Config是MPEG-4音频的全局header,该header包含了音频编码器的重要信息,比如编码器类别,音频频率,音频通道数等。比如,如果FLV文件中的音频为AAC格式,那正常情况下它必定存在一个Audio Tag包含Audio Specific Config。

二、AudioSpecificConfig

《ISO14496-3-2009.pdf》第52页到第55页定义了AudioSpecificConfig,其包含的属性如下:

其中,比较重要的是audioObjectType、samplingFrequencyIndex和channelConfiguration属性。

(一)audioObjectType属性

audioObjectType:音频对象类型,可以理解为音频压缩编码格式。该属性定义在《ISO14496-3-2009.pdf》第35页,其取值如下:

即:

0: Null
1: AAC Main
2: AAC LC (Low Complexity)
3: AAC SSR (Scalable Sample Rate)
4: AAC LTP (Long Term Prediction)
5: SBR (Spectral Band Replication)
6: AAC Scalable
7: TwinVQ
8: CELP (Code Excited Linear Prediction)
9: HXVC (Harmonic Vector eXcitation Coding)
10: Reserved
11: Reserved
12: TTSI (Text-To-Speech Interface)
13: Main Synthesis
14: Wavetable Synthesis
15: General MIDI
16: Algorithmic Synthesis and Audio Effects
17: ER (Error Resilient) AAC LC
18: Reserved
19: ER AAC LTP
20: ER AAC Scalable
21: ER TwinVQ
22: ER BSAC (Bit-Sliced Arithmetic Coding)
23: ER AAC LD (Low Delay)
24: ER CELP
25: ER HVXC
26: ER HILN (Harmonic and Individual Lines plus Noise)
27: ER Parametric
28: SSC (SinuSoidal Coding)
29: PS (Parametric Stereo)
30: MPEG Surround
31: (Escape value)
32: Layer-1
33: Layer-2
34: Layer-3
35: DST (Direct Stream Transfer)
36: ALS (Audio Lossless)
37: SLS (Scalable LosslesS)
38: SLS non-core
39: ER AAC ELD (Enhanced Low Delay)
40: SMR (Symbolic Music Representation) Simple
41: SMR Main
42: USAC (Unified Speech and Audio Coding) (no SBR)
43: SAOC (Spatial Audio Object Coding)
44: LD MPEG Surround
45: USAC

根据《ISO14496-3-2009.pdf》第55页,audioObjectType占5位或11位。如果其前5位的值为0到30,audioObjectType总共只占5位(8位等于1个字节);如果前5位值为31(即0b11111),audioObjectType总共占11位,其前5位后面还需要加上6位(32 + audioObjectTypeExt)来进行扩展,audioObjectTypeExt的值为audioObjectType减去32。比如音频对象类型为DST (Direct Stream Transfer),根据上面的表格,audioObjectType的值为35,35超过30,所以audioObjectType的前5位应为0b11111,后6位应为:35 - 32 = 3,也就是0b000011,所以audioObjectType的实际二进制存贮最终为:0b11111000011:

(二)samplingFrequencyIndex属性

samplingFrequencyIndex:占4位。根据《ISO14496-3-2009.pdf》第59页,samplingFrequencyIndex表示音频的采样频率:

根据《ISO14496-3-2009.pdf》第52页和第59页,如果samplingFrequencyIndex的值为15(0x0F),在samplingFrequencyIndex属性后面还需增加24位(3字节)的samplingFrequency属性,实际音频采样率直接由samplingFrequency的值表示:

(三)channelConfiguration属性

channelConfiguration:占4位。根据《ISO14496-3-2009.pdf》第60页。channel_configuration表示音频声道数。比如channel_configuration值为1表示是单声道(center front speaker);值为2表示是双声道(left, right front speakers);值为3:三声道(center, left, right front speakers);值为4:四声道(center, left, right front speakers, rear surround speakers);值为5:五声道(center, left, right front speakers, left surround, right surround rear speakers);值为6: 5.1声道(center, left, right front speakers, left surround, right surround rear speakers, front low frequency effects speaker);值为7:7.1声道(center, left, right center front speakers, left, right outside front speakers, left surround, right surround rear speakers, front low frequency effects speaker);值为8到15:保留:

(四)Bit depth

AudioSpecificConfig中没有Bit depth(又叫位深度、位元深度、采样深度、采样位数、采样格式),这是因为对于有损压缩编解码器(如MP3和AAC),Bit depth是在编码期间计算的,并且可以因采样而异,Bit depth只对PCM数字信号有意义。AudioSpecificConfig中没有Bit depth这个跟AAC裸流的Header中没有Bit depth的原因是一样的。具体可以参考:《音视频入门基础:AAC专题(3)——AAC的ADTS格式简介》。

(五)其它属性

根据audioObjectType值的不同,AudioSpecificConfig中可能还会存在其它属性。比如audioObjectType的值为1、2、3、4、6、7、17、19、20、21、22、23时AudioSpecificConfig中还会存在GASpecificConfig。这里就不一一阐述了:

三、AudioSpecificConfig实例分析

按照《音视频入门基础:FLV专题(4)——使用flvAnalyser工具分析FLV文件》中介绍的方法,通过flvAnalyser工具打开一个音频压缩编码格式为AAC的FLV文件,分析其某个包含AudioSpecificConfig的Audio Tag。下面红框中所示的就是AudioSpecificConfig,可以看到AudioSpecificConfig为0x12 0x10,也就是二进制的0b0001001000010000:

audioObjectType:0b0001001000010000的前5位为:0b00010,也就是十进制的2。所以音频压缩编码格式为:AAC LC (Low Complexity):

samplingFrequencyIndex:0b0100,也就是十进制的4。所以音频采样频率为44100Hz:

channelConfiguration:0b0010,也就是十进制的2。所以是双声道:

四、参考文章

《维基百科——MPEG-4 Audio》

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2230594.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Git (推送到远端仓库)

目录 一、在 gitee 上创建一个仓库 二、将项目推送到远程仓库 三、解释推送命令 一、在 gitee 上创建一个仓库 操作如下: 二、将项目推送到远程仓库 这里例举新的项目推送到远程仓库的例子: 打开仓库查看: 三、解释推送命令 添加远程仓库…

qt QAction详解

1、概述 QAction是Qt框架中的一个抽象类,用于表示用户界面中的一个动作(action)。这些动作可以绑定到菜单项、工具栏按钮或快捷键上,提供了一种灵活的方式来处理用户交互。QAction不仅包含了动作的名称、图标、提示信息等属性&am…

【FNENet】基于帧级非语言特征增强的情感分析

这篇文章语言极其晦涩难懂,内容和同专栏下的CENet中每一张图都百分之95相似,有些描述位置和内容都一模一样,还并且没有引用人家 abstract: 多模态情感分析(Multimodal Sentiment Analysis, MSA&#xff09…

6. STM32之TIM实验--编码器接口()--(实验5:PWM驱动直流电机)

这篇文章是通用定时器的最后一章节,也就是编码器接口,主要是用来进行对精确测量旋转角度或速度的负载进行精确控制。 STM32 编码器模式详解-CSDN博客 STM32——编码器测速原理及STM32编码器模式_龙邱512编码器stm32历程-CSDN博客

Ambari里面添加hive组件

1.创建hive数据库 在添加hive组件之前需要做的事情,先在master这个虚拟机里面创建好hive 先进入虚拟机里面进入mysql 然后输入这个命令看看有没有自己创建的hive数据库 show databases;有的话会显示下面这个样子 没有的同学使用以下命令可以在MySQL中创建hive数…

stm32引脚PB3、PB4、PA15作为普通IO口用时,需要先解除调试端口复用

当项目调试的时候,发现PA15引脚无论配置输出高还是低或者输入,均只能输出3.3V的高电平。 目前STM的硬件调试有两种方法,JTAG和SW的方式,目前个人认为最好的方式就是SW,因为它只占用PA13和PA14两个IO。而JTAG还要多占用…

江协科技STM32学习- P33 实验-软件I2C读写MPU6050

🚀write in front🚀 🔎大家好,我是黄桃罐头,希望你看完之后,能对你有所帮助,不足请指正!共同学习交流 🎁欢迎各位→点赞👍 收藏⭐️ 留言📝​…

快速遍历包含合并单元格的Word表格

Word中的合并表格如下,现在需要根据子类(例如:果汁)查找对应的品类,如果这是Excel表格,那么即使包含合并单元格,也很容易处理,但是使用Word VBA进行查找,就需要一些技巧。…

window免密登录虚拟机

环境 windows11 VirtualBox 图形用户界面 版本 7.1.2 r164945 (Qt6.5.3) CentOS-7-x86_64-Minimal-2009 虚拟机登录用户:root 1. 在虚拟机执行 1.1 生成秘钥(后续直接回车就行) ssh-keygen -t rsa -P 1.2 配置秘钥 cat ~/.ssh/id_rsa.pu…

标签之文字排版,图片,链接,音视频(HTML) 基础版

目录 标签之文字排版,图片,链接,音视频知识点: 练习题一: 效果: 练习题二: 效果: 标签之文字排版,图片,链接,音视频知识点: 超文本:链接 标记:标签<> 双标签 单标签 <br>//换行 <hr>//水平线 向后tab 向前shifttab html注释<!----> css /**/ …

UE5相机系统初探(一)

UE5相机系统初探&#xff08;一&#xff09; 和Unity类似&#xff0c;UE的相机也是由名为Camera的component控制的。那么&#xff0c;在UE中要如何实现一个跟随玩家的第三人称相机呢&#xff1f;假设我们已经有了一个表示玩家的类ACF_Character&#xff0c;首先第一步就是要先在…

短剧开发新模式:从内容创新到市场突围的全攻略

在探索短剧开发模式的过程中&#xff0c;理解其核心要素是至关重要的第一步。短剧作为一种独特的叙事形式&#xff0c;其特点是在极短的时间框架内讲述一个完整且吸引人的故事&#xff0c;这要求创作者必须具备高超的叙事技巧和对观众心理的深刻理解。创作者面临的首要挑战是如…

模型剪枝,如何把模型的使用成本降下来?

模型剪枝如何为企业节省百万预算&#xff1f; ©作者|DWT 来源|神州问学 近年来&#xff0c;大型语言模型&#xff08;LLM&#xff09;如GPT-3、LLaMA等在自然语言处理领域取得了令人瞩目的成果。然而&#xff0c;这些模型通常拥有数十亿甚至上千亿的参数&#xff0c;训练…

云效+mqtt实现本地构建和远程自动发版

之前写过一篇jenkinsmqtt实现本地构建和远程自动发版_jenkins远程调用和本地调用-CSDN博客 由于本地搭建jenkins实在太费机器了&#xff0c;这次改用云效搭建。不过云效并没有直接发送mqtt的方法&#xff0c;需要编写中转接口。 中转接口采用go-gin框架实现&#xff0c;代码如…

【蔬菜识别】Python+深度学习+CNN卷积神经网络算法+TensorFlow+人工智能+模型训练

一、介绍 蔬菜识别系统&#xff0c;本系统使用Python作为主要编程语言&#xff0c;通过收集了8种常见的蔬菜图像数据集&#xff08;‘土豆’, ‘大白菜’, ‘大葱’, ‘莲藕’, ‘菠菜’, ‘西红柿’, ‘韭菜’, ‘黄瓜’&#xff09;&#xff0c;然后基于TensorFlow搭建卷积神…

安装Blender并使用

前言 该系列记录了如何用Blenderpro来构建自己的场景数据集&#xff0c;从环境搭建到后期构建数据集的整个流程 本文章是第一部分&#xff0c;BlenderPrc2的安装以及环境配置 部分参考https://blog.csdn.net/weixin_49521551/article/details/121573334 官方文档https://dlr…

ApsaraMQ Serverless 能力再升级,事件驱动架构赋能 AI 应用

本文整理于 2024 年云栖大会阿里云智能集团高级技术专家金吉祥&#xff08;牟羽&#xff09;带来的主题演讲《ApsaraMQ Serverless 能力再升级&#xff0c;事件驱动架构赋能 AI 应用》 云消息队列 ApsaraMQ 全系列产品 Serverless 化&#xff0c;支持按量付费、自适应弹性、跨可…

栈虚拟机和寄存器虚拟机,有什么不同?

本来这节内容是打算直接讲字节码指令的&#xff0c;但讲之前又必须得先讲指令集架构&#xff0c;而指令集架构又分为两种&#xff0c;一种是基于栈的&#xff0c;一种是基于寄存器的。 那不妨我们这节就单独来讲讲栈虚拟机和寄存器虚拟机&#xff0c;它们有什么不同&#xff0…

Rust整合Elasticsearch

Elasticsearch是什么 Lucene&#xff1a;Java实现的搜索引擎类库 易扩展高性能仅限Java开发不支持水平扩展 Elasticsearch&#xff1a;基于Lucene开发的分布式搜索和分析引擎 支持分布式、水平扩展提高RestfulAPI&#xff0c;可被任何语言调用 Elastic Stack是什么 ELK&a…

【Apache Zookeeper】

一、简介 1、场景 如何让⼀个应⽤中多个独⽴的程序协同⼯作是⼀件⾮常困难的事情。开发这样的应⽤&#xff0c;很容易让很多开发⼈员陷⼊如何使多个程序协同⼯作的逻辑中&#xff0c;最后导致没有时间更好地思考和实现他们⾃⼰的应⽤程序逻辑&#xff1b;又或者开发⼈员对协同…