Cara Melakukan Scrubbing

Scrubbing dilakukan untuk secara instan mencari titik tertentu dalam file dengan berinteraksi dengan representasi visual waktu, seperti bilah gulir. Di Media Foundation, menggosok berarti mencari pada file dan mendapatkan satu bingkai yang diperbarui.

Untuk informasi tentang menggosok, lihat Tentang Kontrol Laju.

Untuk melakukan scrubbing

  1. Panggil MFGetService untuk mendapatkan antarmuka IMFRateControl dari Sesi Media.

    Catatan

    Jangan mendapatkan antarmuka IMFRateControl dari sumber media. Selalu dapatkan antarmuka dari Sesi Media.

     

  2. Panggil IMFRateControl::SetRate untuk mengatur laju pemutaran ke nol. Untuk informasi selengkapnya tentang memanggil metode ini, lihat Cara Mengatur Laju Pemutaran pada Sesi Media.

  3. Buat posisi pencarian di PROPVARIANT dengan menentukan waktu presentasi yang ingin dicari dalam jenis MFTIME .

  4. Panggil IMFMediaSession::Start dengan posisi pencarian untuk memulai pemutaran.

  5. Ketika operasi scrub selesai, Sesi Media mengirimkan peristiwa MESessionScrubSampleComplete . Tunggu peristiwa ini sebelum memanggil Mulai lagi untuk operasi scrubbing lain.

Contoh

Contoh kode berikut menunjukkan cara melakukan scrubbing.

HRESULT SkipToPosition (MFTIME SeekTime, IMFMediaSession *pMediaSession)
{
    PROPVARIANT var;
    PropVariantInit(&var);

    IMFRateControl *pRateControl = NULL;

    // Get the rate control service.
    HRESULT hr = MFGetService(pMediaSession, MF_RATE_CONTROL_SERVICE, IID_PPV_ARGS(&pRateControl));

    // Set the playback rate to zero without thinning.
    if(SUCCEEDED(hr))
    {
        hr = pRateControl ->SetRate( FALSE, 0.0F); 
    }

    // Create the Media Session start position.
    if( SeekTime == PRESENTATION_CURRENT_POSITION )
    {
        var.vt = VT_EMPTY;
    }
    else
    {
        var.vt = VT_I8;
        var.hVal.QuadPart = SeekTime;
    }

    // Start the Media Session.
    if(SUCCEEDED(hr))
    {
        hr = pMediaSession->Start( NULL, &var);
    }

// Clean up.
    SafeRelease(&pRateControl);
    PropVariantClear(&var)
    return hr;
}

Operasi scrubbing yang berhasil menghasilkan peristiwa MESessionScrubSampleComplete setelah semua sink streaming diperbarui dengan bingkai baru dan operasi scrubbing berhasil diselesaikan. Menggosok file video menampilkan bingkai yang dicari, tetapi tidak menghasilkan output audio.

Aplikasi dapat melakukan langkah bingkai dengan mengatur laju pemutaran ke nol dan kemudian melewati PROPVARIANT yang diatur ke VT_EMPTY dalam panggilan ke IMFMediaSession::Start.

Sesi Media

Kontrol Laju