问题描述
作为来自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调用建议您请求跳过异步。