Bagikan melalui


Cara Mengatur Laju Pemutaran pada Sesi Media

Untuk menerapkan fungsi pemutaran seperti maju dan mundur cepat, aplikasi mungkin perlu mengubah laju pemutaran untuk aliran media. Media Foundation menyediakan layanan kontrol tarif yang harus digunakan aplikasi untuk mengatur laju pemutaran secara dinamis.

Sebelum mengatur laju pemutaran, aplikasi harus memeriksa apakah laju didukung oleh sumber media. Untuk informasi tentang kueri untuk tarif yang didukung, lihat Cara Menentukan Tarif yang Didukung.

Untuk informasi tentang laju pemutaran, lihat Tentang Kontrol Laju.

Untuk mengatur laju pemutaran

  1. Panggil MFGetService untuk mendapatkan objek kontrol tarif dari Sesi Media.

    Aplikasi yang memanggil MFGetService harus memastikan hal berikut:

    • Parameter punkObject berisi penunjuk antarmuka IMFMediaSession yang diinisialisasi.
    • Objek kontrol laju yang diterima dalam parameter ppvObject dirilis untuk menghindari kebocoran memori.
  2. Panggil metode IMFRateControl::SetRate untuk mengatur laju pemutaran. Setelah SetRate selesai secara asinkron, aplikasi menerima peristiwa MESessionRateChanged .

Contoh

Kode berikut menunjukkan cara mengatur laju pemutaran dengan memanggil metode SetRate .

///////////////////////////////////////////////////////////////////////
//  Name: SetPlaybackRate
//  Description: 
//      Gets the rate control service from Media Session.
//      Sets the playback rate to the specified rate.
//  Parameter:
//      pMediaSession: [in] Media session object to query.
//      rateRequested: [in] Playback rate to set.
//      bThin: [in] Indicates whether to use thinning.
///////////////////////////////////////////////////////////////////////

HRESULT SetPlaybackRate(
          IMFMediaSession *pMediaSession, 
          float rateRequested, 
          BOOL bThin)
{
    HRESULT hr = S_OK;
    IMFRateControl *pRateControl = NULL;

    // Get the rate control object from the Media Session.
    hr = MFGetService( 
           pMediaSession, 
           MF_RATE_CONTROL_SERVICE, 
           IID_IMFRateControl, 
           (void**) &pRateControl ); 

    // Set the playback rate.
    if(SUCCEEDED(hr))
    {
        hr = pRateControl ->SetRate( bThin, rateRequested); 
    }

    // Clean up.
    SAFE_RELEASE(pRateControl );

    return hr;
}

Aplikasi harus dihentikan atau dijeda sebelum dapat melakukan transisi dari tingkat negatif atau nol ke tingkat positif. Untuk informasi tentang status ini, lihat Cara Mengontrol Status Presentasi.

Sesi Media

Kontrol Laju

Mencari, Maju Cepat, dan Putar Balik