当前位置: 首页 > news >正文

获取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;//variableunsigned 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标准文档下载链接


相关文章:

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

文章目录 前言一、AAC音频中的ADTS二、解析ADTS信息1.标准文档中介绍2.解析3.采样率索引和值4.下载AAC标准文档 前言 调试嵌入式设备中播放aac音频的过程中&#xff0c;了解了aac音频格式&#xff0c;记录在此&#xff0c;防止遗忘。 一、AAC音频中的ADTS ADTS&#xff08;Audi…...

二分查找--C++实现

1. 简介 满足有序性&#xff0c;每次排除一半的可能性。 2. 实现 2.1 手写 int bin_search(vector<int> &arr,int v) {int hi arr.size() - 1;int lo 0;while ( lo < hi){int mid (lo hi) >> 1;if (arr[mid] < v)lo mid 1;elsehi mid - 1;}re…...

计算机毕设 基于机器学习的文本聚类 - 可用于舆情分析

文章目录 0 简介1 项目介绍1.1 提取文本特征1.2 聚类算法选择 2 代码实现2.1 中文文本预处理2.2 特征提取2.2.1 Tf-idf2.2.2 word2vec 2.3 聚类算法2.3.1 k-means 2.3.2 DBSCAN2.4 实现效果2.4.1 tf-idf k-means聚类结果2.4.2 word2vec k-means 聚类结果 最后 0 简介 今天学…...

uniApp获取当前位置经纬度

以下是使用uni.getLocation获取当前位置的示例代码&#xff1a; 调用uni.getLocation方法获取当前位置信息 uni.getLocation({type: wgs84, // 坐标类型&#xff0c;默认为wgs84&#xff0c;可选的值为gcj02和bd09llsuccess: res > {// 获取成功&#xff0c;经度和纬度在r…...

this.$message提示内容添加换行

0 效果 1 代码 let msgArr [只允许上传doc/docx/xls/xlsx/pdf/png/jpg/bmp/ppt/pptx/rar/zip格式文件,且单个文件大小不能超过20MB,已过滤无效的文件] let msg msgArr.join(<br/>) this.$message({dangerouslyUseHTMLString: true,message: msg,type: warning })...

“三大阶段稳定性测试”筑牢长安链信任基石

前言 随着长安链应用生态的不断丰富、面对的应用场景更加多元&#xff0c;稳定性测试在长安链测试流程中占到越来越重要的位置。本文将介绍长安链稳定性测试的发展历程及如何通过三大阶段稳定性测试应对不断出现的复杂的商业需求&#xff0c;筑牢长安链信任基石。 功能测试和…...

手把手教你如何扩展(破解)mybatisplus的sql生成 | 京东云技术团队

mybatisplus 的常用CRUD方法 众所周知&#xff0c;mybatisplus提供了强大的代码生成能力&#xff0c;他默认生成的常用的CRUD方法&#xff08;例如插入、更新、删除、查询等&#xff09;的定义&#xff0c;能够帮助我们节省很多体力劳动。 他的BaseMapper中定义了这些常用的C…...

Spring Data JPA 项目配置与QueryDSL集成

一、说明 Spring Data JPA通过Spring Initializer创建时勾选相关依赖即可引入&#xff0c;QueryDSL需要单独引入。Spring JPA针对QueryDSL有比较好的兼容性&#xff0c;可以实现优雅的SQL构建。 二、设置JPA默认配置&#xff08;yaml格式&#xff09; spring:jpa:hibernate:…...

UE5数字孪生制作-数据篇(二) - 数据处理

1.卫星图与DEM高度图坐标一致处理 https://www.bilibili.com/video/BV1op4y1V71r?p4&vd_source707ec8983cc32e6e065d5496a7f79ee6 坐标系的调整 如何使用临时图层&#xff0c;对其他数据层进行裁切 &#xff08;1&#xff09;创建临时图层 &#xff08;2&#xff09;在临…...

Java 设计模式——享元模式

目录 1.概述2.结构3.实现3.1.抽象享元3.2.具体享元3.3.享元工厂3.4.测试 4.优缺点5.使用场景6.JDK 源码解析——Integer 类 1.概述 &#xff08;1&#xff09;享元模式 (Flyweight Pattern) 是一种结构型设计模式&#xff0c;主要通过共享对象来减少系统中的对象数量&#xff…...

再扩国产化适配版图,长安链新增数据库兼容性认证

基础软件的自主可控影响着国家信息安全与产业技术发展是否受制于人。实现真正长期可持续的技术自主可控&#xff0c;需要再进一步的是让国产化信息系统生态更有”活性“&#xff0c;基础软件之间、基础软件与其他国产上层应用的互相兼容、互相促进&#xff0c;共同繁荣发展&…...

MES系统数据集成系统源码

MES系统数据集成系统源码 1 MES的生产计划管理综述 生产计划的管理在MES系统中是非常重要的。我们知道&#xff0c;一般的情况下&#xff0c;企业的生产计划是由上层管理系统ERP来完成&#xff0c;那么MES中的生产计划和ERP的生产计划的不同点在于&#xff1a; ERP的生产计划…...

关于道一云-七巧使用感悟

低代码&#xff0c;开发快速&#xff0c;缺点组件比较少但能满足大多数场景&#xff0c;如果需要的话得自己造&#xff0c;官方的技术群里面普遍问题响应就很快&#xff0c;技术文档这个会抽风&#xff0c;有些代码就改个筛选条件本地死活运行不了&#xff0c;去官网那里问他们…...

去中心化数据云项目Oort主网即将上线

备受期待的去中心化数据云项目Oort&#xff0c;今日已通过官方X账号官宣&#xff0c;将于纽约时间11月27日正式上线主网Olympus Protocol。届时&#xff0c;用户也能够通过Oort的Ale Wallet钱包和开发者API使用主网&#xff0c;并可通过OORT浏览器查询交易和合约&#xff0c;开…...

CSS知识点梳理(一)

CSS 是层叠样式表&#xff08;Cascading Style Sheets&#xff09;的缩写&#xff0c;它是一种用于描述 HTML 或 XML&#xff08;包括如 SVG、MathML 等派生语言&#xff09;文档呈现的语言。CSS 可以用来控制文档的布局、颜色、字体等外观属性。 CSS 的主要特点包括&#xff…...

网络安全深入学习第八课——反向代理(工具:frp)

文章目录 一、实验环境二、实验要求三、开始模拟1、攻击机配置frp文件2、攻击拿下跳板机&#xff0c;并且上传frpc.ini、frpc.exe、frpc_full.ini文件3、把frps.ini、、frps.exe、frps_full.ini文件放到VPS主机上4、VPS机开启frp5、跳板机开启frp6、验证 一、实验环境 攻击机&…...

浅谈前端自定义VectorGrid矢量瓦片样式

目录 前言 一、VectorGrid相关API介绍 1、VectorGrid 2、 LayerStyles样式详解 二、样式自动配置 1、页面定义 2、地图及PBF瓦片引入 3、矢量瓦片样式定义 4、鼠标事件交互 三、最终效果 1、自定义样式展示 2、鼠标交互 总结 前言 在上一篇博客中&#xff0c;详细讲…...

Qt5多线程<12>

1.多线程的简单实现 <1> 在头文件threaddlg.h声明用于界面显示所需的控件,其代码如下: #ifndef THREADDLG_H #define THREADDLG_H#include <QDialog> #include <QPushButton> #include "workthread.h" #define MAXSIZE 5class ThreadDlg : publ…...

Linux学习笔记之五(父子进程、孤儿进程、僵尸进程、守护进程)

Linux 1、进程1.1、进程的六种状态1.2、创建子进程1.3、添加子进程任务1.4、孤儿进程、僵尸进程、守护进程1.4.1、避免僵尸进程1.4.2、创建守护进程1.4.3、杀死守护进程 1.5、综合练习 1、进程 进程可以简单的理解为一个正在执行的程序&#xff0c;它是计算机系统中拥有资源和…...

[题] 不容易系列之(3)―― LELE的RPG难题 #DP

题目 不容易系列之(3)―― LELE的RPG难题 思路 简单的DP题。 代码 #include<bits/stdc.h> using namespace std; //默认以0开头&#xff0c;以1和2结尾。f[i][1]表示长度为i的以1结尾的涂抹方案 //状态转移方程&#xff1a;若以1结尾&#xff0c;则前面一个格子只能是…...

Linux链表操作全解析

Linux C语言链表深度解析与实战技巧 一、链表基础概念与内核链表优势1.1 为什么使用链表&#xff1f;1.2 Linux 内核链表与用户态链表的区别 二、内核链表结构与宏解析常用宏/函数 三、内核链表的优点四、用户态链表示例五、双向循环链表在内核中的实现优势5.1 插入效率5.2 安全…...

边缘计算医疗风险自查APP开发方案

核心目标:在便携设备(智能手表/家用检测仪)部署轻量化疾病预测模型,实现低延迟、隐私安全的实时健康风险评估。 一、技术架构设计 #mermaid-svg-iuNaeeLK2YoFKfao {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg…...

Neo4j 集群管理:原理、技术与最佳实践深度解析

Neo4j 的集群技术是其企业级高可用性、可扩展性和容错能力的核心。通过深入分析官方文档,本文将系统阐述其集群管理的核心原理、关键技术、实用技巧和行业最佳实践。 Neo4j 的 Causal Clustering 架构提供了一个强大而灵活的基石,用于构建高可用、可扩展且一致的图数据库服务…...

Python爬虫(一):爬虫伪装

一、网站防爬机制概述 在当今互联网环境中&#xff0c;具有一定规模或盈利性质的网站几乎都实施了各种防爬措施。这些措施主要分为两大类&#xff1a; 身份验证机制&#xff1a;直接将未经授权的爬虫阻挡在外反爬技术体系&#xff1a;通过各种技术手段增加爬虫获取数据的难度…...

Maven 概述、安装、配置、仓库、私服详解

目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...

为什么要创建 Vue 实例

核心原因:Vue 需要一个「控制中心」来驱动整个应用 你可以把 Vue 实例想象成你应用的**「大脑」或「引擎」。它负责协调模板、数据、逻辑和行为,将它们变成一个活的、可交互的应用**。没有这个实例,你的代码只是一堆静态的 HTML、JavaScript 变量和函数,无法「活」起来。 …...

comfyui 工作流中 图生视频 如何增加视频的长度到5秒

comfyUI 工作流怎么可以生成更长的视频。除了硬件显存要求之外还有别的方法吗&#xff1f; 在ComfyUI中实现图生视频并延长到5秒&#xff0c;需要结合多个扩展和技巧。以下是完整解决方案&#xff1a; 核心工作流配置&#xff08;24fps下5秒120帧&#xff09; #mermaid-svg-yP…...

WebRTC调研

WebRTC是什么&#xff0c;为什么&#xff0c;如何使用 WebRTC有什么优势 WebRTC Architecture Amazon KVS WebRTC 其它厂商WebRTC 海康门禁WebRTC 海康门禁其他界面整理 威视通WebRTC 局域网 Google浏览器 Microsoft Edge 公网 RTSP RTMP NVR ONVIF SIP SRT WebRTC协…...

高保真组件库:开关

一:制作关状态 拖入一个矩形作为关闭的底色:44 x 22,填充灰色CCCCCC,圆角23,边框宽度0,文本为”关“,右对齐,边距2,2,6,2,文本颜色白色FFFFFF。 拖拽一个椭圆,尺寸18 x 18,边框为0。3. 全选转为动态面板状态1命名为”关“。 二:制作开状态 复制关状态并命名为”开…...

uniapp获取当前位置和经纬度信息

1.1. 获取当前位置和经纬度信息&#xff08;需要配置高的SDK&#xff09; 调用uni-app官方API中的uni.chooseLocation()&#xff0c;即打开地图选择位置。 <button click"getAddress">获取定位</button> const getAddress () > {uni.chooseLocatio…...