如何在其他计算机上运行DirectShow.net应用程序

时间:2011-06-27 18:56:23

标签: c# directshow directshow.net

我有一个C#DirectShow.Net应用程序,我想在发布模式下测试它在其他计算机上运行。我如何确保我的程序将运行在其他没有包含Windows sdk的机器上以及它所使用的过滤器?

我将不得不包括dirctshow dlls等,但我可以对滤镜本身做些什么呢?

更新: 我有虚拟机来运行它,但是我怎样才能确保计算机上有某个directx过滤器,如果不是,请抓住dll并从代码中将它注册到计算机上?

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

Edit2:

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

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

OS version? 

目前我正在运行32位XP虚拟机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中,这是一个很难下载的地方。

1 个答案:

答案 0 :(得分:1)

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

  • 正如@HiperiX所说,这是一个好主意 以干净的方式测试您的应用程序 系统,也许使用一些 虚拟化软件。如果你需要 为了支持Win XP,它将是一个很好的 从那以后,我也想在那里测试它 有一些DirectShow过滤器 仅适用于Win Vista 以及。
  • 关于所需的过滤器,部分 它们可能由Windows提供。 那些不是,你必须提供 他们并在目标中注册 系统安装过程中 你的申请流程。我会 建议在这种情况下创建一个 视觉安装项目 工作室并附上你所有的 依赖dll那里。对于手册 安装你可以复制你的 过滤到应用程序的文件夹 并使用命令行中的regsvr32 filtername.ax注册它们。
  • 您需要采取的其他细节 照顾与64位的兼容性 Windows的版本,因为你不能 使用为32位本机构建的过滤器 来自64位应用程序的模式。如果 你的应用程序是开发的 .net,它是使用AnyCPU构建的 模式,.net JIT将创建64位 来自它的代码和你的32位dll 将无法加载。所以,如果你是 使用32位dll我会建议 用。构建你的.net应用程序 CPU类型= X86。您可以设置此模式 在您的项目配置中 Visual Studio。
  • 取决于您的过滤器的方式 创建后,您可能还需要安装 Visual c++ redistributable files
  • 关于这句话:
  

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

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