我遇到了一个问题:我需要捕获实时源文件,但需要每分钟切片(不丢失任何帧)。我想,我需要一些可以在输入引脚接收原始视频的滤波器,输出相同,但它应该能够通过自身停止传输(将传入的样本保存在某个缓冲区中)。因此,我可以使用IFilterChain在该过滤器(编码器和文件写入器)之后停止并删除过滤器,而无需停止整个图形,再次创建并继续捕获。好吧,我的问题是:是否有这样的过滤器?或者我的问题有其他解决方案吗?请不要提供停止整个图表,更改目标文件并再次启动它(在该解决方案框架中显示松动)。另外,我无法停止编码器和文件写入器,更改文件并重新启动它们,因为我不知道,在编码器之前有什么过滤器,也许,它不能用于过滤器链(例如,MJPEG Decompressor可以' t,IFilterChain :: StopChain返回S_OK,但整个图表停止,不仅是编码器和文件编写者)
谢谢!
答案 0 :(得分:3)
这不能在单个图解决方案中完成:更改文件需要转换到停止状态。许多过滤器甚至不支持动态重新连接。
典型解决方案包括两个过滤器图:
您需要一种方法来连接两个图形,以便第一个图形将数据传递给另一个图形。您可能希望阅读GMFBridge,直接使用它或熟悉这个概念。
另请参阅(这些和许多其他桥接相关的Q,在这里和MSDN DirectShow论坛上):
UPD。但您不必使用GMFBridge。但无论如何你将不得不做类似的事情。示例 - 基于最大范围的标准过滤器 - 可能是:通过Sample Grabber Filter捕获到Null Renderer Filter。示例Grabber的回调基于PushSource Filter SDK示例将数据复制到自定义源过滤器的输入队列中,该示例连接到第二个图中的File Writer Filter(通过其他过滤器)。