Uso del resolver di origine
Il resolver dell'origine accetta un URL o un flusso di byte e crea l'origine multimediale appropriata per il contenuto. Per creare il resolver di origine, chiamare MFCreateSourceResolver. Questa funzione restituisce un puntatore all'interfaccia IMFSourceResolver .
Il resolver di origine ha metodi sincroni e asincroni. Se si usa il resolver di origine dal thread dell'applicazione principale, i metodi asincroni renderanno l'interfaccia utente più reattiva. I metodi sincroni possono bloccare per un periodo di tempo notevole, in particolare se il resolver di origine deve aprire una risorsa di rete.
I metodi sincroni sono:
I metodi asincroni sono:
Per i metodi asincroni, ogni metodo ha un metodo End... corrispondente per completare la richiesta asincrona e un metodo Cancel... per annullare una richiesta in sospeso. Per altre informazioni sui metodi asincroni in Media Foundation, vedere Metodi di callback asincroni.
Nell'esempio di codice seguente viene creata un'origine multimediale da un URL. In questo esempio viene utilizzato il metodo sincrono.
// 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;
}
Argomenti correlati