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í
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.
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.
Související témata