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 Movie Maker. Большинство сторонних приложений для редактирования мультимедиа данных под операционную систему 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[править | править вики-текст]

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.
  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 (05 января 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.

Ссылки[править | править вики-текст]