MFTEnumEx在Windows 7上找不到MFAudioFormat_MP3解码器?

问题描述

作为来自IMFTransform SetInputType()/SetOutputType() fails

的分支问题

当我尝试在Windows 7上枚举MP3解码器时,找不到任何MP3解码器吗?但是,当为MFCreateSourceReaderFromURL创建的MP3文件的IMFSourceReader设置部分媒体类型时,它似乎找到了一个

我尝试过:

Parallel.For(0,urls.Count,index => fetchBlcock.Post(urls[index])
});

我相信我已经尝试了MFTEnumEx的所有不同标志,但解码器计数仍然为零?

解决方法

Windows 7 SP1解码器:

MP3解码器MFT

  • MFT_TRANSFORM_CLSID_Attribute:{BBEEA841-0A63-4F52-A7AB-A9B3A84ED38A}(类型VT_CLSID)
  • MF_TRANSFORM_FLAGS_Attribute:MFT_ENUM_FLAG_SYNCMFT
  • MFT_INPUT_TYPES_Attributes:MFAudioFormat_MP3
  • MFT_OUTPUT_TYPES_Attributes: MFAudioFormat_PCM

解码器不会公布对MFAudioFormat_Float的支持以进行解码(即使实例化也很难支持)。枚举解码器将输出限制为MFAudioFormat_Float时,将排除解码器。较新版本的OS可能已更新了解码器,并提供了更多输出格式选项。

如果您这样做的话:

MFT_REGISTER_TYPE_INFO outType { MFMediaType_Audio,MFAudioFormat_PCM };

nullptr输出媒体类型,将枚举解码器。

通常来说,Source Reader API也使用相同的MFTEnum逻辑,以使实际的源媒体类型适合所请求的媒体类型。

枚举时也要注意标志:选择完全同步的MFT对您而言并不那么重要,但是您的API调用建议您请求跳过异步。