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

AAC ADTS格式分析

AAC音频格式

AAC音频格式:Advanced Audio Coding(高级音频解码),是一种由MPEG-4标准定义的有损音频压缩格式,由Fraunhofer发展,Dolby,Sony和AT&T是主要的贡献者。

  • ADIF:Audio Data Interchange Format音频数据交换格式。这种格式的特征是可以确定的找到这个音频数据的开始,不需要进行在音频数据流中间开始的解码,即它的解码必须在明确定义的开始处进行。所以这种格式常用在磁盘文件中。
  • ADTS:Audio Data Transport Stream是AAC音频的传输流格式。AAC音频格式在MPEG-2中有定义。AAC后来又被采用到MPEG-4标准中。这种格式的特征是他是一个有同步字的比特流,解码可以在这个流中任何位置开始。它的特征类似于mp3数据流格式。

简单来说,ADTS可以在任意帧解码,也就是说它每一帧都有头信息。ADIF只有一个同意的头,必须在得到所有数据后才能解码。

这两种header的格式也是不同的,目前一般编码后的和抽取出的都是ADTS格式的音频流。两者具体结构如下图:

AAC的ADIF头

AAC的ADTS头

有的时候当你编码AAC裸流的时候,会遇到写出来的AAC文件不能在PC和手机上播放的问题,很大可能是AAC文件的每一帧缺少ADTS头信息文件的包装拼接。

ADTS

AAC音频文件的每一帧由ADTS Header和AAC Audio Data组成,就是头和数据,结构体如下:

每一帧ADTS头文件都包含了音频的采样率,声道,帧长度等信息,这样解码器才能解析读取。
一般情况下ADTS的头信息都是7字节,分为两个部分:

  • adts_fixed_header();
  • adts_variable_header();
    其一为固定头信息,紧接着是可变头信息。固定头信息中的数据每一帧都相同,可变头信息则在帧与帧之间可变。

  • syncword:同步头,总是为0xFFF,代表一个ADTS帧的开始
  • ID:MPEG标识符,0表示MPEG-4,1表示MPEG-2
  • Layer:总是为00
  • protection_absent:是否误码校验,如果为1代表没有CRC校验,如果为0代表有CRC校验
  • profile:表示支持哪个级别的AAC,如01 Low Complexity(LC)—AAC LC。有些芯片只支持AAC LC

MPEG-2 AAC中定义了三种:

profile = MPEG-4 Audio Object Type -1

MPEG-4:

  • sampling_frequency_index:表示使用的采样率下标,通过这个下标在Sampling Frequencies数组中查找得知采样率的值。
  • channel_configuration:表示声道数,比如2表示双声道

接下来看adts_variable_header();

  • 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原始帧。

下面是ADTS的AAC文件部分,高字节开始计算:

fixed header
FF F1 4C 4->11111111 11110001 01001100 0100
111111111111->帧头
0->MPEG-4
00->Layer总是为00
1->没有校验
01->AAC SSR
0011->48000采样率
0
001->单声道
0
0
variable header
0 20 FF FC
0
0
0000100000111->帧长度263
11111111111
00

参考资料:https://github.com/0voice


文章转载自:

http://w5WmU6LC.ymwrs.cn
http://0PwK6oI8.ymwrs.cn
http://2pChbgGv.ymwrs.cn
http://ENAPX0qI.ymwrs.cn
http://EthttOET.ymwrs.cn
http://oGgeQdEC.ymwrs.cn
http://8mMCR6Y0.ymwrs.cn
http://KJVmD12k.ymwrs.cn
http://6rnPoKCs.ymwrs.cn
http://oz24ub2H.ymwrs.cn
http://bDZdZARA.ymwrs.cn
http://o0KoHVRf.ymwrs.cn
http://SNITSWeo.ymwrs.cn
http://YaHUYtAF.ymwrs.cn
http://FuFSK4oS.ymwrs.cn
http://5FnXJMuj.ymwrs.cn
http://p7BwZSPe.ymwrs.cn
http://6U7Zmzq3.ymwrs.cn
http://WzjkIK4n.ymwrs.cn
http://f5aWouo0.ymwrs.cn
http://NQfwL6dv.ymwrs.cn
http://inlb0OEm.ymwrs.cn
http://AIH6XJQi.ymwrs.cn
http://boVigqn9.ymwrs.cn
http://22dFOvuY.ymwrs.cn
http://GYitp2KU.ymwrs.cn
http://RgdRqhqq.ymwrs.cn
http://ZlXO4nu9.ymwrs.cn
http://HB3vQKTi.ymwrs.cn
http://aSE6ZqDo.ymwrs.cn
http://www.dtcms.com/a/382444.html

相关文章:

  • `Object.groupBy`将数组中的数据分到对象中
  • IACheck赋能AI环评报告审核,提升智慧交通项目合规性
  • 腾讯面试题之编辑距离
  • 云服务器使用代理稳定与github通信方法
  • 通过内存去重替换SQL中distinct,优化SQL查询效率
  • 【完整源码+数据集+部署教程】航拍遥感太阳能面板识别图像分割
  • make和Makefile细节补充
  • 从经验主义到贝叶斯理论:如何排查线上问题
  • 机器人路径规划算法大全RRT,APF,DS,RL
  • 9.13AI简报丨哈佛医学院开源AI模型,Genspark推出AI浏览器
  • 04.【Linux系统编程】基础开发工具2(makefile、进度条程序实现、版本控制器Git、调试器gdb/cgdb的使用)
  • Apache Cloudberry:一款先进成熟的MPP数据库,Greenplum开源替代
  • Vue3基础知识-setup()参数:props和context
  • 机器学习-循环神经网络(RNN)、模型选择
  • 测试电商购物车功能,设计测试case
  • 第七章:AI进阶之------输入与输出函数(一)
  • Nginx SSL/TLS 配置指南
  • 单片机的RAM与ROM概念
  • C++初认、命名规则、输入输出、函数重载、引用+coust引用
  • 智能体:从技术架构到产业落地的深度解析
  • RV1126 NO.22:多线程获取SMARTP的GOP模式数据和普通GOP模式数据
  • 数据的读多写少和读多写多解决方案
  • 0基础Java学习过程记录——异常
  • 几种网络IO模型
  • 文章阅读与实践 - OOM/时间精度/步数排行实现/故障复盘
  • 第七章:AI进阶之------输入与输出函数(二)
  • html列表总结补充
  • 系统软中间件:连接软件与硬件的桥梁
  • 关于Bug排查日记的技术文章大纲
  • 【Ambari监控】— API请求逻辑梳理