我在C#应用程序中使用DirectShowLib来允许视频回放。不幸的是,并不是所有的系统都提供像样的视频编解码器,所以我选择安装FFDShow作为安装的一部分。不幸的是,这似乎对某些用户不起作用,因为他们要么已经安装了几个视频编解码器包,要么正在使用旧版本。或者,例如,Windows 7不再需要它。
前段时间,当我使用libvlc时,他们允许我使用所有支持的视频编解码器指定插件路径,但不幸的是,我似乎找不到与DirectShowLib类似的东西。
有没有办法将所需的编解码库打包为应用程序的一部分并指向该文件夹,或者将FFDShow安装到特定的文件夹并引用该文件夹?
发布于 2011-02-18 07:33:54
您可以采用的一种可能的方法是使用免费注册的COM。您可以在清单文件中指明您正在使用一组特定的子组件(例如包含FFDShow组件的子目录)。您还需要为该子目录中的DLL创建一个清单。主要的问题是你必须从C#实例化你的对象,如下所示:
DsGuid MicrosoftDemux = new DsGuid("{AFB6C280-2C41-11D3-8A60-0000F81E0E4A}");
var demux = (IBaseFilter)Activator.CreateInstance(Type.GetTypeFromCLSID(MicrosoftDemux));一旦你有了过滤器,你就可以将它添加到你的图中,转换成其他接口,或者做任何你想做的事情。
为了帮助创建FFDShow组件的清单文件,您可以使用regsvr42 (在此答案中描述:Generate Manifest Files for Registration Free COM
我已经成功地使用它来使用DirectShow过滤器,而不需要注册它们。要记住的一件事是,COM文件必须与您的应用程序位于同一目录或子目录中。将它们放在相邻的目录中将不起作用。
https://stackoverflow.com/questions/4986501
复制相似问题