Come impostare la frequenza di riproduzione nella sessione multimediale

Per implementare funzionalità di riproduzione, ad esempio avanzamento rapido e riavvolgimento, 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 per le tariffe supportate, vedere Come determinare le tariffe supportate.

Per informazioni sulle frequenze di riproduzione, vedere Informazioni sul controllo frequenza.

Per impostare la frequenza di riproduzione

  1. Chiamare MFGetService per ottenere l'oggetto controllo frequenza dalla sessione multimediale.

    Le applicazioni che chiamano MFGetService devono verificare quanto segue:

    • Il parametro punkObject contiene un puntatore all'interfaccia IMFMediaSession inizializzato.
    • L'oggetto controllo frequenza ricevuto nel parametro ppvObject viene rilasciato per evitare perdite di memoria.
  2. Chiamare il metodo IMFRateControl::SetRate per impostare la frequenza di riproduzione. Al termine di SetRate in modo asincrono, l'applicazione riceve l'evento MESessionRateChanged .

Esempio

Il codice seguente illustra come impostare la frequenza di riproduzione chiamando il metodo 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;
}

L'applicazione deve essere arrestata o sospesa prima di poter eseguire una transizione da una velocità negativa o zero a una velocità positiva. Per informazioni su questi stati, vedere How to Control Presentation States.For information about these states, see How to Control Presentation States.

Sessione multimediale

Controllo frequenza

Ricerca, avanzamento veloce e gioco inverso