Share via


So legen Sie die Wiedergaberate für die Mediensitzung fest

Um Wiedergabefunktionen wie schnelles Weiterleiten und Zurückspulen zu implementieren, müssen Anwendungen möglicherweise die Wiedergaberate für einen Mediendatenstrom ändern. Media Foundation stellt den Rate Control Service bereit, den die Anwendungen verwenden müssen, um die Wiedergaberate dynamisch festzulegen.

Bevor Sie die Wiedergaberate festlegen, sollte eine Anwendung überprüfen, ob die Rate von der Medienquelle unterstützt wird. Informationen zum Abfragen nach unterstützten Raten finden Sie unter "Ermitteln der unterstützten Raten".

Informationen zu Wiedergaberaten finden Sie unter About Rate Control.

So legen Sie die Wiedergaberate fest

  1. Rufen Sie MFGetService auf, um das Rate Control-Objekt aus der Mediensitzung abzurufen.

    Anwendungen, die MFGetService aufrufen, müssen Folgendes sicherstellen:

    • Der PunkObject-Parameter enthält einen initialisierten IMFMediaSession-Schnittstellenzeiger .
    • Das im ppvObject-Parameter empfangene Rate control-Objekt wird freigegeben, um Speicherlecks zu vermeiden.
  2. Rufen Sie die IMFRateControl::SetRate-Methode auf, um die Wiedergaberate festzulegen. Nachdem SetRate asynchron abgeschlossen wurde, empfängt die Anwendung das MESessionRateChanged-Ereignis .

Beispiel

Der folgende Code zeigt, wie Sie die Wiedergaberate durch Aufrufen der SetRate-Methode festlegen.

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

Die Anwendung muss beendet oder angehalten werden, bevor sie einen Übergang von einer negativen oder null rate zu einer positiven Rate vornehmen kann. Informationen zu diesen Zuständen finden Sie unter "Steuern von Präsentationszuständen".

Mediensitzung

Rate-Steuerelement

Suchen, Vorlauf und Umkehren der Wiedergabe