【问题标题】:DirectShow capturing to multiple filesDirectShow 捕获到多个文件
【发布时间】:2014-01-18 11:49:56
【问题描述】:

我有一个问题:我需要将实时源捕获到文件中,但需要每分钟切片(不丢失任何帧)。我认为,我需要一些过滤器,可以在输入引脚接收原始视频,输出相同,但它应该能够停止通过自身传输(将传入的样本保存在某个缓冲区中)。因此,我可以使用 IFilterChain 在该过滤器(编码器和文件编写器)之后停止和删除过滤器,而无需停止整个图形,再次创建它并继续捕获。好吧,我的问题是:有这样的过滤器吗?或者我的问题还有其他解决方案吗?请不要停止整个图形,更改目标文件并重新启动它(在该解决方案框架中出现丢失)。另外,我无法停止编码器和文件编写器,更改文件并重新启动它们,因为我不知道,编码器之前的过滤器是什么,也许它不能与过滤器链一起使用(例如,MJPEG Decompressor can' t,IFilterChain::StopChain 返回 S_OK,但整个图停止,不仅仅是编码器和文件写入器)

谢谢!

【问题讨论】:

    标签: file directshow


    【解决方案1】:

    这不能在单个图形解决方案中完成:更改文件需要通过停止状态进行转换。许多过滤器甚至不支持动态重新连接。

    典型的解决方案包括两个过滤器图:

    1. 连续捕获、生成数据而不会停止
    2. 按文件过滤图,从第一个过滤图接收数据并将其路由到文件。

    您需要一种方法来连接两个图,以便第一个将数据传递给另一个。您可能想阅读GMFBridge,直接使用它或熟悉这个概念。

    另请参阅(这些以及许多其他与桥接相关的 Q,在此处和 MSDN DirectShow 论坛上):

    UPD。不过,您不必使用 GMFBridge。但无论如何你都必须做类似的事情。示例 - 最大程度地基于标准过滤器 - 可能是:通过 Sample Grabber Filter 捕获到 Null Renderer Filter。 Sample Grabber 的回调将数据复制到自定义源过滤器的输入队列中,基于 PushSource Filter SDK 示例,它连接到第二个图中的 File Writer Filter(通过其他过滤器)。

    【讨论】:

    • 谢谢!在谷歌看到它,但认为有没有 GMFBridge 的解决方案。嗯,会用)
    • 看看上面的更新。 GMFBridge 不是强制性的,如果您不想自己实现它可能会很方便。
    猜你喜欢
    • 2012-11-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-07
    • 1970-01-01
    • 2011-03-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多