AAC 解码器

Microsoft Media Foundation AAC 解码器是一种 媒体基础转换 ,可解码以下高级音频编码 (AAC) 和高效 AAC (HE-AAC) 配置文件:

  • MPEG-2 AAC 低复杂性 (LC) 配置文件 (多通道) 。
  • MPEG-4 HE-AAC v1 (具有 AAC-LC 核心的多通道) 。
  • MPEG-4 HE-AAC v2 (具有 AAC-LC 核心的立体声) 。

AAC 解码器支持无标头的原始 AAC 流和音频数据传输流中的 AAC (ADTS) 。

从 Windows 8 开始,AAC 解码器还支持使用 LATM) 多路复用层 (解码 MPEG-4 音频传输流, (LOAS) 同步层。 它还可以将 LATM/LOAS 流转换为 ADTS。

类标识符

AAC 编码器 (CLSID) 的类 标识符CLSID_CMSAACDecMFT,在头文件 wmcodecdsp.h 中定义。

媒体类型

AAC 解码器支持以下媒体类型。

输入类型

AAC 解码器支持以下音频子类型:

子类型 说明 标头
MFAudioFormat_AAC 原始 AAC 或 ADTS AAC。
对于此子类型,媒体类型在应用光谱带复制之前提供采样率和通道数, (SBR) 和参数立体声 (PS) 工具(如果存在)。 SBR 工具的效果是将解码的采样率相对于核心 AAC-LC 采样率翻倍。 PS 工具的作用是解码单声道核心 AAC-LC 流中的立体声。
此子类型等效于 wmcodecdsp.h 中定义的 MEDIASUBTYPE_MPEG_HEAAC。 请参阅 音频子类型 GUID
MPEG-4 文件源和 ADTS 分析程序输出此子类型。
mfapi.h
MEDIASUBTYPE_RAW_AAC1 原始 AAC。
此子类型用于包含在音频格式标记等于 WAVE_FORMAT_RAW_AAC1 (0x00FF) 的 AVI 文件中的 AAC。
对于此子类型,媒体类型在应用 SBR 和 PS 工具后提供采样率和通道数(如果存在)。
wmcodecdsp.h

若要配置 AAC 解码器,请在输入媒体类型上设置以下属性。

Attribute 说明 备注
MF_MT_MAJOR_TYPE 主要类型。 必须 MFMediaType_Audio
MF_MT_SUBTYPE 音频子类型。 有关详细信息,请参阅前面的说明。
MF_MT_AAC_AUDIO_PROFILE_LEVEL_INDICATION 音频配置文件和级别。
可选。 仅适用于 MFAudioFormat_AAC
此属性的值是 audioProfileLevelIndication 字段,由 ISO/IEC 14496-3 定义。
如果未知,则设置为零或0xFE (“未指定音频配置文件”) 。
MF_MT_AAC_PAYLOAD_TYPE 负载类型。
仅适用于 MFAudioFormat_AAC。 解码器支持以下有效负载类型:
  • 0:原始 AAC。 流仅包含由 MPEG-2 定义的 raw_data_block () 元素。
  • 1:ADTS。 流包含由 MPEG-2 定义的 adts_sequence () 。 每个adts_frame () 只允许一个raw_data_block () 。
  • 3:音频传输流,其同步层 (LOAS) 和多路复用层 (LATM) 。 在三种类型的 LOAS 中,仅支持 AudioSyncStream 。 多路复用层是 AudioMuxElement,仅限于一个音频程序和一个层。
MF_MT_AAC_PAYLOAD_TYPE 是可选的。 如果未指定此属性,则使用默认值 0,该值指定流仅包含raw_data_block元素。
MF_MT_AUDIO_BITS_PER_SAMPLE 解码的 PCM 音频的所需位深度。
MF_MT_AUDIO_CHANNEL_MASK 指定音频通道到扬声器位置的分配。 可选。 有关详细信息,请参阅 格式约束
MF_MT_AUDIO_NUM_CHANNELS 通道数,包括低频 (LFE) 通道(如果存在)。
此值的解释取决于媒体子类型,如前所述。
MF_MT_AUDIO_SAMPLES_PER_SECOND 采样率,以每秒样本数为单位。
此值的解释取决于媒体子类型,如前所述。
MF_MT_USER_DATA 其他格式信息。 此属性的值取决于子类型。
  • MFAudioFormat_AAC:包含 HEAACWAVEINFO 结构的部分,该部分显示在 WAVEFORMATEX 结构 (,即 wfx 成员) 之后。 这后跟由 ISO/IEC 14496-3 定义的 AudioSpecificConfig () 数据。
  • MEDIASUBTYPE_RAW_AAC1:包含 AudioSpecificConfig () 数据。 必须显示此数据;否则,解码器将拒绝媒体类型。
对于采用 SBR/PS 隐式信号的 AAC-LC 或 HE-AAC,AudioSpecificConfig () 数据的长度为 2 字节。 对于具有 SBR/PS 显式信号的 HE-AAC,它超过 2 个字节。
AudioSpecificConfig () 中定义的 audioObjectType 的值必须为 2,表示 AAC-LC。 对于 SBR, extensionAudioObjectType 的值必须为 5,对于 PS,该值必须为 29。

输出类型

解码器支持以下输出类型:

子类型 说明
MFAudioFormat_Float IEEE 浮点音频。
MFAudioFormat_PCM 16 位 PCM 音频。
MFAudioFormat_AAC 需要 Windows 8。
此输出类型可用于将 LOAS/LATM 格式的 AAC 流转换为 ADTS 格式。
若要将 LOAS/LATM 流转换为 ADTS 流,请将输入类型设置为 MFAudioFormat_AAC ,有效负载类型 3 (LOAS) 。 然后将输出类型设置为 MFAudioFormat_AAC ,有效负载类型 1 (ADTS) 。 解码器将重新格式化 conainter,而不解码位流。
注意: 解码器不会 将MFAudioFormat_AAC 注册为输出类型。 但是,如果应用程序按说明设置输入类型, 则 IMFTransform::GetOutputAvailableType 方法将返回可用输出类型列表中的 MFAudioFormat_AAC

如果输入流包含两个以上的通道,则 AAC 解码器为输出格式提供两个选项:

  • 与输入类型相同的通道配置。
  • 立体折叠。

格式约束

如果存在) ,则应用 SBR 后, (解码的音频采样率必须为下列值之一:

  • 8 kHz
  • 11.025 kHz
  • 12 kHz
  • 16 kHz
  • 22.05 kHz
  • 24 kHz
  • 32 kHz
  • 44.1 kHz
  • 48 kHz

不支持高于 48 kHz 的采样率。

解码器最多支持 6 个音频通道。 对于每个扬声器配置,解码器都要求 AAC 语法元素按特定顺序显示。 下表列出了支持的扬声器配置。 表的第三列使用以下表示法列出预期的语法元素及其顺序:

  • <SCE1>:与前中央扬声器关联的single_channel_element (SCE) 。
  • <SCE2>:与后中心扬声器关联的 SCE。
  • <CPE1>:与前置扬声器关联的channel_pair_element (CPE) 。
  • <CPE2>:与后 (或侧) 扬声器关联的 CPE
  • <LFE>:lfe_channel_element (LFE) 。

有关这些语法元素的详细信息,请参阅 ISO/IEC 13818-7。

配置 声道掩码 AAC 语法元素
Mono SPEAKER_FRONT_CENTER <SCE1>
立体声或双单声道 | SPEAKER_FRONT_LEFTSPEAKER_FRONT_RIGHT <CPE1>
2/1 | SPEAKER_FRONT_LEFT | SPEAKER_FRONT_RIGHTSPEAKER_BACK_CENTER <CPE1><SCE1>
2/2 | SPEAKER_FRONT_LEFT | SPEAKER_FRONT_RIGHT | SPEAKER_BACK_LEFTSPEAKER_BACK_RIGHT <CPE1><CPE2>
3/0 | SPEAKER_FRONT_LEFT | SPEAKER_FRONT_RIGHTSPEAKER_FRONT_CENTER <SCE1><CPE1>
3/1 | SPEAKER_FRONT_LEFT | SPEAKER_FRONT_RIGHT | SPEAKER_FRONT_CENTERSPEAKER_BACK_CENTER <SCE1><CPE1><SCE2>
3/2 | SPEAKER_FRONT_LEFT | SPEAKER_FRONT_RIGHT | SPEAKER_FRONT_CENTER | SPEAKER_BACK_LEFTSPEAKER_BACK_RIGHT <SCE1><CPE1><CPE2>
3/2 + LFE | SPEAKER_FRONT_LEFT | SPEAKER_FRONT_RIGHT | SPEAKER_FRONT_CENTER | SPEAKER_LOW_FREQUENCY | SPEAKER_BACK_LEFTSPEAKER_BACK_RIGHT <SCE1><CPE1><CPE2><LFE>

对于原始 AAC,每个输入示例必须恰好包含一个完整的 AAC 压缩帧。

对于 ADTS,每个输入样本可以包含多个音频帧,以及部分帧,即帧可以跨越样本边界。 每个 ADTS 标头必须后跟一个 AAC 帧。

AAC 解码器不支持以下任一项:

  • 主配置文件、Sample-Rate 可缩放 (SRS) 配置文件或长期预测 (LTP) 配置文件。
  • 音频数据交换格式 (ADIF) 。
  • LATM/LAOS 传输流。
  • (CCE) 耦合通道元素。 解码器将使用 CCE 跳过音频帧。
  • 具有 960 样本帧大小的 AAC-LC。 仅支持 1024 个样本帧。

转换属性

AAC 解码器实现 IMFTransform::GetAttributes 方法。 应用程序可以使用此方法获取或设置以下属性。

Attribute 说明
CODECAPI_AVDecAudioDualMono 指定是将双声道音频编码为立体声还是双单声道。 视为只读。
CODECAPI_AVDecAudioDualMonoReproMode 指定解码器如何重现双单声道音频。 默认值为 eAVDecAudioDualMonoReproMode_LEFT_MONO:向左右扬声器输出 Ch1。
应用程序可以设置此属性以更改默认行为。
MFT_SUPPORT_DYNAMIC_FORMAT_CHANGE AAC 解码器不处理动态格式更改,必须在设置新的输入媒体类型之前刷新或清空。 将此属性视为只读。
注意: AAC 解码器错误地报告此属性的值为 TRUE
在 Windows 7 中,解码器错误地报告此属性的 值为 TRUE 。 在 Windows 8 中,解码器报告 FALSE,这是正确的值

示例媒体类型

下面是使用原始 AAC 有效负载的 6 通道 48 kHz AAC-LC 流所需的输入媒体类型示例:

Attribute
MF_MT_MAJOR_TYPE MFMediaType_Audio
MF_MT_SUBTYPE MFAudioFormat_AAC
MF_MT_AUDIO_SAMPLES_PER_SECOND 48000
MF_MT_AUDIO_NUM_CHANNELS 6
MF_MT_AAC_PAYLOAD_TYPE 0
MF_MT_USER_DATA {0x00、0x00、0x2a、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x11、0xb0}
MF_MT_AAC_AUDIO_PROFILE_LEVEL_INDICATION 0x2a (可选)

前 12 个字节 MF_MT_USER_DATA 对应于以下 HEAACWAVEINFO 结构成员:

  • wPayloadType = 0 (原始 AAC)
  • wAudioProfileLevelIndication = 0x2a (AAC 配置文件,级别 4)
  • wStructType = 0

最后两个字节MF_MT_USER_DATA包含由 MPEG-4 定义的 AudioSpecificConfig () 值。

  • AudioSpecificConfig.audioObjectType = 2 (AAC LC) (5 位)
  • AudioSpecificConfig.samplingFrequencyIndex = 3 (4 位)
  • AudioSpecificConfig.channelConfiguration = 6 (4 位)
  • GASpecificConfig.frameLengthFlag = 0 (1 位)
  • GASpecificConfig.dependsOnCoreCoder = 0 (1 位)
  • GASpecificConfig.extensionFlag = 0 (1 位)

给定此输入类型,请使用以下输出媒体类型从解码器获取 6 声道 32 位浮点 PCM 音频:

Attribute
MF_MT_MAJOR_TYPE MFMediaType_Audio
MF_MT_SUBTYPE MFAudioFormat_Float
MF_MT_AUDIO_BITS_PER_SAMPLE 32
MF_MT_AUDIO_SAMPLES_PER_SECOND 48000
MF_MT_AUDIO_NUM_CHANNELS 6
MF_MT_AUDIO_AVG_BYTES_PER_SECOND 1152000 (可选)
MF_MT_AUDIO_BLOCK_ALIGNMENT 24 (可选)
MF_MT_AUDIO_CHANNEL_MASK 0x3f (可选)

如果安装了适用于 Windows Vista 的平台更新补充,则 AAC 音频解码器在 Windows Vista 上可用,但只能通过使用 源读取器在 Windows Vista 上访问。

要求

要求
最低受支持的客户端
Windows 7 [仅限桌面应用]
最低受支持的服务器
Windows Server 2008 R2 [仅限桌面应用]
DLL
Windows 7 上的 Msmpeg2adec.dll;
Windows 8 上的 MSAudDecMFT.dll

请参阅

编解码器对象

AAC 媒体类型

音频媒体类型

Microsoft MPEG-1/DD/AAC 音频解码器

Media Foundation 中的 MPEG-4 支持

Media Foundation 中支持的媒体格式