Выполнение очистки

Очистка выполняется для мгновенного поиска определенных точек в файле путем взаимодействия с визуальным представлением времени, например полосы прокрутки. В Media Foundation очистка означает поиск файла и получение одного обновленного кадра.

Сведения о очистке см. в разделе "О контроле скорости".

Выполнение очистки

  1. Вызовите MFGetService , чтобы получить интерфейс IMFRateControl из сеанса мультимедиа.

    Примечание

    Не получайте интерфейс IMFRateControl из источника мультимедиа. Всегда получает интерфейс из сеанса мультимедиа.

     

  2. Вызовите IMFRateControl::SetRate, чтобы задать скорость воспроизведения равным нулю. Дополнительные сведения о вызове этого метода см. в разделе "Настройка скорости воспроизведения" в сеансе мультимедиа.

  3. Создайте позицию поиска в PROPVARIANT , указав время презентации для поиска в типе MFTIME .

  4. Вызов IMFMediaSession::Начните с позиции поиска, чтобы начать воспроизведение.

  5. После завершения операции очистки сеанс мультимедиа отправляет событие MESessionScrubSampleComplete . Дождитесь этого события, прежде чем снова вызвать start для другой операции очистки.

Пример

В следующем примере кода показано, как выполнять очистку.

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;
}

Успешная операция очистки создает событие MESessionScrubSampleComplete после обновления всех приемников потока новым кадром и успешно завершается операция очистки. При очистке видеофайла отображается кадр, к которому был выполнен поиск, но не создается звуковой выход.

Приложение может выполнить пошаговое выполнение кадров, установив скорость воспроизведения равным нулю, а затем передав proPVARIANT , для VT_EMPTY в вызове IMFMediaSession::Start.

Сеанс мультимедиа

Контроль скорости