Cara Menentukan Tarif yang Didukung

Sebelum mengubah laju pemutaran, aplikasi harus memeriksa apakah laju pemutaran didukung oleh objek dalam alur. Antarmuka IMFRateSupport menyediakan metode untuk mendapatkan kecepatan maju dan terbalik maksimum, tingkat yang didukung terdekat dengan tingkat yang diminta, dan laju paling lambat. Masing-masing kueri laju ini dapat menentukan arah pemutaran dan apakah akan menggunakan penipisan. Laju pemutaran yang tepat dikueri dengan menggunakan antarmuka IMFRateControl .

Untuk informasi tentang mengubah laju pemutaran, lihat Cara Mengatur Laju Pemutaran pada Sesi Media.

Untuk informasi umum tentang laju pemutaran, lihat Tentang Kontrol Tarif.

Untuk menentukan laju pemutaran saat ini

  1. Dapatkan layanan kontrol laju dari Sesi Media.

    IMFRateControl *pRateControl = NULL;
    hr = MFGetService(
           pMediaSession, 
           MF_RATE_CONTROL_SERVICE,
           IID_IMFRateControl, 
           (void**) &pRateControl );
    

    Berikan penunjuk antarmuka IMFMediaSession yang diinisialisasi dalam parameter punkObjectMFGetService.

    Aplikasi harus meminta layanan kontrol tarif melalui Sesi Media. Secara internal, Sesi Media meminta objek dalam topologi.

  2. Panggil metode IMFRateControl::GetRate untuk mendapatkan laju pemutaran saat ini.

    hr = pRateControl->GetRate(&bThin, &rate);
    

    Parameter pfThingetRate menerima nilai BOOL yang menunjukkan apakah aliran saat ini sedang ditipiskan. Aplikasi harus melewati NULL jika tidak ingin meminta dukungan yang menipis untuk aliran. Parameter pflRate menerima laju pemutaran saat ini.

Untuk menentukan tingkat yang didukung terdekat

  1. Dapatkan layanan dukungan tarif dari Sesi Media.

    IMFRateSupport *pRateSupport = NULL;
    hr = MFGetService(
           pMediaSession, 
           MF_RATE_CONTROL_SERVICE,
           IID_IMFRateSupport, 
           (void**) &pRateSupport );
    

    Berikan penunjuk antarmuka IMFMediaSession yang diinisialisasi dalam parameter punkObjectMFGetService.

  2. Panggil metode IMFRateSupport::IsRateSupported untuk mengambil laju yang didukung terdekat dengan laju pemutaran yang diminta.

    float rateRequested = 4.0;
    float actualRate = 0;
    hr = pRateSupport->IsRateSupported(
           TRUE, 
           rateRequested, 
           &actualRate );
    

    Contoh kueri apakah laju pemutaran 4.0 didukung dengan penipisan. Ini ditunjukkan dengan meneruskan TRUE dalam parameter fThinIsRateSupported. Jika laju ini didukung, actualRate berisi laju pemutaran 4.0, dan panggilan berhasil dengan nilai pengembalian S_OK. Jika laju pemutaran yang tepat tidak didukung, laju terdekat yang didukung diterima di actualRate. Jika tarif tidak didukung dan tidak ada laju pemutaran terdekat yang tersedia, panggilan mengembalikan kode kesalahan yang sesuai.

    Nilai-nilai ini dapat berubah tergantung pada komponen alur mana yang dimuat. Oleh karena itu, Anda harus mengkueri nilai lagi setiap kali Anda memuat topololgi baru.

    Jika laju pemutaran yang diinginkan tidak didukung, salah satu opsinya adalah mengkueri setiap objek dalam topologi satu per satu, untuk mengetahui apakah komponen tertentu tidak mendukung laju. Anda mungkin dapat membangun kembali topologi tanpa komponen ini dan kemudian bermain pada tingkat yang diinginkan. Misalnya, jika setiap komponen kecuali perender audio mendukung laju tertentu, Anda dapat membangun kembali topologi tanpa cabang audio dan memutar pada laju yang diinginkan tanpa audio.

Untuk menentukan tingkat yang didukung paling lambat

  1. Dapatkan layanan dukungan tarif dari Sesi Media.

    IMFRateSupport *pRateSupport = NULL;
    hr = MFGetService(
           pMediaSession, 
           MF_RATE_CONTROL_SERVICE,
           IID_IMFRateSupport, 
           (void**) &pRateSupport );
    

    Berikan penunjuk antarmuka IMFMediaSession yang diinisialisasi dalam parameter punkObjectMFGetService.

  2. Panggil metode IMFRateSupport::GetSlowestRate untuk mengambil laju yang didukung paling lambat.

    float slowestRate = 0;
    hr = pRateSupport->GetSlowestRate(
           MFRATE_REVERSE, 
           TRUE, 
           &slowestRate);
    

    Contoh kueri untuk laju pemutaran terbalik paling lambat dengan penipisan. Tingkat batas yang lebih rendah diterima dalam parameter SlowestRate dari GetSlowestRate.

    Jika pemutaran balik atau penipisan tidak didukung, panggilan mengembalikan kode kesalahan yang sesuai.

Sesi Media

Kontrol Laju

Mencari, Maju Cepat, dan Putar Balik