AAC ADTS格式

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(ISO-13318-7 2003)中有定义。AAC后来 ⼜被采⽤到MPEG-4标准中。这种格式的特征是它是⼀个有同步字的⽐特 流,解码可以在这个流中任何位置开始。它的特征类似于mp3数据流格式。

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

adts_fixed_header();

adts_variable_header();

其⼀为固定头信息 ,紧接着是可变头信息。固定头信息中的数据每⼀帧都相 同,⽽可变头信息则在帧与帧之间可变。

syncword :同步头 总是0xFFF, all bits must be 1,代表着⼀个ADTS帧的开 始

ID:MPEG标识符,0标识MPEG-4,1标识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。有些芯⽚只⽀持AAC LC 。

profile的值等于 Audio Object Type的值减1

profile = MPEG-4 Audio Object Type - 1

ffmpeg内部已经做了对应了

sampling_frequency_index:表示使⽤的采样率下标,通过这个下标在 Sampling Frequencies[ ]数组中查找得知采样率的值。

channel_configuration: 表示声道数,⽐如2表示⽴体声双声道

adts_variable_header()

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数据块。

相关推荐
t***5447 小时前
Clang 编译器在 Orwell Dev-C++ 中的局限性
开发语言·c++
yolo_guo8 小时前
redis++使用: hmset 与 hmget
c++·redis
handler019 小时前
拒绝权限报错!三分钟掌握 Linux 权限管理
linux·c语言·c++·笔记·学习
t***54410 小时前
如何在Dev-C++中选择Clang编译器
开发语言·c++
汉克老师10 小时前
GESP2023年9月认证C++三级( 第一部分选择题(9-15))
c++·gesp三级·gesp3级
Wave84513 小时前
C++继承详解
开发语言·c++·算法
Tairitsu_H14 小时前
C++类基础概念:定义、实例化和this指针
开发语言·c++
不想写代码的星星14 小时前
C++17 string_view 观察报告:好用,但有点费命
c++
努力努力再努力wz14 小时前
【Linux网络系列】深入理解 I/O 多路复用:从 select 痛点到 poll 高并发服务器落地,基于 Poll、智能指针与非阻塞 I/O与线程池手写一个高性能 HTTP 服务器!(附源码)
java·linux·运维·服务器·c语言·c++·python
努力努力再努力wz14 小时前
【Linux网络系列】万字硬核解析网络层核心:IP协议到IP 分片重组、NAT技术及 RIP/OSPF 动态路由全景
java·linux·运维·服务器·数据结构·c++·python