IMFSourceReader::ReadSample 方法(mfreadwrite.h)

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

Syntax

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

参数

[in] dwStreamIndex

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

价值 Meaning
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。 可能的值包括但不限于下表中的值。

返回代码 Description
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 上提供了此接口。

要求

Requirement 价值
最低支持的客户端 适用于 Windows Vista 的 Windows 7、Windows Vista 和平台更新补充 [桌面应用 |UWP 应用]
支持的最低服务器 Windows Server 2008 R2 [桌面应用 |UWP 应用]
目标平台 Windows操作系统
Header mfreadwrite.h

另请参阅

IMFSourceReader

源读取器