Festlegen der Wiedergaberate für die Mediensitzung
Um Wiedergabefunktionen wie schnelles Vorwärts- und Zurücksenden zu implementieren, müssen Anwendungen möglicherweise die Wiedergaberate für einen Medienstream ändern. Media Foundation stellt den Rate Control-Dienst zur Verfügung, den die Anwendungen zum dynamischen Festlegen der Wiedergaberate verwenden müssen.
Vor dem Festlegen der Wiedergaberate sollte eine Anwendung überprüfen, ob die Rate von der Medienquelle unterstützt wird. Informationen zum Abfragen von unterstützten Raten finden Sie unter How to Determine Supported Rates.
Informationen zu Wiedergaberaten finden Sie unter Informationen zur Ratensteuerung.
So legen Sie die Wiedergaberate fest
Rufen Sie MFGetService auf, um das Rate Control-Objekt aus der Mediensitzung zu erhalten.
Anwendungen, die MFGetService aufrufen, müssen Folgendes sicherstellen:
- Der -Parameter des -Objekts enthält einen initialisierten INTERFACEMediaSession-Schnittstellenzeiger.
- Das im ppvObject-Parameter empfangene Rate Control-Objekt wird freigegeben, um Speicherverlusten zu vermeiden.
Rufen Sie die METHODE VERRATEControl::SetRate auf, um die Wiedergaberate zu festlegen. Nachdem SetRate asynchron abgeschlossen wurde, empfängt die Anwendung das MESessionRateChanged-Ereignis.
Beispiel
Der folgende Code zeigt, wie die Wiedergaberate durch Aufrufen der SetRate-Methode festgelegt wird.
///////////////////////////////////////////////////////////////////////
// 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 machen kann. Informationen zu diesen Zuzuständen finden Sie unter Steuern von Präsentationszuständen.