Испытание (техника)
- 1 year ago
- 0
- 0
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 позволяет одновременно использовать несколько фильтров захвата, например: для одновременного захвата видео с веб-камеры и звука с микрофона. Количество одновременно используемых фильтров захвата ограничено лишь мощностью используемого компьютера .
Фильтры преобразования — предназначены для обработки поступающих данных из потока программы и последующей отправки преобразованных данных назад в поток к следующему типу фильтров. Этот тип фильтров может производить анализ данных, может полностью манипулировать аудио- и видеоданными для создания сложных визуальных эффектов или просто объединять (или разъединять) аудио- и видеоканалы. В стандартной поставке вместе с операционной системой Windows корпорация Microsoft предоставляет небольшое количество готовых фильтров: кодеки ( MPEG-1 , MP3, WMA , WMV , MIDI ), контейнеры (AVI, ASF , WAV ), несколько сплитеров (или демультиплексоров) и мультиплексоров . Другие же популярные фильтры: кодеки ( MPEG-4 , AAC , H.264 , Vorbis ) и контейнеры ( Ogg , .mov , MP4 ) устанавливаются с различными сторонними программами.
Фильтры визуализации ( рендеринга ) — предназначены для вывода данных из потока в стандартное физическое устройство вывода, например, на монитор , на звуковую карту или в файл . По аналогии с фильтрами захвата фильтров визуализации также может быть несколько, например, для одновременного отображения видео на экране и записи этого же видео в файл.
Воспроизведение обычного видеофайла — довольно простая задача для реализации при помощи DirectShow. Написание же программы с использованием всех механизмов DirectShow (например, реализация своего фильтра любого типа) является довольно сложной задачей и требует хороших навыков.
Разработчики редко создают DirectShow-фильтры «с нуля», чаще они используют базовые классы. Эти классы обычно позволяют упростить разработку, позволяя программисту обойти некоторые задачи. Однако, процесс может остаться довольно сложным, потому как количество кода в базовых классах примерно соответствует половине объёма библиотеки MFC . А количество объектов, основанных на базовых классах, ошеломляет многих разработчиков. Причём, в некоторых случаях правила DirectShow API отличаются от обычных правил COM объектов, особенно это заметно в параметрах методов. Для обхода этих сложностей разработчики часто используют более высокий уровень: Windows Media Player SDK , который основан на ActiveX объекте и использует обычные правила COM.
Codec hell (термин, возникший по аналогии DLL hell ) — это конфликт, возникающий между различными фильтрами, которые пытаются выполнить одну и ту же задачу. Дело в том, что, сейчас, большое количество компаний производят кодеки в форме DirectShow фильтров, которые часто выполняют схожие задачи с одинаковым типом медиаданных.
Инструменты, которые могут помочь в борьбе с Codec Hell: