Поделиться через


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

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

Прежде чем задать частоту воспроизведения, приложение должно проверить, поддерживается ли скорость источником мультимедиа. Сведения о запросе поддерживаемых ставок см. в разделе Определение поддерживаемых ставок.

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

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

  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;
}

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

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

Контроль скорости

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