Ermitteln der unterstützten Raten

Vor dem Ändern der Wiedergaberate sollte eine Anwendung überprüfen, ob die Wiedergaberate von den Objekten in der Pipeline unterstützt wird. Die IMFRateSupport-Schnittstelle bietet Methoden zum Abrufen der maximalen Vorwärts- und Reverseraten, der unterstützten Rate, die am nächsten zu einer angeforderten Rate und die langsamste Rate ist. Jede dieser Häufigkeitsabfragen kann die Wiedergaberichtung und die Verwendung von Thinning angeben. Die genaue Wiedergaberate wird mithilfe der IMFRateControl-Schnittstelle abgefragt.

Informationen zum Ändern der Wiedergaberaten finden Sie unter Festlegen der Wiedergaberate für die Mediensitzung.

Allgemeine Informationen zu Wiedergaberaten finden Sie unter About Rate Control.

So ermitteln Sie die aktuelle Wiedergaberate

  1. Rufen Sie den Satzsteuerungsdienst aus der Mediensitzung ab.

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

    Übergeben Sie einen initialisierten IMFMediaSession-Schnittstellenzeiger im PunkObject-Parameter von MFGetService.

    Die Anwendung muss den Satzsteuerungsdienst über die Mediensitzung abfragen. Intern fragt die Mediensitzung die Objekte in der Topologie ab.

  2. Rufen Sie die IMFRateControl::GetRate-Methode auf, um die aktuelle Wiedergaberate abzurufen.

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

    Der pfThin-Parameter von GetRate empfängt einen BOOL-Wert , der angibt, ob der Datenstrom derzeit ausgedünnt wird. Die Anwendung muss NULL übergeben, wenn sie keine Unterstützung für die Verdünnung des Datenstroms abfragen möchte. Der PflRate-Parameter empfängt die aktuelle Wiedergaberate.

So ermitteln Sie die nächste unterstützte Rate

  1. Rufen Sie den Rate-Supportdienst aus der Mediensitzung ab.

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

    Übergeben Sie einen initialisierten IMFMediaSession-Schnittstellenzeiger im PunkObject-Parameter von MFGetService.

  2. Rufen Sie die IMFRateSupport::IsRateSupported-Methode auf, um die unterstützte Rate abzurufen, die einer angeforderten Wiedergaberate am nächsten ist.

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

    Das Beispiel fragt ab, ob eine Wiedergaberate von 4,0 mit Verdünnung unterstützt wird. Dies wird durch Übergeben von TRUE im fThin-Parameter von IsRateSupported angegeben. Wenn diese Rate unterstützt wird, enthält actualRate die Wiedergaberate von 4,0, und der Aufruf wird mit einem Rückgabewert von S_OK erfolgreich ausgeführt. Wenn die genaue Wiedergaberate nicht unterstützt wird, wird die nächste unterstützte Rate in actualRate empfangen. Wenn die Rate nicht unterstützt wird und keine verfügbare nächste Wiedergaberate verfügbar ist, gibt der Aufruf einen geeigneten Fehlercode zurück.

    Diese Werte können sich je nach geladenen Pipelinekomponenten ändern. Daher sollten Sie die Werte immer dann erneut abfragen, wenn Sie eine neue Topologie laden.

    Wenn die gewünschte Wiedergaberate nicht unterstützt wird, besteht eine Möglichkeit darin, jedes Objekt in der Topologie einzeln abzufragen, um herauszufinden, ob eine bestimmte Komponente die Rate nicht unterstützt. Möglicherweise können Sie die Topologie ohne diese Komponente neu erstellen und dann mit der gewünschten Rate wiedergeben. Wenn beispielsweise jede Komponente mit Ausnahme des Audiorenderers eine bestimmte Rate unterstützt, können Sie die Topologie ohne Audioverzweigung neu erstellen und mit der gewünschten Rate ohne Audio wiedergeben.

So ermitteln Sie die langsamste unterstützte Rate

  1. Rufen Sie den Rate-Supportdienst aus der Mediensitzung ab.

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

    Übergeben Sie einen initialisierten IMFMediaSession-Schnittstellenzeiger im PunkObject-Parameter von MFGetService.

  2. Rufen Sie die IMFRateSupport::GetSlowestRate-Methode auf, um die langsamste unterstützte Rate abzurufen.

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

    Das Beispiel fragt die langsamste Reversewiedergaberate mit Verdünnung ab. Die untere Begrenzungsrate wird im slowestRate-Parameter von GetSlowestRate empfangen.

    Wenn die Umgekehrte Wiedergabe oder Verdünnung nicht unterstützt wird, gibt der Aufruf einen geeigneten Fehlercode zurück.

Mediensitzung

Steuersatzsteuerung

Suchen, Vorlauf und Umgekehrtes Wiedergeben