Freigeben über


Ausführen von Scrubbing

Das Schrubben wird durchgeführt, um sofort bestimmte Punkte in einer Datei zu suchen, indem sie mit einer visuellen Darstellung der Zeit interagieren, z. B. einer Bildlaufleiste. In Media Foundation bedeutet "Scrubbing", nach einer Datei zu suchen und einen aktualisierten Frame zu erhalten.

Informationen zum Schrubben finden Sie unter Informationen zur Ratensteuerung.

So führen Sie Das Schrubben aus

  1. Rufen Sie MFGetService auf, um die IMFRateControl-Schnittstelle aus der Mediensitzung abzurufen.

    Hinweis

    Rufen Sie die IMFRateControl-Schnittstelle nicht von der Medienquelle ab. Rufen Sie die Schnittstelle immer aus der Mediensitzung ab.

     

  2. Rufen Sie IMFRateControl::SetRate auf, um die Wiedergaberate auf 0 festzulegen. Weitere Informationen zum Aufrufen dieser Methode finden Sie unter Festlegen der Wiedergaberate für die Mediensitzung.

  3. Erstellen Sie eine Suchposition in einem PROPVARIANT , indem Sie die Präsentationszeit angeben, die in einem MFTIME-Typ gesucht werden soll.

  4. Rufen Sie IMFMediaSession::Start mit der Suchposition auf, um die Wiedergabe zu starten.

  5. Wenn der Scrubvorgang abgeschlossen ist, sendet die Mediensitzung ein MESessionScrubSampleComplete-Ereignis . Warten Sie auf dieses Ereignis, bevor Sie den Start für einen anderen Bereinigungsvorgang erneut aufrufen.

Beispiel

Im folgenden Codebeispiel wird gezeigt, wie ein Scrubbing ausgeführt wird.

HRESULT SkipToPosition (MFTIME SeekTime, IMFMediaSession *pMediaSession)
{
    PROPVARIANT var;
    PropVariantInit(&var);

    IMFRateControl *pRateControl = NULL;

    // Get the rate control service.
    HRESULT hr = MFGetService(pMediaSession, MF_RATE_CONTROL_SERVICE, IID_PPV_ARGS(&pRateControl));

    // Set the playback rate to zero without thinning.
    if(SUCCEEDED(hr))
    {
        hr = pRateControl ->SetRate( FALSE, 0.0F); 
    }

    // Create the Media Session start position.
    if( SeekTime == PRESENTATION_CURRENT_POSITION )
    {
        var.vt = VT_EMPTY;
    }
    else
    {
        var.vt = VT_I8;
        var.hVal.QuadPart = SeekTime;
    }

    // Start the Media Session.
    if(SUCCEEDED(hr))
    {
        hr = pMediaSession->Start( NULL, &var);
    }

// Clean up.
    SafeRelease(&pRateControl);
    PropVariantClear(&var)
    return hr;
}

Ein erfolgreicher Scrubbingvorgang generiert das MESessionScrubSampleComplete-Ereignis , nachdem alle Streamsenken mit dem neuen Frame aktualisiert wurden und der Schrubbungsvorgang erfolgreich abgeschlossen wurde. Beim Bereinigen einer Videodatei wird der gesuchte Frame angezeigt, aber keine Audioausgabe generiert.

Die Anwendung kann frame stepping ausführen, indem sie die Wiedergaberate auf 0 festgelegt und dann eine PROPVARIANT-Instanz übergeben, die im Aufruf von IMFMediaSession::Start auf VT_EMPTY festgelegt ist.

Mediensitzung

Ratensteuerung