ICaptureGraphBuilder2::ControlStream 方法 (strmif.h)

[与此页面关联的功能 DirectShow 是旧版功能。 它已被 MediaPlayerIMFMediaEngineMedia Foundation 中的音频/视频捕获所取代。 这些功能已针对Windows 10和Windows 11进行了优化。 Microsoft 强烈建议新代码尽可能在 Media Foundation 中使用 MediaPlayerIMFMediaEngine音频/视频捕获 ,而不是 DirectShow。 如果可能,Microsoft 建议重写使用旧 API 的现有代码以使用新 API。]

方法 ControlStream 为一个或多个捕获的数据流设置开始和停止时间。

语法

HRESULT ControlStream(
  [in] const GUID     *pCategory,
  [in] const GUID     *pType,
  [in] IBaseFilter    *pFilter,
  [in] REFERENCE_TIME *pstart,
  [in] REFERENCE_TIME *pstop,
  [in] WORD           wStartCookie,
  [in] WORD           wStopCookie
);

参数

[in] pCategory

指向 GUID 的指针,该 GUID 指定 固定属性集中列出的固定类别之一。 此参数的值不能为 NULL

[in] pType

指向指定媒体类型或 NULL 的主类型 GUID 的指针。 如果此参数为 NULL,则 pFilter 参数也设置为 NULL 。 否则,你可能会控制错误的固定并得到不可预知的结果。

[in] pFilter

指向 IBaseFilter 接口的指针,该接口指定要控制的筛选器。 若要控制图中的所有捕获筛选器,请将此参数设置为 NULL

[in] pstart

指向包含开始时间的变量的指针。 如果值为 MAXLONGLONG (0x7FFFFFFFFFFFFFFF) ,则 方法将取消上一个启动请求。 如果值为 NULL,则图钉会在图形运行时立即启动。

[in] pstop

指向包含停止时间的变量的指针。 如果值为 MAXLONGLONG,则 方法将取消以前的任何停止请求。 如果值为 NULL,则引脚会立即停止。

[in] wStartCookie

作为 EC_STREAM_CONTROL_STARTED 事件通知的第二个参数发送的值。 有关更多信息,请参见备注。

[in] wStopCookie

作为 EC_STREAM_CONTROL_STOPPED 事件通知的第二个参数发送的值。 有关更多信息,请参见备注。

返回值

返回 HRESULT 值。 可能的值包括以下值。

返回代码 说明
S_FALSE
至少有一个下游呈现器不会发送停止通知。
S_OK
成功。
E_FAIL
找不到匹配的引脚,或者该引脚不支持流控制。
E_POINTER
NULL 指针参数。

注解

此方法使用在方法调用中提供的搜索条件,在捕获筛选器上查找输出引脚。 然后,它会在这些引脚上调用 IAMStreamControl 方法。 此方法使应用程序能够控制流,而无需应用程序枚举图中的筛选器和引脚。

使用此方法进行帧精确捕获,或单独控制捕获和预览。 例如,可以停止捕获到磁盘,但让视频预览保持运行状态。

前三个参数指定要控制的引脚。 一个捕获图可以有多个捕获筛选器。 例如,它可能有视频、音频和隐藏式字幕数据的筛选器。 此外,捕获筛选器可以有多个输出引脚。 某些捕获筛选器具有单独的用于预览和捕获的固定,或针对仅视频数据和音频-视频交错数据的单独固定。 例如,若要控制视频预览,请为 pCategory 指定PIN_CATEGORY_PREVIEW,为 pType 指定MEDIATYPE_Video。

注意  

如果引脚类别PIN_CATEGORY_PREVIEW,则无法设置特定的开始和停止时间,因为预览引脚提供的示例没有时间戳, (看到 时间戳) 。 请改用 NULLMAXLONGLONG 值在所需时间启动和停止引脚。

此外,如果设备使用视频端口引脚,则预览版不支持此方法,因为在这种情况下,设备直接通过硬件传送预览示例。

 
为了控制引脚,此方法调用 IAMStreamControl::StartAtIAMStreamControl::StopAt 方法。 每个引脚在启动时发送 EC_STREAM_CONTROL_STARTED 事件通知。 事件通知的第二个参数是在 wStartCookie 中给定的值。 固定停止时,它会发送 EC_STREAM_CONTROL_STOPPED 事件通知。 该事件通知的第二个参数是在 wStopCookie 中给定的值。

当此方法找到匹配的引脚时,它会在下游搜索另一个支持 IAMStreamControl 的筛选器, (通常是多路复用器) 。 如果找到该筛选器,则还会设置该筛选器的开始和停止时间。 这会生成两对停止通知:一对用于捕获筛选器,一个用于下游筛选器。 只有来自下游筛选器的停止通知使用 wStopCookie 参数。 等待此事件可确保下游筛选器接收最后一个示例。

如果没有下游筛选器支持 IAMStreamControl,该方法将返回S_FALSE。 在这种情况下,你可能会在呈现最后一个示例之前收到停止通知。

MAXLONGLONG 是可能 的最大REFERENCE_TIME 值。 在 DirectShow 基类库中,它还定义为 常量MAX_TIME

要求

要求
最低受支持的客户端 Windows 2000 Professional [仅限桌面应用]
最低受支持的服务器 Windows 2000 Server [仅限桌面应用]
目标平台 Windows
标头 strmif.h (包括 Dshow.h)
Library Strmiids.lib

另请参阅

错误和成功代码

ICaptureGraphBuilder2 接口