预览视频 (DirectShow)

若要生成视频预览图,请调用 ICaptureGraphBuilder2::RenderStream 方法,如下所示:

ICaptureGraphBuilder2 *pBuild; // Capture Graph Builder
// Initialize pBuild (not shown).

IBaseFilter *pCap; // Video capture filter.

/* Initialize pCap and add it to the filter graph (not shown). */

hr = pBuild->RenderStream(&PIN_CATEGORY_PREVIEW, &MEDIATYPE_Video, 
    pCap, NULL, NULL);

此示例假定以下情况:

ICaptureGraphBuilder2::RenderStream 方法的第一个参数指定引脚类别;对于预览图,请使用PIN_CATEGORY_PREVIEW。 第二个参数将媒体类型指定为主要类型 GUID。 对于视频,请使用 MEDIATYPE_Video。 DV 设备提供交错的音频和视频,媒体类型 MEDIATYPE_Interleaved。 (有关 DV 捕获的详细信息,请参阅 DirectShow.) 中的数字视频

第三个参数是指向捕获筛选器的 IBaseFilter 接口的指针。 此示例中不需要接下来的两个参数。 它们用于指定可能需要呈现流的其他筛选器。 将最后一个参数设置为 NULL 会导致 Capture Graph Builder 根据媒体类型为流选择默认呈现器。 对于视频,捕获Graph生成器始终使用视频呈现器筛选器作为默认呈现器。

注意

在 Windows XP 及更高版本中,尽管视频混合呈现器 (VMR) 是 IGraphBuilder 方法的默认视频呈现器,但它不是 RenderStream 方法的默认呈现器。 在任何平台上,捕获Graph Builder 始终使用旧的视频呈现器筛选器,除非另有指定。

 

虽然引脚类别作为 PIN_CATEGORY_PREVIEW提供,但筛选器是否实际具有预览引脚并不重要;它可以有一个视频端口固定或只是一个捕获引脚。 在任一情况下,捕获Graph Builder 会自动生成正确的图形。

下图显示了用于预览视频的最简单图形。

video preview graph

在此图中,捕获筛选器具有一个预览图钉,该图钉直接连接到视频呈现器。

如果捕获筛选器只有捕获引脚,则捕获Graph生成器会插入智能 Tee 筛选器,该筛选器将流拆分为捕获流和预览流。 在 合并视频捕获和预览版中更详细地介绍了这一点。

在某些情况下,视频流必须经过覆盖Mixer筛选器。 如果是这样, RenderStream 方法会自动将其添加到图形。

组合视频捕获和预览

视频捕获