Come determinare le tariffe supportate

Prima di modificare la frequenza di riproduzione, un'applicazione deve verificare se la frequenza di riproduzione è supportata dagli oggetti nella pipeline. L'interfaccia FMRateSupport fornisce metodi per ottenere i tassi massimi in avanti e inverso, il tasso supportato più vicino a una frequenza richiesta e la velocità più lenta. Ognuna di queste query di frequenza può specificare la direzione di riproduzione e se usare il thinning. La frequenza di riproduzione esatta viene eseguita tramite l'interfaccia FMRateControl .

Per informazioni sulla modifica delle tariffe di riproduzione, vedere Come impostare la frequenza di riproduzione nella sessione multimediale.

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

Per determinare la frequenza di riproduzione corrente

  1. Ottenere il servizio di controllo della frequenza dalla sessione multimediale.

    IMFRateControl *pRateControl = NULL;
    hr = MFGetService(
           pMediaSession, 
           MF_RATE_CONTROL_SERVICE,
           IID_IMFRateControl, 
           (void**) &pRateControl );
    

    Passare un puntatore dell'interfaccia FMMediaSession inizializzato nel parametro punkObject di MFGetService.

    L'applicazione deve eseguire una query per il servizio di controllo della frequenza tramite la sessione multimediale. Internamente, la sessione multimediale esegue una query sugli oggetti nella topologia.

  2. Chiamare il metodo IMFRateControl::GetRate per ottenere la frequenza di riproduzione corrente.

    hr = pRateControl->GetRate(&bThin, &rate);
    

    Il parametro pfThin di GetRate riceve un valore BOOL che indica se il flusso èattualmenteo. L'applicazione deve passare NULL se non vuole eseguire query sul supporto di thinning per il flusso. Il parametro pflRate riceve la frequenza di riproduzione corrente.

Per determinare la frequenza più vicina supportata

  1. Ottenere il servizio di supporto della frequenza dalla sessione multimediale.

    IMFRateSupport *pRateSupport = NULL;
    hr = MFGetService(
           pMediaSession, 
           MF_RATE_CONTROL_SERVICE,
           IID_IMFRateSupport, 
           (void**) &pRateSupport );
    

    Passare un puntatore dell'interfaccia FMMediaSession inizializzato nel parametro punkObject di MFGetService.

  2. Chiamare il metodo IMFRateSupport::IsRateSupported per recuperare la frequenza supportata più vicina a una frequenza di riproduzione richiesta.

    float rateRequested = 4.0;
    float actualRate = 0;
    hr = pRateSupport->IsRateSupported(
           TRUE, 
           rateRequested, 
           &actualRate );
    

    Nell'esempio viene eseguita una query se è supportata una frequenza di riproduzione pari a 4.0 con il thinning. Questo valore è indicato passando TRUE nel parametro fThin di IsRateSupported. Se questa frequenza è supportata, actualRate contiene la frequenza di riproduzione pari a 4,0 e la chiamata ha esito positivo con un valore restituito di S_OK. Se la frequenza di riproduzione esatta non è supportata, la frequenza più vicina supportata viene ricevuta in actualRate. Se la frequenza non è supportata e non è disponibile la frequenza di riproduzione più vicina, la chiamata restituisce un codice di errore appropriato.

    Questi valori possono variare a seconda dei componenti della pipeline caricati. Pertanto, è necessario eseguire di nuovo una query sui valori ogni volta che si carica un nuovo topololgy.

    Se la frequenza di riproduzione desiderata non è supportata, un'opzione consiste nell'eseguire una query su ogni oggetto nella topologia singolarmente, per scoprire se un determinato componente non supporta la frequenza. Potrebbe essere possibile ricompilare la topologia senza questo componente e quindi riprodurre alla velocità desiderata. Ad esempio, se ogni componente, ad eccezione del renderer audio supporta una determinata frequenza, è possibile ricompilare la topologia senza il ramo audio e riprodurre alla velocità desiderata senza audio.

Per determinare la velocità supportata più lenta

  1. Ottenere il servizio di supporto della frequenza dalla sessione multimediale.

    IMFRateSupport *pRateSupport = NULL;
    hr = MFGetService(
           pMediaSession, 
           MF_RATE_CONTROL_SERVICE,
           IID_IMFRateSupport, 
           (void**) &pRateSupport );
    

    Passare un puntatore dell'interfaccia FMMediaSession inizializzato nel parametro punkObject di MFGetService.

  2. Chiamare il metodo IMFRateSupport::GetSlowestRate per recuperare la frequenza più lenta supportata.

    float slowestRate = 0;
    hr = pRateSupport->GetSlowestRate(
           MFRATE_REVERSE, 
           TRUE, 
           &slowestRate);
    

    L'esempio di query per la frequenza di riproduzione inversa più lenta con sfoltimento. La frequenza di associazione inferiore viene ricevuta nel parametro GetSlowestRate più lento.

    Se la riproduzione inversa o il thinning non è supportata, la chiamata restituisce un codice di errore appropriato.

Sessione multimediale

Controllo frequenza

Ricerca, avanti veloce e gioco inverso