预览视频 (DirectShow)
[与此页面关联的功能 DirectShow 是一项旧功能。 它已被 MediaPlayer、 IMFMediaEngine 和 媒体基金会中的音频/视频捕获取代。 这些功能已针对Windows 10和Windows 11进行了优化。 Microsoft 强烈建议新代码尽可能使用 MediaPlayer、 IMFMediaEngine 和 Media Foundation 中的音频/视频捕获 ,而不是 DirectShow。 如果可能,Microsoft 建议重写使用旧 API 的现有代码以使用新 API。]
若要生成视频预览图,请调用 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 会导致捕获图形生成器根据媒体类型为流选择默认呈现器。 对于视频,捕获图形生成器始终使用 视频呈现器 筛选器作为默认呈现器。
备注
在 Windows XP 及更高版本中,尽管视频混合呈现器 (VMR) 是 IGraphBuilder 方法的默认视频呈现器,但它不是 RenderStream 方法的默认呈现器。 在任何平台上,除非另行指定,否则捕获图形生成器始终使用旧的视频呈现器筛选器。
尽管引脚类别以 PIN_CATEGORY_PREVIEW提供,但筛选器是否确实具有预览引脚并不重要;它可以有一个视频端口引脚或一个捕获插针。 在任一情况下,捕获图形生成器都会自动生成正确的图形。
下图显示了用于预览视频的最简单图形。
在此图中,捕获筛选器具有一个预览引脚,它直接连接到视频呈现器。
如果捕获筛选器只有捕获引脚,捕获图形生成器将插入 智能 Tee 筛选器,该筛选器将流拆分为捕获流和预览流。 这在 组合视频捕获和预览中进行了更详细的介绍。
在某些情况下,视频流必须通过覆盖混音器筛选器。 如果是这样, RenderStream 方法会自动将其添加到图中。
相关主题