Настройка скорости воспроизведения в сеансе мультимедиа

Для реализации функций воспроизведения, таких как перемотка вперед и перемотка, приложениям может потребоваться изменить скорость воспроизведения для потока мультимедиа. Media Foundation предоставляет службу управления скоростью, которую приложения должны использовать для динамической настройки скорости воспроизведения.

Перед настройкой скорости воспроизведения приложение должно проверка, поддерживается ли скорость источником мультимедиа. Сведения о запросах на поддерживаемые тарифы см. в статье How to Determine Supported Rates (Практическое руководство. Определение поддерживаемых ставок).

Сведения о скорости воспроизведения см. в разделе Сведения об управлении скоростью.

Настройка скорости воспроизведения

  1. Вызовите MFGetService , чтобы получить объект управления скоростью из сеанса мультимедиа.

    Приложения, вызывающие MFGetService, должны обеспечить следующее:

    • Параметр punkObject содержит указатель инициализированного интерфейса IMFMediaSession .
    • Объект управления скоростью, полученный в параметре ppvObject , освобождается, чтобы избежать утечек памяти.
  2. Вызовите метод IMFRateControl::SetRate, чтобы задать скорость воспроизведения. После асинхронного завершения SetRate приложение получает событие MESessionRateChanged .

Пример

В следующем коде показано, как задать частоту воспроизведения путем вызова метода 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;
}

Приложение должно быть остановлено или приостановлено, прежде чем оно сможет перейти с отрицательной или нулевой ставки на положительную. Сведения об этих состояниях см . в разделе Управление состояниями представления.

Сеанс мультимедиа

Управление скоростью

Поиск, перемыка вперед и обратное воспроизведение