Sdílet prostřednictvím


Nastavení rychlosti přehrávání v seanci médií

Aby bylo možné implementovat funkce přehrávání, jako je například rychlé převinutí vpřed a zpět, můžou aplikace potřebovat změnit rychlost přehrávání datového proudu médií. Media Foundation poskytuje službu řízení rychlosti, kterou musí aplikace používat k dynamickému nastavení rychlosti přehrávání.

Před nastavením rychlosti přehrávání by aplikace měla zkontrolovat, jestli je frekvence podporovaná zdrojem médií. Informace o dotazování na podporované sazby naleznete v tématu Jak určit podporované sazby.

Informace o rychlostech přehrávání naleznete v tématu O řízení rychlosti.

Nastavení rychlosti přehrávání

  1. Zavolejte MFGetService, abyste získali objekt řízení rychlosti z mediální relace.

    Aplikace volající MFGetService musí zajistit následující:

    • Parametr punkObject obsahuje inicializovaný ukazatel rozhraní MMFMediaSession.
    • Objekt řízení rychlosti přijatý v parametru ppvObject je uvolněn, aby se zabránilo únikům paměti.
  2. Zavolejte metodu IMFRateControl::SetRate pro nastavení rychlosti přehrávání. Po asynchronním dokončení SetRate obdrží aplikace událost MESessionRateChanged.

Příklad

Následující kód ukazuje, jak nastavit rychlost přehrávání voláním metody 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;
}

Aplikace musí být zastavena nebo pozastavena, aby bylo možné provést přechod ze záporné nebo nulové rychlosti na kladnou rychlost. Informace o těchto stavech naleznete v tématu Jak řídit prezentační stavy.

Mediální relace

řízení rychlosti

Vyhledávání, Přetáčení vpřed a Přehrávání pozpátku