Directshow Preview Only 和 Capture & Preview with a Single Graph

Directshow Preview Only and Capture & Preview with a single Graph

本文关键字:Preview Single Graph with Capture Only Directshow      更新时间:2023-10-16

我有一个需要预览网络摄像头视频的Directshow应用程序,当用户单击"录制"时,它需要开始将视频捕获到文件中。

为此,我创建了一个捕获图,其中预览引脚连接到渲染过滤器,捕获引脚连接到保存到文件的AVI_MUX过滤器。

它看起来像这样:

                        /[PREVIEW PIN]-->[VIDEO_RENDERER]--->[SCREEN]
[VIDEO CAPTURE FILTER] /
                       
                        [CAPTURE PIN]--->[AVI_MUX]--->[FILE WRITER]

当我在图表上调用 Run() 时,视频会显示在屏幕上并正确保存到文件中。

我的问题是,我怎么能只运行图表的预览 PIN 部分而没有CAPTURE_PIN部分。

最初的想法是手动启动/停止各自的过滤器,但后来我查看了Microsoft的 Directshow amcap 示例,它们实际上创建了两个单独的图形。 一个用于预览,一个用于捕获。 如果用户想要预览视频,他们会销毁捕获图并创建预览图。 如果用户想要录制视频,他们会销毁预览图并创建捕获图。

这似乎有点浪费,特别是因为单个图形已经包含预览和捕获引脚。 这里正确的方法是什么?

过滤器图可以作为一个整体改变状态,你不能单独和单独运行它的一部分。

最简单的解决方案是单独构建预览图,当您需要开始录制时,停止/关闭预览图并重新构建新的捕获图。这肯定会涉及响应"开始录制"命令的一定延迟。

另一种选择是使用多个图形,在代码中或使用"桥接"在两者之间共享数据,并分别启动/停止图形。

您可以尝试在两个不同的图形之间切换:

1)第一个简单的图表,而不是用户只是看

2)第二复杂图,比用户同时观看和记录

相关文章: