Udostępnij przez


Korzystanie z narzędzia rozpoznawania źródła

Narzędzie rozpoznawania źródła pobiera adres URL lub strumień bajtów i tworzy odpowiednie źródło multimediów dla tej zawartości. Aby utworzyć program rozpoznawania źródła, wywołaj metodę MFCreateSourceResolver. Ta funkcja zwraca wskaźnik interfejsu IMFSourceResolver.

Program rozpoznawania źródła ma metody synchroniczne i asynchroniczne. Jeśli używasz narzędzia rozpoznawania źródła z głównego wątku aplikacji, metody asynchroniczne sprawią, że interfejs użytkownika będzie bardziej dynamiczny. Metody synchroniczne mogą blokować zauważalną ilość czasu, szczególnie jeśli program rozpoznawania źródła musi otworzyć zasób sieciowy.

Metody synchroniczne to:

Metody asynchroniczne to:

W przypadku metod asynchronicznych każda metoda ma odpowiadającą metodę End..., aby ukończyć żądanie asynchroniczne, oraz metodę Cancel..., aby anulować oczekujące żądanie. Aby uzyskać więcej informacji na temat metod asynchronicznych w programie Media Foundation, zobacz Metody asynchronicznego wywołania zwrotnego.

Poniższy przykład kodu tworzy źródło multimediów na podstawie adresu URL. W tym przykładzie użyto metody synchronicznej.

//  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;
}

Rozwiązywacz źródeł