Bagikan melalui


Menggunakan Penyelesai Sumber

Pemecah masalah sumber mengambil URL atau byte stream dan membuat sumber media yang sesuai untuk konten tersebut. Untuk membuat resolver sumber, panggil MFCreateSourceResolver. Fungsi ini mengembalikan penunjuk antarmuka IMFSourceResolver .

Pemecah masalah sumber memiliki metode sinkron dan asinkron. Jika Anda menggunakan pemecah masalah sumber dari utas aplikasi utama Anda, metode asinkron akan membuat antarmuka pengguna Anda lebih responsif. Metode sinkron dapat memblokir untuk jumlah waktu yang nyata, terutama jika pemecah masalah sumber harus membuka sumber daya jaringan.

Metode sinkronnya adalah:

Metode asinkron adalah:

Untuk metode asinkron, setiap metode memiliki metode End... yang sesuai untuk menyelesaikan permintaan asinkron, dan metode Cancel... untuk membatalkan permintaan yang tertunda. Untuk informasi selengkapnya tentang metode asinkron di Media Foundation, lihat Metode Callback Asinkron.

Contoh kode berikut membuat sumber media dari URL. Contoh ini menggunakan metode sinkron.

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

Pemecah Masalah Sumber