DirectShow Connect() 与 ConnectDirect()

DirectShow Connect() vs ConnectDirect()

我目前正在开发一个使用 DirectShow 的应用程序。 该应用程序应该支持许多不同的网络摄像头,这些摄像头可能有很多不同的输出引脚 ColorSpace 配置(RGB、YUV、I420 等)。

在编码时,我将始终使用相同的编码过滤器和 mux + 文件编写器 - 但是我不知道如何将源过滤器上的输出引脚连接到编码过滤器上的输入引脚,因为它会取决于源过滤器的输出 ColorSpace.

示例:

  1. Source1 (RGB24) -> 颜色 Space 转换器 -> RGB2YUV -> 编码器 -> MUX -> 文件编写器。
  2. Source2 (YUV) -> 编码器 -> Mux -> 文件编写器。
  3. Source3 (MJPG) -> MJPEG 解压器 -> 颜色 Space 转换器 -> RGB2YUV -> 编码器 -> Mux -> 文件编写器。

等等..意味着在编码器之前可能有很多不同的过滤器配置。 我现在的问题是,使用智能 Connect() 而不是 ConnectDirect() 将源过滤器连接到编码器过滤器是否完全可以? 或者我是否必须每次检查源输出引脚的媒体类型,并根据源输出引脚的颜色 Space(RGB、YUV..)手动构建图表?

有没有一种我可能不知道的简单方法 - 似乎有无数种可能性可以将源过滤器连接到编码器..

感谢您的帮助。

使用Connect和智能连接就可以了。基本上这意味着您请求连接引脚 "somehow" 和 "the best way possible"。

但是,由于在许多情况下可能有多种选择、不同的环境、硬件和配置,因此您希望以您知道的可预测方式进行连接(尤其是涉及编码而非解码时)。

一个好的策略是 Connect(和 ConnectDirect)到您知道的个别过滤器,并且您确定您确实需要它们,然后将智能连接留给您可以接受的连接系统提供的过滤器链,尤其是。在解码方面,Windows 应该为您选择可用的解码器。

此外,当 Intelligent Connect 有问题时,ConnectConnectDirect 几乎没有区别。无论哪种方式,过滤器都使用媒体类型进行连接,有时他们可能会在旅途中重新同意媒体类型。更重要的是你是连接到已知的过滤器,还是让智能连接为你提供连接所需的过滤器。错误选择的过滤器,或者注册错误的过滤器会导致进程崩溃而不是连接管道,这通常是真正令人头疼的问题。