Поделиться через


Ищущий

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

Фильтры поддерживают поиск по интерфейсу IMediaSeeking. Приложение запрашивает менеджер графа фильтра для IMediaSeeking и использует его для выполнения команд поиска. Менеджер графов фильтров передает каждую команду поиска всем воспроизводящим фильтрам в графе. Каждый рендерер передает команду вверх по потоку, через выходные контакты вышестоящих фильтров, пока не достигнет фильтра, который может выполнить поиск. Как правило, исходный фильтр или фильтр синтаксического анализа, например AVI Splitter, выполняет операцию поиска.

Когда фильтр выполняет операцию поиска, он очищает все ожидающие данные. Результатом является минимизация задержки команд поиска, так как существующие данные сбрасываются с графа. После команды поиска время потока сбрасывается до нуля.

На следующей схеме показана последовательность событий.

последовательность событий

Если фильтр синтаксического анализа имеет несколько выходных пинов, обычно он назначает один для принятия команд поиска. Другие контакты отклоняют или игнорируют любые команды поиска, которые они получают. Таким образом, средство синтаксического анализа сохраняет синхронизацию всех потоков. Однако все выходные контакты должны реализовать IMediaSeeking::GetCapabilities и IMediaSeeking::CheckCapabilities, чтобы вернуть возможности поиска фильтра. Это гарантирует, что диспетчер графов фильтров возвращает правильное значение для приложения.

Интерфейс IMediaPosition не рекомендуется использовать для фильтров. Клиенты служб автоматизации по-прежнему должны использовать этот интерфейс в диспетчере графа фильтров, так как IMediaSeeking несовместим с автоматизацией, но диспетчер графа фильтров преобразует все вызовы IMediaPosition в вызовы IMediaSeeking.

Очистка

Время и часы в DirectShow