IMediaControl::GetState 方法 (control.h)

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

方法 GetState 检索筛选器图的状态-已暂停、正在运行或已停止。

状态转换不一定是同步的。 因此,调用此方法时,筛选器图可能正在转换为新状态。 在这种情况下, 方法会阻塞,直到转换完成或指定的超时结束为止。

语法

HRESULT GetState(
  [in]  LONG          msTimeout,
  [out] OAFilterState *pfs
);

参数

[in] msTimeout

超时持续时间(以毫秒为单位)或 INFINITE,用于指定无限超时。

[out] pfs

接收 FILTER_STATE 枚举的成员。

返回值

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

返回代码 说明
S_OK
成功。
VFW_S_STATE_INTERMEDIATE
筛选器图仍在转换为指示的状态。
VFW_S_CANT_CUE
筛选器图已暂停,但无法提示数据。
E_FAIL
失败。

注解

应用程序可以使用此方法来确定在调用 IMediaControl::Run 后是否开始播放。 通常,应用程序应有自己的机制来跟踪它们已将筛选器图置于哪个状态。 应用程序通常使用当前状态来确定启用或禁用哪些用户界面控件。 例如,一旦图形进入运行状态,应用程序可能会禁用“播放”按钮并启用“停止”和“暂停”按钮。

如果筛选器图正在转换到新状态,则返回的状态是新状态,而不是以前的状态。

如果在阻止此方法时调用另一个线程来更改状态,此方法将返回错误。

避免指定 INFINITE 超时,因为线程在 中 GetState等待时无法处理消息。 如果从处理 Windows 消息的线程调用 GetState ,请在调用上指定较短的等待时间,以保持对用户输入的响应。 当源通过网络或从 Internet 流式传输时,这一点尤其重要,因为这些环境中的状态转换可能需要更多时间才能完成。

FILTER_STATE枚举。 可以强制转换变量,如下所示:


FILTER_STATE fs;
hr = pControl->GetState(msTimeOut, (OAFilterState*)&fs);

有关筛选图状态的详细信息,请参阅 筛选状态

要求

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

另请参阅

错误和成功代码

IMediaControl 接口