Como definir a taxa de reprodução na sessão de mídia

Para implementar a funcionalidade de reprodução, como avanço rápido e retrocesso, os aplicativos podem precisar alterar a taxa de reprodução de um fluxo de mídia. O Media Foundation fornece o serviço de controle de taxa que os aplicativos devem usar para definir a taxa de reprodução dinamicamente.

Antes de definir a taxa de reprodução, um aplicativo deve marcar se a taxa é compatível com a fonte de mídia. Para obter informações sobre como consultar taxas com suporte, consulte How to Determine Supported Rates(Como determinar taxas com suporte).

Para obter informações sobre taxas de reprodução, consulte Sobre o controle de taxa.

Para definir a taxa de reprodução

  1. Chame MFGetService para obter o objeto de controle de taxa da Sessão de Mídia.

    Os aplicativos que chamam MFGetService devem garantir o seguinte:

    • O parâmetro punkObject contém um ponteiro de interface IMFMediaSession inicializado.
    • O objeto de controle de taxa recebido no parâmetro ppvObject é liberado para evitar vazamentos de memória.
  2. Chame o método IMFRateControl::SetRate para definir a taxa de reprodução. Depois que SetRate for concluído de forma assíncrona, o aplicativo receberá o evento MESessionRateChanged .

Exemplo

O código a seguir mostra como definir a taxa de reprodução chamando o método 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;
}

O aplicativo deve ser interrompido ou pausado antes de fazer uma transição de uma taxa negativa ou zero para uma taxa positiva. Para obter informações sobre esses estados, confira Como controlar os estados de apresentação.

Sessão de Mídia

Controle de taxa

Busca, Avanço Rápido e Jogo Inverso