Uso del solucionador de origen
La resolución del origen usa una URL o una secuencia de bytes y crea el origen multimedia adecuado para el contenido en cuestión. Para crear el solucionador de origen, llame a MFCreateSourceResolver. Esta función devuelve un puntero de interfaz IMFSourceResolver .
El solucionador de origen tiene métodos sincrónicos y asincrónicos. Si usa el solucionador de origen del subproceso de aplicación principal, los métodos asincrónicos harán que la interfaz de usuario tenga mayor capacidad de respuesta. Los métodos sincrónicos pueden bloquearse durante un período de tiempo notable, especialmente si el solucionador de origen debe abrir un recurso de red.
Los métodos sincrónicos son:
Los métodos asincrónicos son:
Para los métodos asincrónicos, cada método tiene un método End... correspondiente para completar la solicitud asincrónica y un método Cancel... para cancelar una solicitud pendiente. Para obtener más información sobre los métodos asincrónicos en Media Foundation, vea Métodos de devolución de llamada asincrónicas.
En el ejemplo de código siguiente se crea un origen multimedia a partir de una dirección URL. En este ejemplo se usa el método sincrónico.
// 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;
}
Temas relacionados