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


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

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

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

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

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

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

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

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