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


Общие сведения о программировании приложений DirectShow

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

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

Фильтры и диаграммы фильтров

Стандартным блоком DirectShow является программный компонент, называемый фильтром. Фильтр — это программный компонент, выполняющий некоторые операции с мультимедийным потоком. Например, фильтры DirectShow могут

  • чтение файлов
  • Получение видео с устройства захвата видео
  • декодирование различных форматов потоков, таких как видео MPEG-1
  • передача данных в графические или звуковые карта

Фильтры получают входные данные и создают выходные данные. Например, если фильтр декодирует видео MPEG-1, входные данные — это поток в кодировке MPEG, а выходные данные — ряд несжатых видеокадров.

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

фильтрация графа для воспроизведения AVI-файла

Фильтр "Источник файла" считывает AVI-файл с жесткого диска. Фильтр разделителя AVI анализирует файл на два потока: сжатый видеопоток и аудиопоток. Фильтр распаковки AVI декодирует видеокадры. Фильтр Отрисовщика видео рисует кадры на экране с помощью DirectDraw или GDI. Фильтр устройства DirectSound по умолчанию воспроизводит аудиопоток с помощью DirectSound.

Приложению не нужно управлять всем этим потоком данных. Вместо этого фильтрами управляет высокоуровневый компонент, называемый диспетчером фильтров Graph. Приложение выполняет высокоуровневые вызовы API, такие как "Выполнить" (для перемещения данных через граф) или "Stop" (для остановки потока данных). Если требуется дополнительный контроль над операциями потока, доступ к фильтрам можно получить непосредственно через COM-интерфейсы. Диспетчер фильтров Graph также передает уведомления о событиях в приложение.

Диспетчер графов фильтров также служит другой цели: он предоставляет приложениям методы для создания графа фильтров путем соединения фильтров. (DirectShow также предоставляет различные вспомогательные объекты, которые упрощают этот процесс. Они подробно описаны в документации.)

Создание приложения DirectShow

В целом, существует три задачи, которые должно выполнять любое приложение DirectShow. Они показаны на следующей схеме.

типичное приложение directshow

  1. Приложение создает экземпляр диспетчера фильтров Graph.
  2. Приложение использует диспетчер фильтров для построения графа фильтров. Точный набор фильтров в графе будет зависеть от приложения.
  3. Приложение использует диспетчер графов фильтров для управления графом фильтра и потоковой передачи данных через фильтры. На протяжении всего этого процесса приложение также будет реагировать на события из диспетчера фильтров Graph.

После завершения обработки приложение освобождает диспетчер графов фильтров и все фильтры.

DirectShow основан на COM; Диспетчер графа фильтров и фильтры являются COM-объектами. Прежде чем приступать к программированию DirectShow, необходимо иметь общее представление о программировании com-клиента. Доступно множество книг о программировании COM.

Чтобы приступить к работе с DirectShow, ознакомьтесь со статьей Воспроизведение файла, в которой представлено простое консольное приложение для воспроизведения видеофайла. В разделе About DirectShow более подробно описывается архитектура DirectShow, а в разделе Using DirectShow рассматриваются основные сценарии, поддерживаемые DirectShow, такие как захват, редактирование видео, воспроизведение DVD и телевидение.