admin管理员组文章数量:1570219
相信搞directshow开发的CSDN们也会经常遇到这样的问题:
当你将一个文件直接拖到graphedit建图播放的时候,会返回无法加载此文件的源筛选器, ERROR: 0x80040241的错误;但是当你手动的去加载一个file source(async) filter,然后再去自动render pin 的时候,就可以成功的把graph图build出来,而且可以正常播放了。
那我们不禁会问这里面的原因是什么呢?
在给出自己的一个解决方案之前,推荐大家去看下这个文章:http://msdn.microsoft/zh-cn/library/dd377513.aspx
也许看了这篇文章以后,大家可以自行找出多种解决这个错误的方法。
通过文章我们知道,graphedit 去为一个文件加载source filter的算法大抵上是通过匹配注册表里的一些信息来完成的:
graphedit首先去判断你这个文件源地址是不是基于某一种协议,如果是,则在注册表中查找这个协议相关的注册表信息,找到Source Filter
如果源文件地址不是某种协议,则在HKEY_CLASSES_ROOT\Media Type\Extensions下面查找和源文件扩展名一样的项,如果找到,则进一步取得Source Filter
如果前面两个条件都不满足,则用check Bytes 的方式,即通过检查文件中特定位置的内容和HKEY_CLASSES_ROOT\MediaType\{major type}\{subtype}里面的项进行匹配
具体的匹配规则可以参考上面的链接
如果前面三种方式都无效的话,则默认加载file source(async) filter作为源筛选器。
以上的论述就是大概的graphedit 为文件选择源筛选器的方式
以在graphedit里面打开一个flv视频文件为例,按照以上的策略来说,对于三种条件都不满足的情况下,应该选择file source(async) filter作为源筛选器,
但是在xp系统下的测试,给出 ERROR: 0x80040241的错误,至于为什么会出现这样的错误不得而知,如果有哪位知道原因的话,可以一起交流下
而在win7的系统下,flv文件却是默认加载file source(async) filter的
这里我用了一种比较简单的方式解决了这个问题:
在HKEY_CLASSES_ROOT\Media Type\Extensions下面添加一个扩展名为.flv子项,子项里面的内容如下:
{E436EBB5-524F-11CE-9F53-0020AF0BA770}这个GUID就是file source(async) filter的GUID
这样Graphedit就可以为扩展名为flv的文件正确的加载源筛选器了
版权声明:本文标题:GraphEdit,无法加载此文件的源筛选器, ERROR: 0x80040241的解决方法 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://m.elefans.com/dongtai/1727665434a1124591.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论