【问题标题】:GMFBridge source filter doesn't receive frameGMFBridge 源过滤器不接收帧
【发布时间】:2014-07-17 12:55:30
【问题描述】:

我有一个网络摄像头,我想在不停止渲染器的情况下开始/停止视频录制。这就是我想使用 GMFBridge 的原因。我的图表是:

Webcam -> FFDShow -> SampleGrabber -> Infinite Tee -> Color Converter -> Renderer

                                                   |---> GMFBridge Sink Filter

GMFBridge Source Filter -> Color Space Converter -> Encoder -> File Writer

我做所有的事情,比如文档(InsertSinkFilter、InsertSourceFilter、BridgeGraphs 等),但 GMFBridge 源过滤器没有收到任何帧。

DirectShow.NET samples 中的 GMFPreview 示例有效,但它使用 RenderStream 函数来准备图形。我的代码和 GMFPreview 之间的唯一区别是我手动添加过滤器并连接它们的引脚并启动图形(我不使用 RenderStream 函数)。

在 GMFBridge Source Filter 中接收帧应该怎么做?

【问题讨论】:

  • 渲染器是否工作?你怎么知道 GMFBridge 源过滤器不接收样本? (即编码器或文件写入器不会有问题吗?)
  • 是的,渲染器工作,但另一个分支没有。我不认为是关于编码器什么的,因为我用编码器部分更改了渲染器部分,然后我的录制成功但渲染器是黑色的。
  • 我解决了这个问题并贴在下面。现在我的渲染器过滤器在单独的图中,它通过 GMFSourceFilter 获取帧。问题是:当我将窗口移动到另一个监视器时,图形停止并且不启动。为什么图形不会自动启动?我怎样才能检测到这种情况并再次运行图表?

标签: c# video directshow directshow.net


【解决方案1】:

调试的第一步是在 JoinFilterGraph 方法中启用图形注册,并确保(使用 Graphedt 连接到远程图形)引脚以您期望的方式连接。

然后,创建一个日志文件 — 在“我的文档”中创建一个空文件 gmfbridge.txt,运行应用程序,然后查看日志以了解交付的进度。

【讨论】:

  • 我使用 GraphEdit 的“连接到远程图形”选项检查了两个图形,没有问题。根据日志文件,pin 收到帧但断开连接。我将日志文件上传到这里:tny.cz/0dc4c458
  • 顺便说一句;非常感谢戴维斯先生的回答。感谢您的帮助。
【解决方案2】:

我不敢相信我犯了多么愚蠢的错误。我曾经用ICaptureGraphBuilder 实例做桥图:

Bridge.BridgeGraphs(Graph_builder, Graph_builder2);

但实际上我应该使用接收器过滤器和源过滤器参数来桥接图表:

Bridge.BridgeGraphs(Graph_BridgeSinkFilter, BridgeSourceFilter);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-12
    • 2017-12-31
    • 2013-07-28
    • 1970-01-01
    • 1970-01-01
    • 2017-10-22
    相关资源
    最近更新 更多