0

我在 C# 应用程序中使用 DirectShowLib 来允许视频播放。不幸的是,并非所有系统都提供像样的视频编解码器,所以我选择安装 FFDShow 作为我安装的一部分。不幸的是,这似乎不适用于某些用户,因为他们要么已经安装了多个视频编解码器包,要么正在使用旧版本。或者,例如,Windows 7 不再需要它。

当我前段时间使用 libvlc 时,他们允许我使用所有支持的视频编解码器指定插件路径,但不幸的是,我似乎找不到与 DirectShowLib 类似的东西。

有没有办法将所需的编解码器库打包为我的应用程序的一部分并指向该文件夹,或者将 FFDShow 安装到特定文件夹并引用该文件夹?

4

1 回答 1

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 文件必须与您的应用程序或子目录位于同一目录中。将它们放在相邻目录中是行不通的。

于 2011-02-17T23:33:54.153 回答