Come impostare la frequenza di riproduzione nella sessione multimediale
Per implementare funzionalità di riproduzione, ad esempio fast forward e rewind, le applicazioni potrebbero dover modificare la frequenza di riproduzione per un flusso multimediale. Media Foundation fornisce il servizio di controllo della frequenza che le applicazioni devono usare per impostare la frequenza di riproduzione in modo dinamico.
Prima di impostare la frequenza di riproduzione, un'applicazione deve verificare se la frequenza è supportata dall'origine multimediale. Per informazioni sull'esecuzione di query sulle tariffe supportate, vedere Come determinare le tariffe supportate.
Per informazioni sulle frequenze di riproduzione, vedere Informazioni sul controllo della frequenza.
Per impostare la frequenza di riproduzione
Chiamare MFGetService per ottenere l'oggetto controllo frequenza dalla sessione multimediale.
Le applicazioni che chiamano MFGetService devono garantire quanto segue:
- Il parametro punkObject contiene un puntatore a interfaccia inizializzato IMFMediaSession.
- L'oggetto controllo frequenza ricevuto nel parametro ppvObject viene rilasciato per evitare perdite di memoria.
Chiamare il metodo IMFRateControl::SetRate per impostare la frequenza di riproduzione. Dopo che SetRate si completa in modo asincrono, l'applicazione riceve l'evento MESessionRateChanged.
Esempio
Il codice seguente illustra come impostare la frequenza di riproduzione chiamando il metodoSetRate.
///////////////////////////////////////////////////////////////////////
// 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'applicazione deve essere arrestata o sospesa prima di poter eseguire una transizione da una velocità negativa o zero a una frequenza positiva. Per informazioni su questi stati, vedere Come controllare gli stati di presentazione.
Argomenti correlati