Закрепление подключений

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

Фильтры подключаются по контактам через интерфейс IPin . Выходные контакты подключаются к контактам ввода. Каждое закрепление соединения имеет тип носителя, описываемый структурой AM_MEDIA_TYPE .

Приложение подключает фильтры путем вызова методов в диспетчере фильтров Graph, а не путем вызова методов в самих фильтрах или закреплениях. Приложение может напрямую указать фильтры для подключения, вызвав метод IFilterGraph::ConnectDirect или IGraphBuilder::Connect ; или может подключать фильтры косвенно с помощью метода построения графа, например IGraphBuilder::RenderFile.

Для успешного подключения оба фильтра должны находиться в графе фильтров. Приложение может добавить фильтр к графу, вызвав метод IFilterGraph::AddFilter . Диспетчер графов фильтров также может добавлять фильтры к графу. При добавлении фильтра диспетчер графов фильтров вызывает метод фильтра IBaseFilter::JoinFilterGraph для уведомления фильтра.

Ниже приведен общий план процесса подключения.

  1. Диспетчер графа фильтров вызывает метод IPin::Connect в выходном контакте, передав указатель на входной контакт.
  2. Если выходной контакт принимает подключение, он вызывает IPin::ReceiveConnection на входном контакте.
  3. Если входной контакт также принимает подключение, попытка подключения завершается успешно, и контакты подключаются.

Некоторые контакты можно отключить и повторно подключить, пока фильтр активен. Этот тип повторного подключения называется динамическим повторным подключением. Дополнительные сведения см. в разделе Dynamic Graph Building. Однако большинство фильтров не поддерживают динамическое повторное подключение.

Фильтры обычно подключаются в нисходящем порядке. Другими словами, входные контакты фильтра подключаются перед выводными контактами. Фильтр всегда должен поддерживать такой порядок подключения. Некоторые фильтры также поддерживают подключения в обратном порядке — сначала выводить контакты, а затем входные контакты. Например, можно подключить выход фильтра MUX к фильтру записи файлов, прежде чем подключать входные контакты фильтра MUX.

При вызове метода Connect или ReceiveConnection контакт должен убедиться, что он поддерживает подключение. Сведения зависят от конкретного фильтра. Ниже перечислены наиболее распространенные задачи.

  • Убедитесь, что тип носителя является допустимым
  • Согласование распределителя
  • Запросите другой контакт для получения необходимых интерфейсов.