Bagikan melalui


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 laju yang diminta, dan laju terlambat. 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 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 punkObject MFGetService.

    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 pfThin getRate 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 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 punkObject MFGetService.

  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 fThin IsRateSupported. 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 dalam 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 topologi 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 punkObject MFGetService.

  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 terbalik atau penipisan tidak didukung, panggilan mengembalikan kode kesalahan yang sesuai.

Sesi Media

Kontrol Laju

Mencari, Maju Cepat, dan Putar Terbalik