Выполнение очистки
Очистка выполняется для мгновенного поиска определенных точек в файле путем взаимодействия с визуальным представлением времени, например полосы прокрутки. В Media Foundation очистка означает поиск файла и получение одного обновленного кадра.
Сведения о очистке см. в разделе "О контроле скорости".
Выполнение очистки
Вызовите MFGetService , чтобы получить интерфейс IMFRateControl из сеанса мультимедиа.
Примечание
Не получайте интерфейс IMFRateControl из источника мультимедиа. Всегда получает интерфейс из сеанса мультимедиа.
Вызовите IMFRateControl::SetRate, чтобы задать скорость воспроизведения равным нулю. Дополнительные сведения о вызове этого метода см. в разделе "Настройка скорости воспроизведения" в сеансе мультимедиа.
Создайте позицию поиска в PROPVARIANT , указав время презентации для поиска в типе MFTIME .
Вызов IMFMediaSession::Начните с позиции поиска, чтобы начать воспроизведение.
После завершения операции очистки сеанс мультимедиа отправляет событие 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.
Связанные темы