IMFMediaEngineExtension::BeginCreateObject 方法 (mfmediaengine.h)

开始创建字节流或媒体源的异步请求。

语法

HRESULT BeginCreateObject(
  [in]           BSTR             bstrURL,
  [in]           IMFByteStream    *pByteStream,
  [in]           MF_OBJECT_TYPE   type,
  [out]          IUnknown         **ppIUnknownCancelCookie,
  [in]           IMFAsyncCallback *pCallback,
  [in, optional] IUnknown         *punkState
);

parameters

[in] bstrURL

媒体资源的 URL。

[in] pByteStream

指向 IMFByteStream 接口的指针。

如果 类型 参数等于 MF_OBJECT_BYTESTREAM,则此参数为 NULL

如果 type 等于 MF_OBJECT_MEDIASOURCE,则此参数包含指向字节流的指针或为 NULL。 有关更多信息,请参见备注。

[in] type

MF_OBJECT_TYPE 枚举的成员,指定要创建的对象类型。

含义
MF_OBJECT_BYTESTREAM
创建字节流。 字节流必须支持 IMFByteStream 接口。
MF_OBJECT_MEDIASOURCE
创建媒体源。 媒体源必须支持 IMFMediaSource 接口。

[out] ppIUnknownCancelCookie

接收指向 IUnknown 接口的 指针。 此指针可用于取消异步操作,方法是将指针传递到 IMFMediaEngineExtension::CancelObjectCreation 方法。

调用方必须释放接口。 此参数可以为 NULL。

[in] pCallback

指向 IMFAsyncCallback 接口的指针。 此接口用于发出异步操作完成的信号。

[in, optional] punkState

指向调用方实现的 对象的 IUnknown 接口的指针。 可以使用此对象来保存回调的状态信息。 调用回调时,对象将返回到调用方。 此参数可以为 NULL。

返回值

如果该方法成功,则返回 S_OK。 否则,将返回 HRESULT 错误代码。

注解

此方法请求 对象创建字节流或媒体源,具体取决于 类型 参数的值:

  • 如果 type为MF_OBJECT_BYTESTREAM,则 方法会为 bstrURL 中指定的 URL 创建字节流。 在这种情况下, pByteStream 参数为 NULL
  • 如果 type为MF_OBJECT_MEDIASOURCE,则 方法使用 pByteStream 参数中指定的字节流创建媒体源。 请注意,在这种情况下 ,pByteStream 也可以为 NULL
该方法以异步方式执行。 媒体引擎调用 IMFMediaEngineExtension::EndCreateObject 方法来完成操作。

实现说明

媒体引擎扩展可用于支持自定义字节流对象和/或自定义媒体源。 对于字节流,当 类型 等于 MF_OBJECT_BYTESTREAM 时创建字节流对象。 对于媒体源,当类型等于 MF_OBJECT_MEDIASOURCE时创建源。

若要加载 URL,媒体引擎执行以下步骤:

  1. 尝试从 URL 创建字节流。
  2. 如果已成功创建字节流,请尝试从字节流创建媒体源。
  3. 如果无法创建字节流,请尝试直接从 URL 创建媒体源。

在每个步骤中,媒体引擎在扩展对象上调用 IMFMediaEngineExtension::BeginCreateObject 。 如果 BeginCreateObject 方法失败,媒体引擎将尝试 源解析程序

BeginCreateObject 方法中,可以选择处理以下任何情况:

  • 类型参数MF_OBJECT_BYTESTREAM。 从 URL 创建字节流。
  • 类型参数MF_OBJECT_MEDIASOURCEpByteStream 指向字节流。 使用字节流创建媒体源。
  • 类型参数为 MF_OBJECT_MEDIASOURCEpByteStreamNULL。 从 URL 创建媒体源。

对于不处理的任何情况,返回失败代码。

示例:

  • 若要支持自定义媒体格式,请实现媒体源。 如果媒体源不需要任何特殊的字节流实现,请在类型为MF_OBJECT_MEDIASOURCEpByteStream 为非 NULL 时创建媒体源。 在这种情况下,将使用标准 Microsoft Media Foundation 字节流实现。
  • 若要支持自定义 URL 方案,请处理类型为MF_OBJECT_BYTESTREAM的情况,并返回能够读取 URL 的字节流对象。

如果 BeginCreateObject 方法成功,则应异步执行该操作。 操作完成后,在 pCallback 中指定的回调接口上调用 IMFAsyncCallback::Invoke 方法。 媒体引擎通过调用 IMFMediaEngineExtension::EndCreateObject 完成操作。

要求

   
最低受支持的客户端 Windows 8 [桌面应用 |UWP 应用]
最低受支持的服务器 Windows Server 2012 [桌面应用 |UWP 应用]
目标平台 Windows
标头 mfmediaengine.h

另请参阅

IMFMediaEngineExtension