Транспорты

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

Для перемещения данных мультимедиа через граф фильтра фильтр DirectShow должен поддерживать один из нескольких возможных протоколов. Эти протоколы называются транспортами. При подключении двух фильтров они должны поддерживать один и тот же транспорт; в противном случае они не смогут обмениваться данными мультимедиа. Как правило, для транспорта требуется, чтобы один из контактов поддерживал определенный интерфейс. При подключении фильтров один закрепления запрашивает интерфейс у другого.

Большинство фильтров DirectShow хранят данные мультимедиа в main памяти и доставляют их другим фильтрам через закрепленные подключения. Этот тип транспорта называется локальным транспортом памяти. Хотя локальный транспорт памяти является наиболее распространенным транспортом в DirectShow, его используют не все фильтры. Например, некоторые фильтры отправляют данные мультимедиа по аппаратному пути и используют контакты только для доставки сведений об управлении. Например, см. интерфейс IOverlay .

DirectShow определяет два механизма для переноса локальной памяти: модель отправки и модель извлечения. В модели отправки исходный фильтр создает данные и доставляет их следующему фильтру ниже. Этот фильтр пассивно получает данные, обрабатывает их и отправляет дальше вниз. В модели извлечения фильтр источника подключается к фильтру средства синтаксического анализа. Фильтр синтаксического анализа запрашивает данные из исходного фильтра. Исходный фильтр отвечает на запросы путем доставки данных. Модель push-уведомлений использует интерфейс IMemInputPin , а модель извлечения — интерфейс IAsyncReader .

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

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