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


DirectShow Video Capture Filters

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

Фильтры отслеживания в DirectShow имеют некоторые функции, которые отличают их от других типов фильтров. Хотя построитель графов захвата скрывает многие детали, рекомендуется ознакомиться с этим разделом, чтобы получить общее представление о графах захвата DirectShow.

Закрепление категорий

Фильтр захвата часто имеет два или более выходных контактов, которые предоставляют один и тот же тип данных, например контакт предварительного просмотра и закрепление захвата. Поэтому типы носителей не являются хорошим способом различения контактов. Вместо этого контакты отличаются своей функциональностью, которая идентифицируется с помощью GUID, называемого категорией контактов.

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

Предварительный просмотр закрепления и фиксация контактов

Некоторые устройства захвата видео имеют отдельные выходные контакты для предварительного просмотра и захвата. Контакт предварительного просмотра используется для отрисовки видео на экране, а закрепление захвата — для записи видео в файл.

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

  • При предварительном просмотре закрепление удаляет кадры по мере необходимости для поддержания пропускной способности контакта захвата.
  • Каждый кадр из маркера захвата имеет метку времени с меткой времени потока, когда кадр был захвачен. Пин-код предварительного просмотра не содержит метки времени для предоставляемых примеров.

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

Категория контактов предварительного просмотра — PIN_CATEGORY_PREVIEW. Категория для контактов захвата PIN_CATEGORY_CAPTURE.

Закрепление видеопорта

Видеопорт — это аппаратное подключение между видеоустройством (например, аналоговым ТВ-тюнером) и видео карта. Видеопорт позволяет устройству отправлять видеоданные непосредственно в графические карта. Видео отображается на экране с помощью аппаратного наложения. Видеопорт может быть фактическим кабелем, который соединяет два устройства на разных картах; или это может быть жестко проводное подключение на том же карта.

Преимущество видеопорта заключается в том, что видео передается непосредственно в видеопамять без какой-либо работы ЦП. Однако видеопорты имеют некоторые недостатки:

  • Видеопорт всегда использует поверхность наложения во время захвата, независимо от того, хотите ли вы предварительно просмотреть видео.
  • Переключение между кадрами происходит автоматически, что затрудняет синхронизацию с другими операциями с видео.

Если устройство захвата использует видеопорт, фильтр захвата содержит закрепление видеопорта вместо предварительного просмотра. Категория контактов для портов видео — PIN_CATEGORY_VIDEOPORT.

Каждый фильтр захвата имеет по крайней мере один контакт захвата. Кроме того, он может иметь контакт предварительного просмотра или закрепления видеопорта, но никогда не оба. Фильтры могут иметь несколько контактов захвата и контактов предварительного просмотра, каждый из которых обеспечивает отдельный тип мультимедиа. Таким образом, в одном фильтре могут быть закрепление захвата видео, контакт предварительного просмотра видео, закрепление захвата звука и пин-код предварительного просмотра звука. (Однако нет ничего эквивалентного видеопорту для аудио.)

Вышестоящие фильтры WDM

Устройствам windows Driver Model (WDM) могут потребоваться некоторые дополнительные фильтры, вышестоящий из фильтра захвата. К этим фильтрам относятся следующие:

Хотя это отдельные фильтры в DirectShow, они обычно представляют одно и то же аппаратное устройство. Каждый фильтр управляет разными функциями устройства. Фильтры соединены с помощью контактов, но данные мультимедиа не перемещаются между контактами. Таким образом, контакты на этих фильтрах не подключаются путем установки типа носителя. Вместо этого они используют значения GUID, называемые средами. Средние идентификаторы GUID определяются уникальным образом для конкретного мини-накопителя устройства. Например, фильтр ТВ-тюнера и фильтр захвата видео для одного тв-карта будут поддерживать один и тот же носитель, что позволяет приложению правильно построить граф.

На практике, если вы используете ICaptureGraphBuilder2 для создания графов захвата, эти фильтры добавляются в граф автоматически. Более подробное обсуждение см. в разделе Фильтры драйверов классов WDM.

Сведения о захвате видео в DirectShow