3

我有一个 C# DirectShow.Net 应用程序,我想测试它在其他计算机上以发布模式运行。我如何才能确保我的程序可以在其他不包含 windows sdk 和它可用的过滤器的机器上运行?

我将不得不包括 dirctshow dll 等,但我可以对过滤器本身做些什么?

更新:我有虚拟机来运行它,但此外,我如何确保某个 Directx 过滤器在计算机上,如果不是,获取 dll 并将其从代码注册到计算机?

编辑:在我注册了 DLL 之后,我运行我的程序。它没有运行,所以我抓取 graphstudio 并将程序的图表附加到 graphstudio 并且没有连接任何过滤器,当我尝试手动连接它们时,它们拒绝连接。

编辑2:

Can you post more details about the scenario you are having problems with? 

我正在运行我的应用程序,该应用程序在我的 Virtualbox VM 上的 Windows 7 32 位机器上运行。virtualbox 不允许我访问我的 USB 设备以进行流式传输,因此我注释掉了依赖它的代码。当我运行它时,过滤器不会连接。我做了一些测试并尝试在没有源的情况下重新创建图表,它们不会连接在一起,所以这实际上可能是问题所在。

OS version? 

目前我正在运行 32bit XP virtualbox VM

which filters you are using? 

我在用

Source -> Smart tee (capture) -> GMFBridgeSinkFilter
          Smart tee (preview) -> AVI Decompressor -> Video REnderer

GMFBridgeSource -> ffdshow video encoder -> avi mux -> File writer

(w)riter 出于某种奇怪的原因必须是小写的。开发机器有 (w)riter 和 (W)riter

Which filters do you have there that you are not using? 

您的意思是我在代码中放入的操作系统或过滤器上的标准并且没有连接到哪些?

You could also try with the original GraphEdit instead of GraphStudio, and you could debug your application remotely and see where it is failing exactly.

Graphedit 仅包含在完整的 windows sdk 中,在我所在的位置下载起来很痛苦。

4

1 回答 1

1

以下是您可以执行的一些验证的列表:

  • 正如@HiperiX 所说,在干净的系统中测试您的应用程序是一个好主意,也许使用一些虚拟化软件。如果您需要支持 Win XP,最好也在那里进行测试,因为有一些 DirectShow 过滤器仅在 Win Vista 和更高版本中可用。
  • 关于所需的过滤器,其中一些可能由 Windows 提供。那些不是,您必须在应用程序的安装过程中提供并在目标系统中注册它们。在这种情况下,我建议从 Visual Studio 创建一个安装项目,并在其中附加所有依赖项 dll。对于手动安装,您可以将过滤器复制到应用程序的文件夹并使用regsvr32 filtername.ax命令行注册它们。
  • 您需要注意的另一个细节是与 64 位版本的 Windows 的兼容性,因为您不能在 64 位应用程序中使用为 32 位本机模式构建的过滤器。如果您的应用程序是在 .net 中开发的并且是使用AnyCPU 模式构建的,.net JIT 将从它创建 64 位代码,并且您的 32 位 dll 将无法加载。因此,如果您使用的是 32 位 dll,我建议您使用 CPU 类型 = X86 构建您的 .net 应用程序。您可以在 Visual Studio 的项目配置中设置此模式。
  • 根据过滤器的创建方式,您可能还需要安装 Visual c++ 可再发行文件
  • 关于这句话:

我做了一些测试并尝试在没有源的情况下重新创建图表,它们不会连接在一起

这当然是一个问题,如果没有源过滤器和目标过滤器,您将无法创建图表。源过滤器通常会确定内容格式、压缩、色彩空间等。为了使用虚拟系统测试此应用程序,您需要提供对虚拟操作系统内 USB 端口的直接访问,并为您的捕获安装驱动程序那里的设备,就像在真实系统中一样。否则 DirectShow 将不会检测到您的设备。

于 2011-06-27T20:18:34.783 回答