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。 解码器支持以下有效负载类型:
|
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 | 其他格式信息。 | 此属性的值取决于子类型。
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 |
|