IMFSourceReader::ReadSample 方法 (mfreadwrite.h)

从媒体源读取下一个示例。

语法

HRESULT ReadSample(
  [in]  DWORD     dwStreamIndex,
  [in]  DWORD     dwControlFlags,
  [out] DWORD     *pdwActualStreamIndex,
  [out] DWORD     *pdwStreamFlags,
  [out] LONGLONG  *pllTimestamp,
  [out] IMFSample **ppSample
);

参数

[in] dwStreamIndex

要从中拉取数据的流。 该值可以是以下任一值。

含义
0–0xFFFFFFFB
流的从零开始的索引。
MF_SOURCE_READER_FIRST_VIDEO_STREAM
0xFFFFFFFC
第一个视频流。
MF_SOURCE_READER_FIRST_AUDIO_STREAM
0xFFFFFFFD
第一个音频流。
MF_SOURCE_READER_ANY_STREAM
0xFFFFFFFE
获取下一个可用示例,而不考虑哪个流。

[in] dwControlFlags

MF_SOURCE_READER_CONTROL_FLAG枚举中的零个或多个标志的按位 OR

[out] pdwActualStreamIndex

接收流的从零开始的索引。

[out] pdwStreamFlags

MF_SOURCE_READER_FLAG枚举接收零个或多个标志的按位 OR

[out] pllTimestamp

接收示例的时间戳,或 pdwStreamFlags 中指示的流事件的时间。 时间以 100 纳秒为单位提供。

[out] ppSample

接收指向 IMFSample 接口的指针或值 NULL (请参阅备注) 。 如果此参数收到非 NULL 指针,则调用方必须释放接口。

返回值

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

返回代码 说明
S_OK
方法成功。
MF_E_INVALIDREQUEST
请求无效。
MF_E_INVALIDSTREAMNUMBER
dwStreamIndex 参数无效。
MF_E_NOTACCEPTING
刷新操作处于挂起状态。 请参阅 IMFSourceReader::Flush
E_INVALIDARG
无效的参数。 请参阅“备注”。

注解

如果未选择请求的流,则 返回代码MF_E_INVALIDREQUEST。 请参阅 IMFSourceReader::SetStreamSelection

此方法可以同步完成,也可以异步完成。 如果在创建源读取器时提供回调指针,则 该方法是异步的。 否则, 方法是同步的。 有关设置回调指针的详细信息,请参阅 MF_SOURCE_READER_ASYNC_CALLBACK

异步模式

在异步模式下:

同步模式

在同步模式下:
  • pdwStreamFlagsppSample 参数不能为 NULL。 否则,方法将返回 E_POINTER
  • pdwActualStreamIndexpllTimestamp 参数可以为 NULL
  • 方法将阻止,直到下一个示例可用。
在同步模式下,如果 dwStreamIndex 参数MF_SOURCE_READER_ANY_STREAM,则应为 pdwActualStreamIndex 传递非 NULL 值,以便知道哪个流传送了示例。

此方法可以在 pdwStreamFlags 参数中返回标志,而无需返回 ppSample 中的媒体示例。 因此,即使方法成功, ppSample 参数也可以接收 NULL 指针。 例如,当源读取器到达流的末尾时,它将返回 pdwStreamFlags 中的MF_SOURCE_READERF_ENDOFSTREAM标志,并将 ppSample 设置为 NULL

如果流中存在间隙,pdwStreamFlags 将接收MF_SOURCE_READERF_STREAMTICK标志,ppSampleNULL,pllTimestamp 指示出现间隙的时间。

如果安装了适用于 Windows Vista 的平台更新补充,则此接口在 Windows Vista 上可用。

要求

要求
最低受支持的客户端 适用于 Windows Vista 的 Windows 7、Windows Vista 和平台更新补充 [桌面应用 |UWP 应用]
最低受支持的服务器 Windows Server 2008 R2 [桌面应用 |UWP 应用]
目标平台 Windows
标头 mfreadwrite.h

另请参阅

IMFSourceReader

源读取器