Запросы для поиска возможностей

[Функция, связанная с этой страницей, DirectShow, является устаревшей функцией. Он был заменен MediaPlayer, IMFMediaEngineи захват аудио и видео в Media Foundation. Эти функции оптимизированы для Windows 10 и Windows 11. По возможности корпорация Майкрософт настоятельно рекомендует использовать в новом коде MediaPlayer, IMFMediaEngine и аудио-видеозахват в Media Foundation вместо DirectShow. Корпорация Майкрософт предлагает, что существующий код, использующий устаревшие API, будет перезаписан для использования новых API, если это возможно.]

Microsoft® DirectShow® поддерживает поиск через интерфейс IMediaSeeking. Диспетчер графов фильтров предоставляет этот интерфейс, но функции поиска всегда реализуются фильтрами в графе.

Некоторые данные нельзя искать. Например, вы не можете просматривать прямую трансляцию с камеры. Однако если поток доступен для поиска, существуют различные типы поиска, которые он может поддержать. К ним относятся:

  • Поиск произвольной позиции в потоке.
  • Получение продолжительности потока.
  • Получение текущей позиции в потоке.
  • Воспроизведение в обратном направлении.

Интерфейс IMediaSeeking определяет набор флагов, AM_SEEKING_SEEKING_CAPABILITIES, описывающих возможные возможности поиска. Чтобы получить возможности потока, вызовите метод IMediaSeeking::GetCapabilities. Метод возвращает побитовое сочетание флагов. Приложение может протестировать их с помощью оператора & (побитовая AND). Например, следующий код проверяет, может ли граф стремиться к произвольной позиции:

DWORD dwCap = 0;
HRESULT hr = pSeek->GetCapabilities(&dwCap);
if (AM_SEEKING_CanSeekAbsolute & dwCap)
{
    // Graph can seek to absolute positions.
}