Interested Article - DirectShow

Логотип DirectX Media SDK — первый раз DirectShow распространялся под этим именем.

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

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

История

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

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

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

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

Возможности

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

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

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

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

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

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

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

Критика

Сложность

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

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

Codec hell

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

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

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

См. также

Примечания

  1. . MSDN Magazine . Microsoft (июль 2002). Дата обращения: 28 мая 2008. Архивировано из 13 марта 2012 года.
  2. . MSDN . Microsoft. Дата обращения: 28 мая 2008. Архивировано из 13 марта 2012 года.
  3. . Microsoft (5 марта 1996). Дата обращения: 28 мая 2008. Архивировано из 13 марта 2012 года.
  4. . Microsoft (31 марта 1997). Дата обращения: 28 мая 2008. Архивировано из 13 марта 2012 года.
  5. . Microsoft (21 июля 1997). Дата обращения: 28 мая 2008. Архивировано из 13 марта 2012 года.
  6. Mark D. Pesce. Sample Chapter // . — Microsoft Press, 2003. — ISBN 0-7356-1821-6 . 5 мая 2006 года.
  7. . MSDN . Microsoft. Дата обращения: 28 мая 2008. Архивировано из 13 марта 2012 года.
  8. . MSDN . Microsoft. Дата обращения: 30 мая 2008. Архивировано из 13 марта 2012 года.
  9. (5 января 2006). Дата обращения: 22 января 2012. Архивировано из 13 марта 2012 года.
  10. (13 марта 2001). Дата обращения: 22 января 2012. Архивировано из 13 марта 2012 года.
  11. . Дата обращения: 22 января 2012. Архивировано из 13 марта 2012 года.
  12. . ??? (???). Дата обращения: 16 июня 2008. Архивировано из 13 марта 2012 года.
  13. . ??? (???). Дата обращения: 16 июня 2008. Архивировано из 13 марта 2012 года.
  14. . Дата обращения: 22 января 2012. Архивировано из 13 марта 2012 года.

Ссылки

  • (англ.)
  • (англ.)
Источник —

Same as DirectShow