Comment définir le taux de lecture sur la session multimédia

Pour implémenter des fonctionnalités de lecture telles que l’avance rapide et le rembobinage, les applications peuvent avoir besoin de modifier le taux de lecture d’un flux multimédia. Media Foundation fournit le service de contrôle de débit que les applications doivent utiliser pour définir le taux de lecture dynamiquement.

Avant de définir le taux de lecture, une application doit case activée si le débit est pris en charge par la source multimédia. Pour plus d’informations sur l’interrogation des tarifs pris en charge, consultez Guide pratique pour déterminer les taux pris en charge.

Pour plus d’informations sur les taux de lecture, consultez À propos du contrôle de débit.

Pour définir le taux de lecture

  1. Appelez MFGetService pour obtenir l’objet de contrôle de débit à partir de la session multimédia.

    Les applications appelant MFGetService doivent s’assurer des éléments suivants :

    • Le paramètre punkObject contient un pointeur d’interface IMFMediaSession initialisé.
    • L’objet de contrôle de débit reçu dans le paramètre ppvObject est libéré pour éviter les fuites de mémoire.
  2. Appelez la méthode IMFRateControl::SetRate pour définir le taux de lecture. Une fois SetRate terminé de manière asynchrone, l’application reçoit l’événement MESessionRateChanged .

Exemple

Le code suivant montre comment définir le taux de lecture en appelant la méthode 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;
}

L’application doit être arrêtée ou suspendue avant de pouvoir passer d’un taux négatif ou nul à un taux positif. Pour plus d’informations sur ces états, consultez Guide pratique pour contrôler les états de présentation.

Session multimédia

Contrôle de débit

Recherche, avance rapide et lecture inversée