Cómo establecer la velocidad de reproducción en la sesión multimedia

Para implementar la funcionalidad de reproducción, como el avance rápido y el rebobinado, es posible que las aplicaciones necesiten cambiar la velocidad de reproducción de una secuencia multimedia. Media Foundation proporciona el servicio de control de velocidad que las aplicaciones deben usar para establecer dinámicamente la velocidad de reproducción.

Antes de establecer la velocidad de reproducción, una aplicación debe comprobar si la velocidad es compatible con el origen multimedia. Para obtener información sobre cómo consultar las tasas admitidas, consulte Cómo determinar las tasas admitidas.

Para obtener información sobre las velocidades de reproducción, vea Acerca del control de velocidad.

Para establecer la velocidad de reproducción

  1. Llame a MFGetService para obtener el objeto de control de velocidad de la sesión multimedia.

    Las aplicaciones que llaman a MFGetService deben asegurarse de lo siguiente:

    • El parámetro punkObject contiene un puntero de interfaz IMFMediaSession inicializado.
    • El objeto de control de velocidad recibido en el parámetro ppvObject se libera para evitar pérdidas de memoria.
  2. Llame al método IMFRateControl::SetRate para establecer la velocidad de reproducción. Una vez que SetRate se completa de forma asincrónica, la aplicación recibe el evento MESessionRateChanged .

Ejemplo

En el código siguiente se muestra cómo establecer la velocidad de reproducción llamando al 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;
}

La aplicación se debe detener o pausar para poder realizar una transición de una tasa negativa o cero a una tasa positiva. Para obtener información sobre estos estados, vea Cómo controlar estados de presentación.

Sesión multimedia

Control de frecuencia

Búsqueda, Inserción rápida y reproducción inversa