Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
[Функция, связанная с этой страницей, 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 декодирует видеокадры. Фильтр "Отрисовщик видео" выводит кадры на дисплей с помощью DirectDraw или GDI. Фильтр устройства DirectSound по умолчанию воспроизводит аудиопоток с помощью DirectSound.
Приложению не нужно управлять всем этим потоком данных. Вместо этого фильтры управляются компонентом высокого уровня, который называется диспетчером графов фильтров. Приложение вызывает высокоуровневые вызовы API, такие как "Выполнить" (для перемещения данных через граф) или "Остановить" (для остановки потока данных). Если требуется больше контроля над операциями потока, вы можете получить доступ к фильтрам непосредственно через COM-интерфейсы. Диспетчер графов фильтров также передает уведомления о событиях приложению.
Диспетчер графов фильтров также служит другой целью: он предоставляет методы для приложения для создания графа фильтров, подключая фильтры вместе. (DirectShow также предоставляет различные вспомогательные объекты, упрощающие этот процесс. Они подробно описаны в документации.)
Создание приложения DirectShow
В целом существует три задачи, которые должны выполнять любое приложение DirectShow. Они показаны на следующей схеме.
- Приложение создаёт экземпляр менеджера графов фильтров.
- Приложение использует диспетчер графов фильтров для создания графа фильтров. Точный набор фильтров в графе будет зависеть от приложения.
- Приложение использует диспетчер графов фильтров для управления графом фильтров и потоковой передачи данных через фильтры. На протяжении всего этого процесса приложение также будет реагировать на события от Filter Graph Manager.
После завершения обработки приложение освобождает диспетчер графов фильтров и все фильтры.
DirectShow основан на COM; Диспетчер графов фильтров и фильтры — это все COM-объекты. Прежде чем приступить к программированию DirectShow, вы должны иметь общее представление о программировании клиента COM. Доступны многие книги о программировании COM.
Чтобы приступить к работе с DirectShow, ознакомьтесь со статьей Как воспроизвести файл, которое представляет простое консольное приложение для воспроизведения видеофайла. В разделе о DirectShow подробно описана архитектура DirectShow, а в разделе Использование DirectShow рассматриваются основные сценарии, поддерживаемые DirectShow, такие как запись, редактирование видео, воспроизведение DVD и телевидение.