DirectShow

Материал из Википедии — свободной энциклопедии
Перейти к навигации Перейти к поиску
Логотип DirectX Media SDK — первый раз DirectShow распространялся под этим именем.

DirectShow (иногда DS, или DShow; кодовое название Quartz) — мультимедийный фреймворк и интерфейс программирования приложений (API), выпущенный корпорацией Microsoft для разработчиков программного обеспечения и позволяющий Windows-приложениям управлять широким спектром устройств аудио/видео ввода-вывода, включая DV- и веб-камеры, DVD-устройства, ТВ-тюнеры и др.

Поддерживает также различные форматы файлов, от WAV и AVI до Windows Media. Является заменой более ранней технологии Microsoft — Video for Windows.[1] Основан на Microsoft Windows Component Object Model (COM), DirectShow предоставляет общий интерфейс работы с мультимедиа поддерживаемый большинством языков программирования. Кроме того, DirectShow расширяем и позволяет поддерживать устройства, форматы и компоненты обработки сторонних производителей. Средства разработчика и документация ранее распространялись как часть DirectX SDK, в настоящее время они распространяются совместно с Platform SDK, которая в свою очередь входит в состав Windows SDK.[2] В будущем Microsoft планирует замену DirectShow на Media Foundation.

В начале 1990-х годов после выхода релиза Windows 3.1 на рынке США появился ряд цифровых видеоустройств (известных сейчас как веб-камеры). Обычно эти устройства подключались через параллельный порт (LPT-порт принтера). Со временем, эти устройства становились популярнее, и корпорация Microsoft решила разработать технологию по работе с мультимедиа данными для разработчиков. Эта технология получила название Video for Windows (VFW). Но с самого своего рождения у VFW был огромный недостаток — сложность работы с MPEG-видео.[1]

Перед выходом Windows 95 корпорация Microsoft стартовала новый проект ActiveMovie[3] (кодовое название Quartz) для поддержки MPEG, 32-битной архитектуры и потоковой передачи видео/аудио данных. Новый проект характерен тем, что в нём использовались новые разработки корпорации Microsoft, а именно Component Object Model (COM). Только в Quartz принято объекты называть фильтрами, которые как блоки конструктора LEGO объединяются в граф-фильтр. Благодаря архитектуре COM, отдельный фильтр является самодостаточным объектом, который может быть создан сторонним разработчиком для своих нужд (например: для поддержания функциональности своего устройства).

В 1997 году корпорация Microsoft интегрирует ActiveMovie в DirectX и меняет название на DirectShow.[4][5] В 1998 году в стандартную поставку DirectShow включается поддержка DVD. В 2000 году добавляются функции редактирования потоков данных и интеграция DirectShow в DirectX окончательно завершается. Теперь разработчики могут захваченное видео проецировать в своих трёхмерных сценах. В релизе DirectX 9 в DirectShow добавлена возможность объединения видео потоков в один для микширования видео.[6]

В октябре 2004, DirectShow удаляется из официальной поставки DirectX и переносится к дополнениям DirectX. В апреле 2005, DirectShow полностью удаляется из официальных поставок DirectX и перемещается в Windows Server 2003 SP1 версию Microsoft Platform SDK.[2] Тем не менее для компиляции некоторых примеров из документации всё ещё требуется DirectX SDK.[7] А вот уже с выходом Windows Vista и документация начинает поставляться совместно с Windows SDK.[2]

Возможности

[править | править код]

Хорошим примером возможностей DirectShow может служить приложение Киностудия Windows. Большинство сторонних приложений для редактирования мультимедиа данных под операционную систему Windows также использует DirectShow.[6] Так как фильтры DirectShow разделены на три типа, соответственно и возможности DirectShow можно классифицировать соответствующим образом.

Фильтры захвата — предназначены для ввода мультимедиа данных в поток программы с различных физических устройств. В роли устройства могут быть как различного рода видео устройства (портативные видео камеры, веб-камеры, TV-тюнеры), так и аудио устройства (микрофон, модемная линия), а также данные могут быть получены и из файла (AVI, MPEG, MP3). DirectShow позволяет одновременно использовать несколько фильтров захвата, например: для одновременного захвата видео с веб-камеры и звука с микрофона. Количество одновременно используемых фильтров захвата ограничено лишь мощностью используемого компьютера.

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

Фильтры преобразования — предназначены для обработки поступающих данных из потока программы и последующей отправки преобразованных данных назад в поток к следующему типу фильтров. Этот тип фильтров может производить анализ данных, может полностью манипулировать аудио- и видеоданными для создания сложных визуальных эффектов или просто объединять (или разъединять) аудио- и видеоканалы. В стандартной поставке вместе с операционной системой Windows корпорация Microsoft предоставляет небольшое количество готовых фильтров: кодеки (MPEG-1, MP3, WMA, WMV, MIDI), контейнеры (AVI, ASF, WAV), несколько сплитеров (или демультиплексоров) и мультиплексоров.[8] Другие же популярные фильтры: кодеки (MPEG-4, AAC, H.264, Vorbis) и контейнеры (Ogg, .mov, MP4) устанавливаются с различными сторонними программами.

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

Структурная схема DirectShow

Воспроизведение обычного видеофайла — довольно простая задача для реализации при помощи DirectShow. Написание же программы с использованием всех механизмов DirectShow (например, реализация своего фильтра любого типа) является довольно сложной задачей и требует хороших навыков.[9][10][11]

Разработчики редко создают DirectShow-фильтры «с нуля», чаще они используют базовые классы. Эти классы обычно позволяют упростить разработку, позволяя программисту обойти некоторые задачи. Однако, процесс может остаться довольно сложным, потому как количество кода в базовых классах примерно соответствует половине объёма библиотеки MFC. А количество объектов, основанных на базовых классах, ошеломляет многих разработчиков. Причём, в некоторых случаях правила DirectShow API отличаются от обычных правил COM объектов, особенно это заметно в параметрах методов. Для обхода этих сложностей разработчики часто используют более высокий уровень: Windows Media Player SDK, который основан на ActiveX объекте и использует обычные правила COM.

Codec hell (термин, возникший по аналогии с DLL hell) — это конфликт, возникающий между различными фильтрами, которые пытаются выполнить одну и ту же задачу. Дело в том, что сейчас большое количество компаний производят кодеки в форме DirectShow фильтров, которые часто выполняют схожие задачи с одинаковым типом медиаданных.[12][13]

Инструменты, которые могут помочь в борьбе с Codec Hell:

  • GSpot Codec Information Appliance[14], GSpot помогает определить, какой кодек подходит для визуализации AVI-файла или другого контейнера;
  • GraphEdit, позволяет определить набор фильтров, которые DirectShow использует для воспроизведения медиа файлов;
  • «вручную», то есть граф фильтров строится заранее проверенными фильтрами.

Примечания

[править | править код]
  1. 1 2 Core Media Technology in Windows XP Empowers You to Create Custom Audio/Video Processing Components. MSDN Magazine. Microsoft (июль 2002). Дата обращения: 28 мая 2008. Архивировано из оригинала 13 марта 2012 года.
  2. 1 2 3 DirectShow documentation. MSDN. Microsoft. Дата обращения: 28 мая 2008. Архивировано из оригинала 13 марта 2012 года.
  3. Microsoft Announces ActiveMovie. Microsoft (5 марта 1996). Дата обращения: 28 мая 2008. Архивировано из оригинала 13 марта 2012 года.
  4. Microsoft Unveils First Unified Multimedia API Strategy. Microsoft (31 марта 1997). Дата обращения: 28 мая 2008. Архивировано из оригинала 13 марта 2012 года.
  5. Microsoft and Progressive Networks Collaborate on Streaming Media. Microsoft (21 июля 1997). Дата обращения: 28 мая 2008. Архивировано из оригинала 13 марта 2012 года.
  6. 1 2 Mark D. Pesce. Sample Chapter // Programming Microsoft DirectShow for Digital Video and Television. — Microsoft Press, 2003. — ISBN 0-7356-1821-6. Архивировано 5 мая 2006 года.
  7. DirectShow FAQ. MSDN. Microsoft. Дата обращения: 28 мая 2008. Архивировано из оригинала 13 марта 2012 года.
  8. Formats supported by default in DirectShow. MSDN. Microsoft. Дата обращения: 30 мая 2008. Архивировано из оригинала 13 марта 2012 года.
  9. Using DirectShow with Media Center Edition (5 января 2006). Дата обращения: 22 января 2012. Архивировано из оригинала 13 марта 2012 года.
  10. The Basics to using DirectShow (13 марта 2001). Дата обращения: 22 января 2012. Архивировано из оригинала 13 марта 2012 года.
  11. LEAD Technologies: DirectShow defined. Дата обращения: 22 января 2012. Архивировано из оригинала 13 марта 2012 года.
  12. Codec Hell: Home Video 101 blog. ??? (???). Дата обращения: 16 июня 2008. Архивировано из оригинала 13 марта 2012 года.
  13. Codec’s = New Age DLL Hell? Hell Yes — Chris Lanier’s Blog. ??? (???). Дата обращения: 16 июня 2008. Архивировано из оригинала 13 марта 2012 года.
  14. The GSpot Codec Information Appliance. Дата обращения: 22 января 2012. Архивировано из оригинала 13 марта 2012 года.