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


Модель извлечения

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

В интерфейсе IMemInputPin фильтр вышестоящего потока определяет, какие данные нужно отправлять, и отправляет данные в подчиненный фильтр. Для некоторых фильтров более подходящим является модель извлечения. Здесь подчиненный фильтр запрашивает данные из вышестоящего фильтра. Примеры по-прежнему перемещают вниз, от выходного пина до входного пин-кода, но нижестоящий фильтр инициирует поток данных. Этот тип подключения использует интерфейс IAsyncReader.

Обычное использование для модели извлечения находится в воспроизведении файлов. Например, в графе воспроизведения AVI фильтр асинхронного источника файлов выполняет универсальные операции чтения файлов и предоставляет данные в виде потока байтов без сведений о формате. Фильтр AVI Splitter считывает заголовки AVI и анализирует поток в видео и звуковые образцы. Разделитель AVI может определить, какие данные требуются лучше, чем фильтр источника файлов Async, поэтому он использует IAsyncReader вместо IMemInputPin.

Чтобы запросить данные из выходного пин-кода, входной пин-код вызывает один из следующих методов:

Первый метод является асинхронным для поддержки нескольких перекрывающихся операций чтения. Другие синхронны.

В теории любой фильтр может поддерживать IAsyncReader, но на практике он предназначен для исходных фильтров, которые подключаются к фильтрам синтаксического анализа. Средство синтаксического анализа действует очень как исходный фильтр в модели принудительной отправки. При приостановке создается поток потоковой передачи, который извлекает данные из подключения IAsyncReader и отправляет его вниз. Выходные контакты используют IMemInputPin, а остальная часть графа использует стандартную модель принудительной отправки.

поток данных в графе фильтров