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 | 每秒样本数。 | 支持以下值:
|
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 (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 音频配置文件和级别。 | 可选。 支持以下值:
|
下表列出了可用于 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 |
|