使用Media Foundation API禁用特定的解码器

问题描述

我有一个嵌入了Windows Media Player的项目。使用Media Foundation API,如何禁用mp4和mkv文件格式?因此,Windows Media Player将使用第三方解码器来生成mp4和mkv文件格式。 (在我的情况下是FFDSHOW,我想将其H264解码器用于mp4和mkv文件格式,而不是Media Foundation解码器。)

我听说有一个名为Codec Tweak Tool的第三方软件可以完成这项工作,很可能是使用Media Foundation API来实现的。

使用Codec Tweak Tool和Win注册表调试器,我发现了一些可能与Media Foundation相关的注册表目录。

我尝试在以下Win注册表目录中更改注册表:HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Windows Media Foundation\ByteStreamHandlers\.mkv(Windows 10 64位目录),但是系统未授予我权限,使用注册表似乎是一种更改方法但是,顺便说一句,我的访问被拒绝了。我认为这不是正确的方法。我听说可以通过使用Media Foundation API,也可以使用Media Foundation TransformsSource Resolver来达到相同的目的,但是我不知道如何设置适当的对象并使用API​​接口做这样的事情。但是我知道禁用它之后,我应该设置首选的directShow解码器,例如FFDSHOW,这样对于那些我想禁用的文件格式,它将代替Media Foundation使用。

使用Codec Tweak Tool更改H264首选解码器后,我发现在设置首选directShow解码器后哪些注册表已更改。

密钥目录: HKLM\SOFTWARE\WOW6432Node\Microsoft\DirectShow\Preferred(Windows 10 64位目录)

已被修改注册表:

{31435641-0000-0010-8000-00AA00389B71}
{34363248-0000-0010-8000-00AA00389B71}
{34363268-0000-0010-8000-00AA00389B71}

并将以下FFDSHOW CLSID应用于它们中的每一个{04FE9017-F873-410E-871E-AB91661A4EF7}

我还注意到CLSID是设置首选解码器所必需的。

我得出的结论是,使用注册表绝对不是实现此目标的正确方法,那么如何使用Media Foundation API来做到这一点?我已经读过Media Foundation API documentation,但是由于它的级别低且复杂,对我来说似乎很困惑。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)