IMFMediaStream::RequestSample 方法 (mfidl.h)

从媒体源请求示例。

语法

HRESULT RequestSample(
  [in] IUnknown *pToken
);

参数

[in] pToken

指向用作请求令牌的 对象的 IUnknown 接口的指针。 调用方必须实现此对象。 此参数可以为 NULL。 请参阅“备注”。

返回值

该方法返回 HRESULT。 可能的值包括(但并不限于)下表中的项。

返回代码 说明
S_OK
方法成功。
MF_E_END_OF_STREAM
已到达流的末尾。
MF_E_MEDIA_SOURCE_WRONGSTATE
媒体源已停止。
MF_E_SHUTDOWN
已调用源的 Shutdown 方法。

注解

如果 pToken 不为 NULL,则媒体流在 pToken 上调用 AddRef,并将令牌置于先入先出队列中。

当下一个示例可用时,媒体流将执行以下操作:

  1. 从队列中拉取第一个令牌。
  2. 设置媒体示例 上的 MFSampleExtension_Token 属性。 属性数据是指向令牌对象的指针。
  3. 发送 MEMediaSample 事件。 事件数据是指向媒体示例的 IMFSample 接口的指针。
  4. 对令牌调用 Release
如果媒体流无法满足调用方对示例的请求,它只会释放令牌对象并跳过步骤 2 和 3。

调用方应监视请求令牌上的引用计数。 如果媒体流发送 MEMediaSample 事件,请从示例中获取 MFSampleExtension_Token 属性,并将属性值与令牌匹配。 如果令牌的引用计数下降到零,并且你未收到 MEMediaSample 事件,则表示请求已删除。

由于媒体基础管道是多线程的,源的 RequestSample 方法可能会在源停止后被调用。 如果停止媒体源,该方法应返回 MF_E_MEDIA_SOURCE_WRONGSTATE。 管道不会将此返回代码视为错误条件。 如果源返回任何其他错误代码,则管道会将其视为严重错误并停止会话。

注意 早期版本的文档列出了这种情况的错误错误代码。

 

如果暂停媒体源,该方法会成功,但在再次启动源之前,流不会传递示例。

如果媒体源在处理数据时异步遇到错误,它应通过以下方式之一发出错误信号 (,但不能同时) :

  • 从下一个 RequestSample 调用返回错误代码。
  • 发送 MEError 事件。

要求

要求
最低受支持的客户端 Windows Vista [桌面应用 | UWP 应用]
最低受支持的服务器 Windows Server 2008 [桌面应用 | UWP 应用]
目标平台 Windows
标头 mfidl.h
Library Mfuuid.lib

另请参阅

IMFMediaStream

媒体源