使用源解析程序
源解析程序采用 URL 或字节流,并为该内容创建相应的媒体源。 若要创建源解析程序,请调用 MFCreateSourceResolver。 此函数返回 IMFSourceResolver 接口指针。
源解析程序同时具有同步和异步方法。 如果从main应用程序线程使用源解析程序,异步方法将使用户界面更具响应性。 同步方法可能会阻塞一段时间,尤其是在源解析程序必须打开网络资源的情况下。
同步方法是:
异步方法是:
对于异步方法,每个方法都有相应的 End... 方法来完成异步请求,以及取消挂起的请求的 Cancel... 方法。 有关 Media Foundation 中异步方法的详细信息,请参阅 异步回调方法。
下面的代码示例从 URL 创建媒体源。 此示例使用同步方法。
// Create a media source from a URL.
HRESULT CreateMediaSource(PCWSTR sURL, IMFMediaSource **ppSource)
{
MF_OBJECT_TYPE ObjectType = MF_OBJECT_INVALID;
IMFSourceResolver* pSourceResolver = NULL;
IUnknown* pSource = NULL;
// Create the source resolver.
HRESULT hr = MFCreateSourceResolver(&pSourceResolver);
if (FAILED(hr))
{
goto done;
}
// Use the source resolver to create the media source.
// Note: For simplicity this sample uses the synchronous method to create
// the media source. However, creating a media source can take a noticeable
// amount of time, especially for a network source. For a more responsive
// UI, use the asynchronous BeginCreateObjectFromURL method.
hr = pSourceResolver->CreateObjectFromURL(
sURL, // URL of the source.
MF_RESOLUTION_MEDIASOURCE, // Create a source object.
NULL, // Optional property store.
&ObjectType, // Receives the created object type.
&pSource // Receives a pointer to the media source.
);
if (FAILED(hr))
{
goto done;
}
// Get the IMFMediaSource interface from the media source.
hr = pSource->QueryInterface(IID_PPV_ARGS(ppSource));
done:
SafeRelease(&pSourceResolver);
SafeRelease(&pSource);
return hr;
}
相关主题