IMediaControl::GetState 方法 (control.h)
[与此页面关联的功能 DirectShow 是一项旧功能。 它已被 MediaPlayer、 IMFMediaEngine 和 媒体基金会中的音频/视频捕获取代。 这些功能已针对Windows 10和Windows 11进行了优化。 Microsoft 强烈建议新代码尽可能使用 MediaPlayer、 IMFMediaEngine 和 Media Foundation 中的音频/视频捕获 ,而不是 DirectShow。 如果可能,Microsoft 建议重写使用旧 API 的现有代码以使用新 API。]
方法 GetState
检索筛选器图的状态-已暂停、正在运行或已停止。
状态转换不一定是同步的。 因此,调用此方法时,筛选器图可能正在转换为新状态。 在这种情况下, 方法会阻塞,直到转换完成或指定的超时结束为止。
语法
HRESULT GetState(
[in] LONG msTimeout,
[out] OAFilterState *pfs
);
参数
[in] msTimeout
超时持续时间(以毫秒为单位)或 INFINITE,用于指定无限超时。
[out] pfs
接收 FILTER_STATE 枚举的成员。
返回值
返回 HRESULT 值。 可能的值包括以下值。
返回代码 | 说明 |
---|---|
|
成功。 |
|
筛选器图仍在转换为指示的状态。 |
|
筛选器图已暂停,但无法提示数据。 |
|
失败。 |
注解
应用程序可以使用此方法来确定在调用 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 |