c – 使用单个图表进行Directshow预览和捕获和预览

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

为此,我创建了一个Capture Graph,PREVIEW引脚连接到RENDER滤波器,CAPTURE引脚连接到保存到文件的AVI_MUX滤波器.

它看起来像这样:

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

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

我的问题是,如何在没有CAPTURE_PIN部分的情况下只运行图表的PREVIEW PIN部分.

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

这似乎有点浪费,特别是因为单个图形已包含PREVIEW和CAPTURE引脚.这里的正确方法是什么?

解决方法:

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

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

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

上一篇:.NET 5.0 Preview 2发布


下一篇:使用SCALER_CROP_REGION裁剪时,Camera2预览被拉伸