AAC 编码器

Microsoft Media Foundation AAC 编码器是一种 媒体基础转换 , (AAC) 低复杂度 (LC) 配置文件编码高级音频编码,由 ISO/IEC 13818-7 (MPEG-2 Audio Part 7) 定义。

AAC 编码器不支持编码到任何其他 AAC 配置文件,例如 Main、SSR 或 LTP。

类标识符

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

媒体类型

AAC 编码器支持以下媒体类型。 可以先按输入类型或输出类型的顺序设置类型。

输入类型

在输入媒体类型上设置以下属性。

Attribute 说明 备注
MF_MT_MAJOR_TYPE 主要类型。 必须 MFMediaType_Audio
MF_MT_SUBTYPE 亚。 必须 MFAudioFormat_PCM
MF_MT_AUDIO_BITS_PER_SAMPLE 每个样本的位数。 必须为 16。
MF_MT_AUDIO_SAMPLES_PER_SECOND 每秒样本数。 支持以下值:
  • 44100 (44.1 KHz)
  • 48000 (48 KHz)
MF_MT_AUDIO_NUM_CHANNELS 通道数。 必须是 1 (单声道) 或 2 (立体声) ,或 6 (5.1) 。 注意:Windows 10引入了对 6 个音频通道的支持,不适用于早期版本的 Windows。

设置输入类型后,编码器将派生以下值并将其添加到媒体类型:

输出类型

在输出媒体类型上设置以下属性。

Attribute 说明 备注
MF_MT_MAJOR_TYPE 主要类型。 必须 MFMediaType_Audio
MF_MT_SUBTYPE 音频子类型。 必须 MFAudioFormat_AAC
MF_MT_AUDIO_BITS_PER_SAMPLE 每个样本的位数。 必须为 16。
MF_MT_AUDIO_SAMPLES_PER_SECOND 每秒样本数。 必须与输入类型匹配。
MF_MT_AUDIO_NUM_CHANNELS 通道数。 必须与输入类型匹配。
MF_MT_AUDIO_AVG_BYTES_PER_SECOND 编码的 AAC 流的比特率(以字节/秒为单位)。 支持以下值:
  • 12000
  • 16000
  • 20000
  • 24000
如果使用 6 个通道,请将这些值乘以 6。
单声道和立体声的默认值为 12000 (96 Kbps) 。 6 个通道的默认值为 60000。
MF_MT_AAC_PAYLOAD_TYPE AAC 有效负载类型。 可选。 如果设置,该值必须为零,表示流仅包含raw_data_block元素。
可选。 如果未设置 属性,则默认值为零,指示流仅包含原始 AAC) (raw_data_block元素。
在 Windows 7 中,如果设置了此属性,则该值必须为零。
从 Windows 8 开始,该值可以是 0 (原始 AAC) 或 1 (ADTS AAC) 。
MF_MT_AAC_AUDIO_PROFILE_LEVEL_INDICATION AAC 音频配置文件和级别。 可选。 支持以下值:
  • 0x29 (默认)
  • 0x2A
  • 0x2B
  • 0x2C
  • 0x2E
  • 0x2F
  • 0x30
  • 0x31
  • 0x32
  • 0x33

下表列出了可用于 MF_MT_AAC_PROFILE_LEVEL_INDICATION 属性的值。

MF_MT_AAC_PROFILE_LEVEL_INDICATION值 配置文件
0x29 AAC 配置文件 L2
0x2A AAC 配置文件 L4
0x2B AAC 配置文件 L5
0x2C 高效 v1 AAC 配置文件 L2
0x2E 高效 v1 AAC 配置文件 L4
0x2F 高效 v1 AAC 配置文件 L5
0x30 高效 v2 AAC 配置文件 L2
0x31 高效 v2 AAC 配置文件 L3
0x32 高效 v2 AAC 配置文件 L4
0x33 高效 v2 AAC 配置文件 L5

设置输出类型后,AAC 编码器通过添加 MF_MT_USER_DATA 属性来更新类型。 此属性包含 HEAACWAVEINFO 结构的部分,该部分显示在 WAVEFORMATEX 结构 (,即 wfx 成员) 之后。 随后是 AudioSpecificConfig () 数据,由 ISO/IEC 14496-3 定义。

每个输出示例都包含一个没有标头的压缩 AAC 帧。 此格式等效于 MPEG-2 定义的 raw_data_block () 元素。 如果输出类型中存在 MF_MT_AAC_PAYLOAD_TYPE 属性,则必须设置为零以指示此有效负载类型。

每个输出样本都包含一个对应于 1024 个 PCM 样本的压缩 AAC 帧。 例如,在 48 Khz 采样率下,一个压缩帧的持续时间为 21.33 毫秒。

如果 MF_MT_AAC_PAYLOAD_TYPE 为零 (默认值) ,则每个输出样本包含 ISO/IEC 13818-7 定义的一个 raw_data_block () 元素。

示例媒体类型

下面是从 44.1-kHz、160 Kbps 立体声音频编码到原始 AAC 所需的媒体类型示例

输入媒体类型:

Attribute
MF_MT_MAJOR_TYPE MFMediaType_Audio
MF_MT_SUBTYPE MFAudioFormat_PCM
MF_MT_AUDIO_BITS_PER_SAMPLE 16
MF_MT_AUDIO_SAMPLES_PER_SECOND 44100
MF_MT_AUDIO_NUM_CHANNELS 2
MF_MT_AUDIO_AVG_BYTES_PER_SECOND 176400 (可选)
MF_MT_AUDIO_BLOCK_ALIGNMENT 4 (可选)
MF_MT_ALL_SAMPLES_INDEPENDENT 1 个 (可选)
MF_MT_AVG_BITRATE 1411200 (可选)
MF_MT_FIXED_SIZE_SAMPLES 1 个 (可选)

输出媒体类型:

Attribute
MF_MT_MAJOR_TYPE MFMediaType_Audio
MF_MT_SUBTYPE MFAudioFormat_AAC
MF_MT_AUDIO_BITS_PER_SAMPLE 16
MF_MT_AUDIO_SAMPLES_PER_SECOND 44100
MF_MT_AUDIO_NUM_CHANNELS 2
MF_MT_AUDIO_AVG_BYTES_PER_SECOND 20000
MF_MT_AAC_PAYLOAD_TYPE 0 (可选)
MF_MT_AAC_AUDIO_PROFILE_LEVEL_INDICATION 0x29 (可选)
MF_MT_AUDIO_BLOCK_ALIGNMENT 1 个 (可选)
MF_MT_ALL_SAMPLES_INDEPENDENT 0 (可选)
MF_MT_AVG_BITRATE 160000 (可选)
MF_MT_USER_DATA {0x00、0x00、0x29、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x12、0x10} (可选)

注解

在当前实现中,每个输入示例都必须具有有效的时间和持续时间。 若要设置采样时间,请调用 IMFSample::SetSampleTime。 若要设置采样持续时间,请调用 IMFSample::SetSampleDuration

如果未设置采样时间,编码器的 IMFTransform::P rocessInput 方法将返回 MF_E_NO_SAMPLE_TIMESTAMP。 如果未设置样本持续时间, ProcessInput 方法将返回 MF_E_NO_SAMPLE_DURATION

示例持续时间的计算方式如下:

LONGLONG hnsSampleDuration = 
    ( nAudioSamplesPerChannel * (LONGLONG)10000000 )/nSamplesPerSec;

其中 nAudioSamplesPerChannel 是输入缓冲区中每个通道的 PCM 音频样本数, nSamplesPerSec 是采样率(以每秒样本数为单位)。

注意

由于当前实现中的 bug,如果示例持续时间设置为零, 则 ProcessInput 调用成功,但对 IMFTransform::P rocessOutput 的后续调用将引发被零除异常。 若要避免此错误,请为每个输入样本设置有效的非零持续时间。

要求

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

请参阅

编解码器对象

AAC 解码器

AAC 媒体类型

音频媒体类型

媒体基础中的 MPEG-4 支持

Media Foundation 中支持的媒体格式