AAC ADTS格式分析

news/2024/11/30 20:31:24/

标题

  • 1.AAC简介
  • 2. AAC ADTS格式分析
    • 2.1 adts_fixed_header详细介绍
    • 2.2 adts_variable_header详细介绍

1.AAC简介

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

  • ADIF:Audio Data Interchange Format ⾳频数据交换格式。这种格式的特征是可以确定的找到这个⾳频数据的开始,不需进⾏在⾳频数据流中开始的解码,即它的解码必须在明确定义的开始处进⾏。故这种格式常⽤在磁盘⽂件中。
  • ADTS的全称是Audio Data Transport Stream。是AAC⾳频的传输流格式。AAC⾳频格式在MPEG-2(ISO-13318-7 2003)中有定义。AAC后来⼜被采⽤到MPEG-4标准中。这种格式的特征是它是⼀个有同步字的⽐特流,解码可以在这个流中任何位置开始。它的特征类似于mp3数据流格式。

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

且这两种的header的格式也是不同的,⽬前⼀般编码后的和抽取出的都是ADTS格式的⾳频流。两者具体的组织结构如下所示:
在这里插入图片描述

2. AAC ADTS格式分析

AAC音频文件每一帧都是由ADTS Header 和AAV Audio Data组成.

详细了解一下ADTS Header的构成:

ADTS Header由adts_fixed_header()和adts_variable_header()构成,
也就是说ADTS Header由一个固定头信息和可变头信息.

2.1 adts_fixed_header详细介绍

在这里插入图片描述
固定大小28bit
在FFmpeg源码中:

  /* adts_fixed_header */put_bits(&pb, 12, 0xfff);   /* syncword */put_bits(&pb, 1, 0);        /* ID */put_bits(&pb, 2, 0);        /* layer */put_bits(&pb, 1, 1);        /* protection_absent */put_bits(&pb, 2, ctx->objecttype); /* profile_objecttype */put_bits(&pb, 4, ctx->sample_rate_index);put_bits(&pb, 1, 0);        /* private_bit */put_bits(&pb, 3, ctx->channel_conf); /* channel_configuration */put_bits(&pb, 1, 0);        /* original_copy */put_bits(&pb, 1, 0);        /* home */

我们仔细看一下各个变量的含义:
syncword:0xfff 这是一个同步头,也就是代表着一个ADTS帧的开始
ID:用来标识MEPG的,0标识MPEG-4,1标识MPEG-2
layer: 总是0
protection_absent:表示是否误码校验,1是没有,0是有
profile:表示使用哪个级别的AAC,一共有4中

static const int aacenc_profiles[] = {FF_PROFILE_AAC_MAIN,FF_PROFILE_AAC_LOW,FF_PROFILE_AAC_LTP,FF_PROFILE_MPEG2_AAC_LOW,
};

AudioObjectType=profile+1,这是因为在AudioObjectType中0代表的是AOT_NULL,而profile是从0开始的,因此他们之间相差1个位置

enum AudioObjectType {AOT_NULL,// Support?                NameAOT_AAC_MAIN,              ///< Y                       MainAOT_AAC_LC,                ///< Y                       Low ComplexityAOT_AAC_SSR,               ///< N (code in SoC repo)    Scalable Sample RateAOT_AAC_LTP,               ///< Y                       Long Term PredictionAOT_SBR,                   ///< Y                       Spectral Band ReplicationAOT_AAC_SCALABLE,          ///< N                       ScalableAOT_TWINVQ,                ///< N                       Twin Vector QuantizerAOT_CELP,                  ///< N                       Code Excited Linear PredictionAOT_HVXC,                  ///< N                       Harmonic Vector eXcitation CodingAOT_TTSI             = 12, ///< N                       Text-To-Speech InterfaceAOT_MAINSYNTH,             ///< N                       Main SynthesisAOT_WAVESYNTH,             ///< N                       Wavetable SynthesisAOT_MIDI,                  ///< N                       General MIDIAOT_SAFX,                  ///< N                       Algorithmic Synthesis and Audio EffectsAOT_ER_AAC_LC,             ///< N                       Error Resilient Low ComplexityAOT_ER_AAC_LTP       = 19, ///< N                       Error Resilient Long Term PredictionAOT_ER_AAC_SCALABLE,       ///< N                       Error Resilient ScalableAOT_ER_TWINVQ,             ///< N                       Error Resilient Twin Vector QuantizerAOT_ER_BSAC,               ///< N                       Error Resilient Bit-Sliced Arithmetic CodingAOT_ER_AAC_LD,             ///< N                       Error Resilient Low DelayAOT_ER_CELP,               ///< N                       Error Resilient Code Excited Linear PredictionAOT_ER_HVXC,               ///< N                       Error Resilient Harmonic Vector eXcitation CodingAOT_ER_HILN,               ///< N                       Error Resilient Harmonic and Individual Lines plus NoiseAOT_ER_PARAM,              ///< N                       Error Resilient ParametricAOT_SSC,                   ///< N                       SinuSoidal CodingAOT_PS,                    ///< N                       Parametric StereoAOT_SURROUND,              ///< N                       MPEG SurroundAOT_ESCAPE,                ///< Y                       Escape ValueAOT_L1,                    ///< Y                       Layer 1AOT_L2,                    ///< Y                       Layer 2AOT_L3,                    ///< Y                       Layer 3AOT_DST,                   ///< N                       Direct Stream TransferAOT_ALS,                   ///< Y                       Audio LosslesSAOT_SLS,                   ///< N                       Scalable LosslesSAOT_SLS_NON_CORE,          ///< N                       Scalable LosslesS (non core)AOT_ER_AAC_ELD,            ///< N                       Error Resilient Enhanced Low DelayAOT_SMR_SIMPLE,            ///< N                       Symbolic Music Representation SimpleAOT_SMR_MAIN,              ///< N                       Symbolic Music Representation MainAOT_USAC_NOSBR,            ///< N                       Unified Speech and Audio Coding (no SBR)AOT_SAOC,                  ///< N                       Spatial Audio Object CodingAOT_LD_SURROUND,           ///< N                       Low Delay MPEG SurroundAOT_USAC,                  ///< N                       Unified Speech and Audio Coding
};

sampling_frequency_index:表示使用的采样率下标

static const int mpeg4audio_sample_rates[16] = {96000, 88200, 64000, 48000, 44100, 32000,24000, 22050, 16000, 12000, 11025, 8000, 7350
};

channel_configuration:表示声道数

2.2 adts_variable_header详细介绍

在这里插入图片描述

/* adts_variable_header */
put_bits(&pb, 1, 0);        /* copyright_identification_bit */
put_bits(&pb, 1, 0);        /* copyright_identification_start */
put_bits(&pb, 13, full_frame_size); /* aac_frame_length */
put_bits(&pb, 11, 0x7ff);   /* adts_buffer_fullness */
put_bits(&pb, 2, 0);        /* number_of_raw_data_blocks_in_frame */

aac_frame_length :代表ADTS帧大小,header+aac原始数据大小长度

protection_absent: 为0则headerlength=9bytes,为1则headerlength=7bytes

adts_buffer_fullness:0x7FF 说明是码率可变的码流。
number_of_raw_data_blocks_in_frame :表示ADTS帧中有number_of_raw_data_blocks_in_frame +1个AAC原始帧

我打开一个aac文件二进制文件:
在这里插入图片描述
图中红色框框就是ADTS的header
FF F1 4C 80 2B 9F FC
通过分析工具:
在这里插入图片描述


http://www.ppmy.cn/news/423124.html

相关文章

Collection集合

Collection集合面试题 导学 这次课程主要涉及到的是List和Map相关的面试题&#xff0c;比较高频就是 ArrayList LinkedList HashMap ConcurrentHashMap ArrayList底层实现是数组LinkedList底层实现是双向链表HashMap的底层实现使用了众多数据结构&#xff0c;包含了数组、…

利用Oh-My-Zsh打造你的超级终端

▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼ 分享一个大神朋友的人工智能教程。零基础&#xff01;通俗易懂&#xff01;风趣幽默&#xff01;还带黄段子&#xff01;希望你也加入到人工智能的队伍中来…

2017年第八届蓝桥杯 JavaB组国赛 第五题 填字母游戏

标题&#xff1a;填字母游戏 小明经常玩 LOL 游戏上瘾&#xff0c;一次他想挑战K大师&#xff0c;不料K大师说&#xff1a; “我们先来玩个空格填字母的游戏&#xff0c;要是你不能赢我&#xff0c;就再别玩LOL了”。 K大师在纸上画了一行n个格子&#xff0c;要小明和他交替往…

python第七天

作业1&#xff1a;求第n项的斐波那契数列的值&#xff08;n>1&#xff09; 作业2&#xff1a;小明考试非常好&#xff0c;妈妈为了奖励小明&#xff0c;给一对刚刚出生的兔子&#xff0c;兔子可以经过四个月&#xff0c;可以长大称为成年的兔子&#xff0c;可以生育新的兔子…

Spring-全面详解(学习总结)

Spring 1.简介 1.1.简介 简介 Spring : 春天 —>给软件行业带来了春天 2002年&#xff0c;Rod Jahnson首次推出了Spring框架雏形interface21框架。 2004年3月24日&#xff0c;Spring框架以interface21框架为基础&#xff0c;经过重新设计&#xff0c;发布了1.0正式版。 …

10 种最常见的 Javascript 错误 — 总结于 1000+ 个项目,并阐述如何避免

引用 原文地址&#xff1a; https://rollbar.com/blog/top-10-javascript-errors/ 更多文章参见&#xff1a; https://github.com/elevenbeans/elevenbeans.github.io 为了回馈我们的开发者社区&#xff0c;我们查看了数千个项目的数据库&#xff0c;发现了 JavaScript 中频度…

python第6-7轮作业--字符串,模块

1.求第n项的斐波那契数列的值&#xff08;n>1&#xff09; def number(figure):list1[1]flag0if figure2:list1[1,1]elif figure>2:list1 [1, 1]for i in range(2,figure):xlist1[len(list1)-1] list1[len(list1)-2]list1.append(x)print(list1)figureint(input("…

第八届蓝桥杯国赛Java b组 第五题

标题&#xff1a;填字母游戏 小明经常玩 LOL 游戏上瘾&#xff0c;一次他想挑战K大师&#xff0c;不料K大师说&#xff1a; “我们先来玩个空格填字母的游戏&#xff0c;要是你不能赢我&#xff0c;就再别玩LOL了”。 K大师在纸上画了一行n个格子&#xff0c;要小明和他交替往…