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 balik maksimum, tingkat yang didukung terdekat dengan laju 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 Laju.

Untuk menentukan laju pemutaran saat ini

  1. Dapatkan layanan kontrol tarif 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 laju 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 penipisan untuk aliran. Parameter pflRate menerima laju pemutaran saat ini.

Untuk menentukan tarif terdekat yang didukung

  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 mengkueri apakah laju pemutaran 4.0 didukung dengan penipisan. Ini ditunjukkan dengan meneruskan TRUE dalam parameter fThinIsRateSupported. Jika tarif ini didukung, actualRate berisi tingkat pemutaran 4.0, dan panggilan berhasil dengan nilai pengembalian S_OK. Jika laju pemutaran yang tepat tidak didukung, tingkat terdekat yang didukung diterima di aktualRate. 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 laju 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 balik terlambat 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 Terbalik