AAC的ADTS头信息介绍
来源:互联网 发布:宏基因组数据分析 编辑:程序博客网 时间:2024/06/06 00:53
ADTS是Audio Data Transport Stream的简称。
是AAC音频文件常见的传输格式。
有的时候当你编码AAC裸流的时候,会遇到写出来的AAC文件并不能在PC和手机上播放,很大的可能就是AAC文件的每一帧里缺少了ADTS头信息文件的包装拼接。只需要加入头文件ADTS即可。一个AAC原始数据块长度是可变的,对原始帧加上ADTS头进行ADTS的封装,就形成了ADTS帧。
下面分析下ADTS头文件结构和信息:
AAC音频文件的每一帧由ADTS Header和AAC Audio Data组成。
大家可以用AAC Audio ES Viewer工具来查看AAC的ADTS Header。
每一帧的ADTS的头文件都包含了音频的采样率,声道,帧长度等信息,这样解码器才能解析读取。
一般情况下ADTS的头信息都是7个字节,分为2部分:
adts_fixed_header();
adts_variable_header();
先来看:adts_fixed_header();
- 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,如01 Low Complexity(LC) -- AAC LC
profile的值等于 Audio Object Type的值减1.
profile = MPEG-4 Audio Object Type - 1 - 采样率的下标
- 声道数,比如
接下来看下adts_variable_header();
- aac_frame_length:一个ADTS帧的长度包括ADTS头和AAC原始流。frame length, this value must include 7 or 9 bytes of header length:
aac_frame_length = (protection_absent == 1 ? 7 : 9) + size(AACFrame)
protection_absent=0时, header length=9bytes
protection_absent=1时, header length=7bytes - adts_buffer_fullness:0x7FF 说明是码率可变的码流。
- number_of_raw_data_blocks_in_frame:表示ADTS帧中有number_of_raw_data_blocks_in_frame + 1个AAC原始帧。
所以说number_of_raw_data_blocks_in_frame == 0 表示说ADTS帧中有一个AAC数据块。
(一个AAC原始帧包含一段时间内1024个采样及相关数据)
两个头文件就讲到这里。
这里给出JAVA和Android里的给AAC添加ADTS头文件的部分方法代码,针对ByteBuffer。
这里是调用:(可根据自己需求,这里的AudioBufFrame是我们自己项目里的类,其实就是个ByteBuffer封装的类)
阅读全文
0 0
- AAC的ADTS头文件信息介绍
- AAC的ADTS头文件信息介绍
- AAC的ADTS头文件信息介绍
- AAC的ADTS头信息介绍
- AAC ADTS头详解
- 视频文件解复用获取的aac文件添加adts头
- AAC包增加ADTS头Without MediaCodec
- AAC raw包增加ADTS头
- AAC ADTS
- ADTS和LATM的AAC格式
- ffmpeg 解析aac adts格式的文件
- FLV(二)-解复用器-AAC-ADTS头-onMetaData内容
- AAC ADTS格式分析
- AAC ADTS LATM 分析
- AAC ADTS格式分析
- AAC ADTS格式分析
- AAC ADTS格式分析
- AAC ADTS格式分析
- 1. BLUE 算法
- 数组和链表的尔虞我诈
- 为什么软件工程师找不到工作?我想分享四个“恐怖故事”
- 域名备案_阿里云
- Windows bat
- AAC的ADTS头信息介绍
- 腾讯云默认操作系统被安装的软件
- 数据结构实验之图论四:迷宫探索
- 多态
- PMM升级
- 低层视觉:使用一幅图像——线性滤波
- 自定义组合控件
- (五)java并发编程--volatile关键字
- 获取数据库表中节点的层级关系并打印输出