IAMStreamControl::StopAt 方法 (strmif.h)
[与此页面关联的功能 DirectShow 是一项旧功能。 它已被 MediaPlayer、 IMFMediaEngine 和 媒体基金会中的音频/视频捕获取代。 这些功能已针对Windows 10和Windows 11进行了优化。 Microsoft 强烈建议新代码尽可能使用 MediaPlayer、 IMFMediaEngine 和 Media Foundation 中的音频/视频捕获 ,而不是 DirectShow。 如果可能,Microsoft 建议重写使用旧 API 的现有代码以使用新 API。]
方法 StopAt
通知引脚何时停止传送数据。
语法
HRESULT StopAt(
[in] const REFERENCE_TIME *ptStop,
[in] BOOL bSendExtra,
[in] DWORD dwCookie
);
参数
[in] ptStop
指向 REFERENCE_TIME 值的指针,该值指定引脚何时应停止传送数据。 如果值为 MAXLONGLONG (0x7FFFFFFFFFFFFFFF) ,该方法将取消任何以前的停止请求。 如果 psStop 为 NULL,引脚将立即停止。
对于预览引脚,只有 NULL 和 MAXLONGLONG 值才有效,因为预览引脚不会为其提供的示例加时间戳。
[in] bSendExtra
指定一个布尔值,该值指示是否在计划的停止时间之后发送额外的样本。 如果 为 TRUE,则引脚发送一个额外的样本。
[in] dwCookie
指定要随开始通知一起发送的值。 请参阅“备注”。
返回值
如果该方法成功,则返回值S_OK。 否则, 返回指示失败原因的 HRESULT 值。
注解
如果 dwCookie 参数为非零,则引脚将在停止传送数据时发送 EC_STREAM_CONTROL_STOPPED 事件。 第一个事件参数是指向引脚 的 IPin 接口的指针,第二个参数是 dwCookie 的值。 如果 ptStop 为 NULL 或 MAXLONGLONG,则不发送任何事件,并忽略 dwCookie 的值。
在视频捕获中,通常会在捕获筛选器的输出引脚和多路复用器的输入引脚上调用此方法。 应用程序应等待多路复用器发出停止事件。 这可确保捕获筛选器发送正确数量的帧,同时保证所有帧都到达多路复用器。 此外,将捕获引脚的 bSendExtra 参数设置为 TRUE ,将多路复用器引脚设置为 FALSE 。 这会导致捕获筛选器发送一个额外的帧。 多路复用器依赖于捕获引脚中的时间戳,因此如果未发送额外的帧,多路复用器将无限期等待停止时间。 当多路复用器收到额外的帧时,它将放弃它。
此方法处理以下边界条件:
- 如果停止时间介于样本的开始和停止时间之间,则引脚将提供该样本。
- 如果开始时间等于停止时间,则引脚会提供一个样本。
要求
要求 | 值 |
---|---|
最低受支持的客户端 | Windows 2000 Professional [仅限桌面应用] |
最低受支持的服务器 | Windows 2000 Server [仅限桌面应用] |
目标平台 | Windows |
标头 | strmif.h (包括 Dshow.h) |
Library | Strmiids.lib |