DirectShow - 如何确定用于预览流 (C#) 的解压缩程序?
DirectShow - how to determine what decompressor to use for preview stream (C#)?
我正在处理需要更新的现有软件。免责声明:这是我第一次使用 DirectShow。
基本上,我们的软件允许用户连接多个不同的视频设备,包括第三方设备。到目前为止,我们已经能够仅使用 AVIDecompressor 就可以摆脱困境。我们的新设备需要 MJPEGDecompressor。我们需要继续支持两者。
我考虑过在 DirectShow 之外简单地检测我们的新设备的存在并传递一个在两个解压缩器之间切换的参数,但我希望需要 MJPEGDecompressor 的第三方设备也能工作,所以我更喜欢在流中进行某种检测。
理想情况下,我希望能够检测需要哪个解压缩器before/during 图初始化。最好的方法是什么,并让它与使用这两个解压缩器之一的任何设备一起工作?
您在 DirectShow 中询问的技术是 Intelligent Connect:您不确定需要哪些过滤器来连接部件,DirectShow 提供其服务以使用其过滤器注册表将缺失的链接提供到链中。
上面的参考页面为您提供了有关 Intelligent Connect 究竟如何工作的详细信息,一个简短的答案是:当您已经有一个需要解压缩器的输出引脚并且您不确定需要哪个过滤器时要在实际添加和连接过滤器之前查询它,您可以使用
... Finally, if no suitable filter has been found, the Filter Graph Manager searches the registry, using the IFilterMapper2::EnumMatchingFilters
method. It tries to match the output pin's preferred media types against media types listed in the registry.
过滤器图表管理器很可能无论如何都会使用相同的方法,并且它将逐一检查潜在的候选人,直到建立连接。当您自己使用它时,您可以更好地控制该过程,并且可以在实际连接尝试之前看到过滤器。
我正在处理需要更新的现有软件。免责声明:这是我第一次使用 DirectShow。
基本上,我们的软件允许用户连接多个不同的视频设备,包括第三方设备。到目前为止,我们已经能够仅使用 AVIDecompressor 就可以摆脱困境。我们的新设备需要 MJPEGDecompressor。我们需要继续支持两者。
我考虑过在 DirectShow 之外简单地检测我们的新设备的存在并传递一个在两个解压缩器之间切换的参数,但我希望需要 MJPEGDecompressor 的第三方设备也能工作,所以我更喜欢在流中进行某种检测。
理想情况下,我希望能够检测需要哪个解压缩器before/during 图初始化。最好的方法是什么,并让它与使用这两个解压缩器之一的任何设备一起工作?
您在 DirectShow 中询问的技术是 Intelligent Connect:您不确定需要哪些过滤器来连接部件,DirectShow 提供其服务以使用其过滤器注册表将缺失的链接提供到链中。
上面的参考页面为您提供了有关 Intelligent Connect 究竟如何工作的详细信息,一个简短的答案是:当您已经有一个需要解压缩器的输出引脚并且您不确定需要哪个过滤器时要在实际添加和连接过滤器之前查询它,您可以使用
... Finally, if no suitable filter has been found, the Filter Graph Manager searches the registry, using the
IFilterMapper2::EnumMatchingFilters
method. It tries to match the output pin's preferred media types against media types listed in the registry.
过滤器图表管理器很可能无论如何都会使用相同的方法,并且它将逐一检查潜在的候选人,直到建立连接。当您自己使用它时,您可以更好地控制该过程,并且可以在实际连接尝试之前看到过滤器。