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 枚举的成员,指定要创建的对象类型。
值 | 含义 |
---|---|
|
创建字节流。 字节流必须支持 IMFByteStream 接口。 |
|
创建媒体源。 媒体源必须支持 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 。
实现说明
媒体引擎扩展可用于支持自定义字节流对象和/或自定义媒体源。 对于字节流,当 类型 等于 MF_OBJECT_BYTESTREAM 时创建字节流对象。 对于媒体源,当类型等于 MF_OBJECT_MEDIASOURCE时创建源。若要加载 URL,媒体引擎执行以下步骤:
- 尝试从 URL 创建字节流。
- 如果已成功创建字节流,请尝试从字节流创建媒体源。
- 如果无法创建字节流,请尝试直接从 URL 创建媒体源。
在每个步骤中,媒体引擎在扩展对象上调用 IMFMediaEngineExtension::BeginCreateObject 。 如果 BeginCreateObject 方法失败,媒体引擎将尝试 源解析程序。
在 BeginCreateObject 方法中,可以选择处理以下任何情况:
- 类型参数MF_OBJECT_BYTESTREAM。 从 URL 创建字节流。
- 类型参数MF_OBJECT_MEDIASOURCE,pByteStream 指向字节流。 使用字节流创建媒体源。
- 类型参数为 MF_OBJECT_MEDIASOURCEpByteStream 为 NULL。 从 URL 创建媒体源。
对于不处理的任何情况,返回失败代码。
示例:
- 若要支持自定义媒体格式,请实现媒体源。 如果媒体源不需要任何特殊的字节流实现,请在类型为MF_OBJECT_MEDIASOURCE且 pByteStream 为非 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 |