DirectShow:图形在 GraphEdit 中工作,而不是在代码中

Posted

技术标签:

【中文标题】DirectShow:图形在 GraphEdit 中工作,而不是在代码中【英文标题】:DirectShow: Graph works in GraphEdit, not in code 【发布时间】:2008-12-28 20:14:35 【问题描述】:

我在 GraphEdit 中构建了以下图表:Logitech Webcam -> Infinite Tee Pin Filter -> VideoRenderer。这很好用(GraphEdit 会自动在 TEe 过滤器和 VideoRenderer 过滤器之间插入一些中间过滤器)。

我尝试在代码中做同样的事情,但在尝试将 Tee 过滤器连接到 VideoRenderer 时失败。我首先将网络摄像头连接到 tee 过滤器,它可以工作(网络摄像头打开并且我得到 S_OK),然后我尝试将 tee 过滤器的单个输出引脚连接到第一个,但失败了(错误是它可以找不到一组中间过滤器来连接它们)。我尝试将它们与 IGraphBuilder::Connect 以及 ICaptureGraphBuilder2::RenderStream 连接起来,效果相同。要枚举引脚,我使用 hr = _CaptureGraphBuilder.FindPin(theFilter, PinDirection.Input, null, null, true, 0, out thePin);用于视频渲染器,除了 PinDirection.Output 用于 Tee 过滤器(这是在 C# 中,但构造完全映射到 C++)。

有什么想法吗?

【问题讨论】:

【参考方案1】:

发现问题。显然,网络摄像头过滤器在图表启动之前不会正确更新其输出媒体类型。因此,启动图表,然后在一切完成后重新启动图表就可以了。

【讨论】:

以上是关于DirectShow:图形在 GraphEdit 中工作,而不是在代码中的主要内容,如果未能解决你的问题,请参考以下文章

Graphedit 生成非常大的 MP4 文件

【Godot】入门强大有趣的GraphEdit - 复制粘贴节点(Part7)

directshow Emgucv入门

如何在 VS 2010 中创建 DirectShow 项目

DirectShow一

MFC DirectShow视频预览 [大三TJB_708]