我在C#应用程序中使用DirectShowLib来允许视频播放。不幸的是,并非所有系统都提供了不错的视频编解码器,所以我选择安装FFDShow作为我的安装的一部分。不幸的是,这似乎对某些用户不起作用,因为他们已经安装了几个视频编解码器包或使用旧版本。或者,例如,Windows 7不再需要它。
前一段时间我使用libvlc时,他们允许我用所有支持的视频编解码器指定插件路径,但不幸的是我似乎找不到类似于DirectShowLib的东西。
有没有办法将所需的编解码器库打包为我的应用程序的一部分并指向该文件夹,或者将FFDShow安装到特定文件夹中并引用该文件夹?
答案 0 :(得分:2)
您可以采取的一种可能方法是使用免注册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文件必须与应用程序或子目录位于同一目录中。将它们放在邻居目录中是行不通的。