获取AAC音频的ADTS固定头部信息

文章目录

  • 前言
  • 一、AAC音频中的ADTS
  • 二、解析ADTS信息
    • 1.标准文档中介绍
    • 2.解析
    • 3.采样率索引和值
    • 4.下载AAC标准文档


前言

调试嵌入式设备中播放aac音频的过程中,了解了aac音频格式,记录在此,防止遗忘。


一、AAC音频中的ADTS

ADTS(Audio Data Transport Stream)是AAC(Advanced Audio Coding)音频编码格式的一种常见的封装格式。它用于将AAC音频数据以分帧的方式进行包装和传输。
ADTS封装格式将AAC音频数据按照一定格式进行组织,包括音频帧头信息和音频数据。每个ADTS帧由7个字节的帧头和音频数据组成。
帧头包含了音频帧的一些重要信息,如采样率、声道数、位率、编码类型等。音频数据是经过AAC压缩的音频信号,包含了实际的音频内容。
ADTS封装格式具有一定的错误容忍性和同步性。即使在传输过程中发生了丢包或错误,接收端仍然可以根据帧头信息正确地解析音频数据。此外,ADTS还可以通过添加同步头信息来实现同步传输,确保音频数据在接收端正确播放。
使用ADTS封装格式的好处是它的普遍性和兼容性。它被广泛支持和应用于各种音频播放器、设备和转码器中,包括流媒体传输、音频文件存储等场景。
需要注意的是,ADTS只是AAC的一种封装格式,而AAC编码格式还可以使用其他封装格式,如ADIF、LOAS等。根据具体的需求和使用环境,可以选择适合的AAC封装格式进行音频存储和传输。 【以上信息来源于ChatGPT】

二、解析ADTS信息

1.标准文档中介绍

在这里插入图片描述

ADTS 是一种用于传输 AAC 音频的文件格式,头部包含了一些关键信息。下面是各个字段的意义及其作用:

  • syncword(12 位):同步字,用于标识 ADTS 头部的开始,固定为 0xFFF。
  • ID(1 位):表示 MPEG 标准的版本,0 表示 MPEG-4,1 表示 MPEG-2。
  • layer(2 位):表示编码层次,一般设置为 0。
  • protection_absent(1 位):表示帧是否包含错误检测字,0 表示包含,1 表示不包含。
  • profile(2 位):表示 AAC 的编码配置文件。
  • sampling_frequency_index(4 位):表示采样频率的索引值。
  • private_bit(1 位):暂时不使用,一般设置为 0。
  • channel_configuration(3 位):表示音频通道的配置。
  • original_copy(1 位):表示原始数据复制标志,0 表示副本,1 表示原始数据。
  • home(1 位):暂时不使用,一般设置为 0。
  • copyright_identification_bit(1 位):版权标志位。
  • copyright_identification_start(1 位):表示此帧是否为版权开始。
  • acc_frame_length(13 位):表示 ADTS 帧的长度,包括头部和音频数据。
  • adts_buffer_fullness(11 位):表示音频缓冲区的填充量。
  • number_of_raw_data_blocks_in_frame(2 位):表示 ADTS 帧中的原始数据块数。

2.解析

typedef struct
{
	unsigned syncword : 12;
	unsigned ID : 1;
	unsigned layer : 2;
	unsigned protection_absent : 1;
	unsigned profile : 2;
	unsigned sampling_frequency_index : 4;
	unsigned private_bit : 1;
	unsigned channel_configuration : 3;
	unsigned original_copy : 1;
	unsigned home : 1;
	//variable
	unsigned copyright_identification_bit : 1;
	unsigned copyright_identification_start : 1;
	unsigned acc_frame_length : 13;
	unsigned adts_buffer_fullness : 11;
	unsigned number_of_raw_data_blocks_in_frame : 2;
} aac_adts_fixed_header_t;


int get_aac_header_from_adts(char *buf, int len, aac_adts_fixed_header_t *header)
{
	// 使用位操作解析 ADTS 固定头部
	header->syncword = ((buf[0] & 0x0F) << 8) | buf[1];
	header->ID = (buf[1] >> 3) & 0x01;
	header->layer = (buf[1] >> 1) & 0x03;
	header->protection_absent = buf[1] & 0x01;
	header->profile = (buf[2] >> 6) & 0x03;
	header->sampling_frequency_index = (buf[2] >> 2) & 0x0F;
	header->private_bit = (buf[2] >> 1) & 0x01;
	header->channel_configuration = ((buf[2] & 0x01) << 2) | (buf[3] >> 6);
	header->original_copy = (buf[3] >> 5) & 0x01;
	header->home = (buf[3] >> 4) & 0x01;
	header->copyright_identification_bit = (buf[3] >> 3) & 0x01;
	header->copyright_identification_start = (buf[3] >> 2) & 0x01;
	header->acc_frame_length = ((buf[3] & 0x03) << 11) | (buf[4] << 3) | (buf[5] >> 5);
	header->adts_buffer_fullness = ((buf[5] & 0x1F) << 6) | (buf[6] >> 2);
	header->number_of_raw_data_blocks_in_frame = buf[6] & 0x03;

	return 0;
}

上述代码通过位操作将adts头部信息全部取出来,其实常用的也就采样率和帧长度,因为aac音频是允许可变码率的,所以每一帧都有可能长度不一样。

3.采样率索引和值

在这里插入图片描述

解析adts信息里的sampling_frequency_index索引,需要找到对应实际的采样率值,以方便设置给解码器。

4.下载AAC标准文档

AAC标准文档下载链接


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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

关于electron打包卡在winCodeSign下载问题

简单粗暴&#xff0c;直接上解决方案&#xff1a; 在你的项目根目录下创建一个.npmrc的文件&#xff0c;且在里面加上以下文本&#xff0c;不用在意这个镜像源是不是最新的&#xff0c;它会自己重定向到nodemirror这个域名里下载 ELECTRON_MIRRORhttps://npm.taobao.org/mirror…

STM32基础知识——位操作/宏定义/#ifdef/#if defined

文章目录 前言一、位操作&#xff08;一&#xff09;简介&#xff08;二&#xff09;位操作的妙用 二、宏定义三、#ifdef和#if defined 前言 很久没发博客了&#xff0c;最近的学习都写在了自己的文档中&#xff0c;在学习新的STM32HAL库开发&#xff0c;还有STM32Cubemx软件&…

应用层协议

文章目录 应用协议应用层协议概要远程登录文件传输电子邮件协议SMTPWWW 应用协议 应用层协议概要 到此为止所介绍的IP协议、TCP协议以及UDP协议是通信最基本的部分&#xff0c;它们属于OSI参考模型中的下半部分。 本文章开始介绍应用协议&#xff0c;主要是指OSI参考模型中第…

酷开科技智能大屏OS Coolita亮相第134届中国进出口商品交易会

作为中国外贸的“风向标”和“晴雨表”&#xff0c;广交会因其历史长、规模大、商品种类全、到会客商多、成交效果好&#xff0c;被称为“中国第一展”&#xff0c;它见证了中国改革开放的时代大潮与对外贸易的蓬勃发展。 2023年10月15日&#xff0c;第134届中国进出口商品交易…

【Java】记一次服务内实现排队消费模式

主要是记录一下实现过程和实现的过程中遇到的坑。 我的业务 系统中有一个接口&#xff0c;是从大数据那边拉数据&#xff0c;之前的做法是&#xff0c;开个线程池&#xff0c;让SQL去执行&#xff0c;可是如果大量的慢SQL同时&#xff0c;请求数据库的话会适得其反。并且还有…

用Go实现网络流量解析和行为检测引擎

1.前言 最近有个在学校读书的迷弟问我:大德德, 有没有这么一款软件, 能够批量读取多个抓包文件,并把我想要的数据呈现出来, 比如:源IP、目的IP、源mac地址、目的mac地址等等。我说&#xff1a;“这样的软件你要认真找真能找出不少开源软件, 但毕竟没有你自己的灵魂在里面,要不…

通用工作站设计方案 :807-ORI-S3R500 -多路PCIe3.0的单CPU通用工作站

ORI-S3R500 -多路PCIe3.0的单CPU通用工作站 (研华工业计算机IPC-610&#xff0c;IPC940 升级款) 一、机箱功能和技术指标&#xff1a; 系统 系统型号 ORI-SR500 主板支持 EEB(12*13)/CEB(12*10.5)/ATX(12*9.6)/Mi cro ATX 前置硬盘 最大支持2个3.5寸1个2.5寸SATA …

交通信号标志识别系统 python 深度学习 YOLOv5

[毕业设计]2023-2024年最新最全计算机专业毕设选题推荐汇总 感兴趣的可以先收藏起来&#xff0c;还有大家在毕设选题&#xff0c;项目以及论文编写等相关问题都可以给我留言咨询&#xff0c;希望帮助更多的人 。 1、项目介绍 本系统基于YOLOv5&#xff0c;采用登录注册进行用…

C#操作注册表的方法

注册表是Microsoft Windows操作系统中的一个重要组成部分&#xff0c;用于存储和管理系统和应用程序的配置信息。它是一个层次结构的数据库&#xff0c;以树形结构组织&#xff0c;类似于文件系统中的文件夹和文件。 注册表存储了许多与操作系统和软件相关的信息&#…

【EI会议征稿】第三届新能源技术创新与低碳发展国际研讨会(NET-LC 2024)

第三届新能源技术创新与低碳发展国际研讨会&#xff08;NET-LC 2024&#xff09; 2024 3rd International Symposium on New Energy Technology Innovation and Low Carbon Development 先进的现代能源技术对世界各地的经济发展至关重要。持续的经济进步取决于安全、可靠和负担…

selenium三大等待

使用场景&#xff1a;有时候当我们操作页面元素时&#xff0c;需要等待这个过程才能操作成功。 做Ui自动化的时候&#xff0c;考虑到稳定性&#xff1a;多次运行同一脚本&#xff0c;都能够保证它是成功的。 一、强制等待&#xff1a;sleep(秒) 比如sleep(10)&#xff0c;就必…

一键批量转码:将MP4视频转为MP3音频的简单方法

随着数字媒体设备的普及&#xff0c;视频和音频格式转换的需求也越来越常见。其中&#xff0c;将MP4视频批量转换为MP3音频的需求尤为普遍。无论是为了提取视频中的背景音乐&#xff0c;还是为了在手机或电脑上方便地收听视频音频&#xff0c;这个过程都变得非常重要。接下来我…

opencv创建图片,绘制图片,画框,划线,改变像素点颜色

文章目录 创建空白图片创建一张渐变色彩色绘制多边形绘制多线改变像素点颜色 创建空白图片 bool tool_class::creatEmpty(int width, int height, std::string image_p) {// 创建一个空白图像cv::Mat blankImage(height, width, CV_8UC3, cv::Scalar(255, 255, 255));// 保存图…

蓝牙运动耳机哪个好?这几款蓝牙运动耳机不容错过!

音乐能有效地激发人体潜能&#xff0c;充分释放能量&#xff0c;达到更好的运动效果&#xff0c;因此对于运动爱好者来说&#xff0c;一款合适的运动蓝牙耳机至关重要&#xff0c;面对产品种类众多的运动耳机&#xff0c;很多人都会感到迷茫&#xff0c;经常有人问“有什么适合…

移位操作符 位操作符详解

hello hello&#xff0c;想我了吗? &#x1f604;&#x1f604;&#x1f604; 首先是移位操作符&#xff1a;<< 左移操作符 >> 右移操作符 注&#xff1a;移位操作符的操作数只能是整数。 << 左移操作符&#xff1a;移位规则&#xff1a; 左边抛弃、…

单片机程序无法下载?

原因一&#xff1a;电源问题 电源可能是导致STM32微控制器无法下载程序的一个常见原因。确保电源稳定对于正常运行和下载程序至关重要。以下是一些电源问题&#xff1a; 1. 电源电压不足&#xff1a;如果STM32微控制器没有足够的电压供应&#xff0c;它可能无法正常工作或下载程…

WPF ToggleButton 主题切换动画按钮

WPF ToggleButton 主题切换动画按钮 仿造最近看到的html中的一个效果&#xff0c;大致思路是文章这样&#xff0c;感觉还可以再雕琢一下。 代码如下 XAML: <UserControl x:Class"WPFSwitch.AnimationSwitch"xmlns"http://schemas.microsoft.com/winfx/200…

SpringData、SparkStreaming和Flink集成Elasticsearch

本文代码链接&#xff1a;https://download.csdn.net/download/shangjg03/88522188 1 Spring Data框架集成 1.1 Spring Data框架介绍 Spring Data是一个用于简化数据库、非关系型数据库、索引库访问&#xff0c;并支持云服务的开源框架。其主要目标是使得对数据的访问变得方便快…

ROS消息过滤器之 message_filters::Synchronizer 使用详解

在ROS中&#xff0c;当我们有多个传感器发布的数据需要同步时&#xff0c;message_filters::Synchronizer 是一个非常有用的工具。它可以确保多个消息在时间上是同步的&#xff0c;以便更有效地处理数据。 1.什么是ROS消息过滤器&#xff1f; ROS消息过滤器是一种用于处理ROS…

【uni-app + uView】CountryCodePicker 国家区号组件

1. 效果图 2. 组件完整代码 <template><u-popup class="country-code-picker-container" v-if="show" :show
最新文章