Bagikan melalui


Menggunakan Penyelesai Sumber

Penyelesai sumber mengambil URL atau stream byte dan membuat sumber media yang sesuai untuk konten tersebut. Untuk membuat pemecah masalah 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 sinkronisasi dapat memblokir untuk waktu yang cukup lama, terutama jika pemecah sumber harus membuka sumber daya jaringan.

Metode sinkron adalah:

Metode asinkron adalah:

Untuk metode asinkron, setiap metode memiliki End yang sesuai ... metode untuk menyelesaikan permintaan asinkron, dan Batal ... metode untuk membatalkan permintaan yang tertunda. Untuk informasi selengkapnya tentang metode asinkron di Media Foundation, lihat Metode Panggilan Balik 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