DirectShow

редактировать
DirectShow
Logo об использовании DirectShow VMR9 DirectX Media SDK - DirectShow впервые был распространен под его нынешним названием. [необходима ссылка] Логотип DirectX Media SDK - DirectShow впервые распространялся под его текущим именем.
Другие именаDShow
Разработчик (и) Microsoft
Операционная система Microsoft Windows
ПредшественникActiveMovie
Тип Мультимедийная среда и API
Лицензия Собственное коммерческое программное обеспечение
Веб-сайтdocs.microsoft.com / en-us / windows / win32 / directshow / directshow

DirectShow (иногда сокращенно DS или DShow ), кодовое имя Quartz, - это мультимедийный фреймворк и API, созданный Microsoft для разработчиков программного обеспечения для выполнения различных операций с медиафайлами или потоками. Это замена более ранней технологии Microsoft Video for Windows. Основанный на платформе Microsoft Windows Component Object Model (COM), DirectShow предоставляет общий интерфейс для мультимедиа на различных языках программирования и является расширяемым, Фильтр на основе, который может отображать или записывать мультимедийные файлы по запросу пользователя или разработчика. Инструменты разработки и документация DirectShow изначально распространялись как часть DirectX SDK. В настоящее время они распространяются как часть Windows SDK (ранее известного как Platform SDK).

Microsoft планирует постепенно полностью заменить DirectShow на Media Foundation в будущем. Версии для Windows. Одна из причин, названных Microsoft, заключается в обеспечении «более надежной поддержки систем защиты контента» (см. управление цифровыми правами ). Бекки Вайс из Microsoft также подтверждает, что «вы заметите, что работа с Media Foundation требует, чтобы вы работали на немного более низком уровне, чем работа с DirectShow. И все еще есть функции DirectShow, которых (пока) нет в Media Foundation».. Как описано в статье Media Foundation, приложения Windows Vista и Windows 7 используют Media Foundation вместо DirectShow для нескольких задач, связанных с мультимедиа.

Содержание

  • 1 История
  • 2 Архитектура
  • 3 Функции
  • 4 Услуги редактирования DirectShow
  • 5 Фильтры рендеринга видео
  • 6 Прием
    • 6.1 Награды
    • 6.2 Простота
    • 6.3 Адский кодек
  • 7 Инструменты конечного пользователя
  • 8 См. Также
  • 9 Ссылки
  • 10 Внешние ссылки

История

Прямой предшественник DirectShow, ActiveMovie (под кодовым названием Quartz) изначально была создана для обеспечения поддержки воспроизведения файлов MPEG-1 для Windows. Он также был задуман как будущая замена фреймворков обработки мультимедиа, таких как Video for Windows, которые никогда не были предназначены для обработки кодеков, которые помещают видеокадры в другой порядок во время процесса сжатия, и Media Control Interface, который никогда не был полностью перенесен в 32-битную среду и не использовал COM.

Команда Quartz начала с существующего проекта под названием Clockwork. Clockwork был модульной структурой обработки мультимедиа, в которой полунезависимые компоненты работали вместе для обработки цифровых мультимедийных потоков, и ранее использовался в нескольких проектах, включая проект Microsoft Interactive Television (MITV) и другой проект под названием Tiger.

ActiveMovie было анонсировано в марте 1996 года и выпущено в мае 1996 года вместе с бета-версией Internet Explorer 3.0. В марте 1997 года Microsoft объявила, что ActiveMovie станет частью набора технологий DirectX 5, и примерно в июле он начал называть его DirectShow, что отражает усилия Microsoft в то время по консолидации технологий, которые работали напрямую с оборудованием под управлением общая схема именования. DirectShow стал стандартным компонентом всех операционных систем Windows, начиная с Windows 98 ; однако он доступен в Windows 95 после установки последней доступной распространяемой версии DirectX. В версии DirectX 8.0 DirectShow стал частью основного дистрибутива DirectX SDK и был размещен вместе с другими API DirectX.

В октябре 2004 года DirectShow был удален из основного дистрибутива DirectX и перемещен в загружаемый пакет DirectX Extras. В апреле 2005 года DirectShow был полностью удален из DirectX и перемещен в Windows SDK, начиная с версии SDK для Windows Server 2003 SP1. Однако DirectX SDK все еще требовался для создания некоторых примеров DirectShow.

С ноября 2007 года API DirectShow являются частью Windows SDK. Он включает в себя несколько новых улучшений, кодеков и обновлений фильтров, таких как Enhanced Video Renderer (EVR) и DXVA 2.0 (DirectX Video Acceleration ).

Architecture

DirectShow разделяет сложные мультимедийные задача (например, воспроизведение видео) в последовательность основных этапов обработки, известных как фильтры. Каждый фильтр, который представляет один этап в обработке данных, имеет входные и / или выходные контакты, которые могут использоваться для подключения фильтр для других фильтров. Общий характер этого механизма подключения позволяет подключать фильтры различными способами для реализации различных сложных функций. Для реализации конкретной сложной задачи разработчик должен сначала построить граф фильтра путем создания экземпляров необходимых фильтров и последующего соединения фильтров.

Существует три основных типа фильтров:

Исходные фильтры
Они предоставляют исходные потоки данных. Например,, чтение необработанных байтов из любого медиа-файла.
Преобразовать fi lters
Эти данные преобразования, полученные из выходных данных другого фильтра. Например, выполнение преобразования, такого как добавление текста поверх видео или распаковка кадра MPEG.
Фильтры средства визуализации
Они отображают данные. Например, отправка звука на звуковую карту, рисование видео на экране или запись данных в файл.

В процессе рендеринга граф фильтров ищет зарегистрированные фильтры в реестре Windows и строит свой график. фильтров на основе предоставленных местоположений. После этого он соединяет фильтры вместе и по запросу разработчика выполняет (т.е. воспроизводит, приостанавливает и т. Д.) Созданный граф. Графики фильтров DirectShow широко используются при воспроизведении видео (в котором фильтры реализуют такие функции, как синтаксический анализ файлов, демультиплексирование, распаковка и рендеринг видео и аудио), а также для записи, редактирования, кодирования, транскодирования или передачи мультимедиа по сети. Интерактивными задачами, такими как навигация по DVD, также можно управлять с помощью DirectShow.

График фильтра файла mp3, отображаемый в примере DirectShow в GraphEdit, приложении с GUI для DirectShow, используемый для визуального построения и тестирования графиков фильтров. На этом рисунке прямоугольники представляют фильтры, а серые точки, появляющиеся по бокам фильтров, представляют контакты.

В приведенном выше примере слева направо график содержит исходный фильтр для чтения файла MP3, поток фильтры разделителя и декодера для анализа и декодирования звука и фильтр рендеринга для воспроизведения исходных звуковых образцов. Каждый фильтр имеет один или несколько выводов, которые можно использовать для подключения этого фильтра к другим фильтрам. Каждый вывод функционирует как источник вывода или ввода для передачи данных от одного фильтра к другому. В зависимости от фильтра данные либо «вытягиваются» из входного контакта, либо «проталкиваются» на выходной контакт для передачи данных между фильтрами. Каждый вывод может подключаться только к одному другому выводу, и они должны согласовать, какие данные они отправляют.

Большинство фильтров построено с использованием набора классов C ++, предоставленных в DirectShow SDK, которые называются базовыми классами DirectShow.. Они обрабатывают большую часть логики создания, регистрации и подключения для фильтра. Для автоматического использования фильтров в графе фильтров их необходимо зарегистрировать в отдельной записи реестра DirectShow, а также зарегистрировать в COM. Этой регистрацией можно управлять с помощью базовых классов DirectShow. Однако, если приложение добавляет фильтры вручную, их вообще не нужно регистрировать. К сожалению, изменить уже работающий график сложно. Обычно проще остановить график и создать новый график с нуля. Начиная с DirectShow 8.0, были введены динамическое построение графа, динамическое переподключение и цепочки фильтров, которые помогают изменять граф во время его работы. Однако многие поставщики фильтров игнорируют эту функцию, что делает изменение графа проблематичным после того, как граф начал обрабатываться.

Хотя DirectShow может динамически строить граф для визуализации данного типа мультимедиа, в некоторых случаях разработчикам это сложно чтобы полагаться на эту функциональность, и им нужно прибегать к ручному построению графов фильтров, если результирующий граф фильтра является переменным. Графики фильтров могут изменяться с течением времени по мере установки на компьютер новых фильтров.

Функции

По умолчанию DirectShow включает ряд фильтров для декодирования некоторых распространенных форматов файлов мультимедиа, таких как MPEG-1, MP3, Windows Media Audio, Windows Media Video, MIDI, медиа контейнеры, такие как AVI, ASF, WAV, некоторые разделители / демультиплексоры, мультиплексоры, фильтры источника и приемника, некоторые статические фильтры изображений и минимальная поддержка управления цифровыми правами (DRM). Репертуар стандартного формата DirectShow можно легко расширить с помощью множества фильтров, что позволяет DirectShow поддерживать практически любой формат контейнера и любой аудио- или видеокодек. Например, фильтры были разработаны для Ogg Vorbis, Musepack и AC3, а также для некоторых кодеков, таких как MPEG-4 Advanced Simple Profile, AAC, H.264, Vorbis и контейнеры MOV, MP4 доступны от сторонних производителей, например ffdshow, K-Lite и CCCP. Включение поддержки дополнительных кодеков, таких как эти, может потребовать уплаты лицензионных сборов соответствующему разработчику технологии кодеков или патентообладателю. Наконец, существуют «мостовые» фильтры, которые одновременно поддерживают несколько форматов, а также такие функции, как мультиплексирование потоков, путем раскрытия функциональности базовых мультимедийных API, таких как VLC.

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

В отличие от основного C API QuickTime, где необходимо вызвать MoviesTask в цикле, чтобы загрузите медиа-файл, DirectShow обрабатывает все это прозрачным образом. Он создает несколько фоновых потоков, которые плавно воспроизводят запрошенный файл или URL-адрес без особых усилий со стороны программиста. Также, в отличие от QuickTime, ничего особенного не требуется для загрузки URL-адреса вместо локального файла на диск - граф фильтра DirectShow абстрагирует эти детали от программиста, хотя последние разработки в QuickTime (включая элемент управления ActiveX ) имеют уменьшили это несоответствие.

Службы редактирования DirectShow

Службы редактирования DirectShow (DES), представленные в DirectX 8.0 / Windows XP, представляют собой API, предназначенный для задач редактирования видео и основанный на вершина основной архитектуры DirectShow. Службы редактирования DirectShow были представлены для Microsoft Windows Movie Maker. Он включает API-интерфейсы для временной шкалы и служб переключения, изменения размера, кадрирования, видео и аудио эффектов, а также переходов, манипуляции, автоматического частоты кадров и преобразования частоты дискретизации и такие другие функции, которые используются для создания составных мультимедийных данных из ряда исходных аудио- и видеопотоков. Службы редактирования DirectShow позволяют компоновку во время выполнения более высокого уровня, поиск поддержки и управление графами, при этом позволяя приложениям получать доступ к функциям DirectShow более низкого уровня.

Хотя исходный API находится на C ++, службы редактирования DirectShow доступны на любом языке, совместимом с Microsoft.NET, включая Microsoft Visual C # и Microsoft Visual Basic с помощью третьего Библиотека стороннего кода под названием «Библиотека DirectShowNet». Кроме того, весь API DirectShow, включая службы редактирования DirectShow, можно получить из Borland Delphi 5, 6 и 7, C ++ Builder 6 и из более поздних версий с небольшими изменениями, с использованием сторонней программной библиотеки под названием «DSPack».

По состоянию на март 2012 г. (и, очевидно, еще в 2009 г.) Microsoft заявила, что API DirectShow Editing Services не поддерживается и может быть изменен или недоступен в будущем ".

Фильтры рендеринга видео

Первоначально в Windows 9x DirectShow использовал фильтр рендеринга видео. При этом изображения были нарисованы с использованием DirectDraw 3, но в некоторых случаях также можно было вернуться к режимам рисования GDI или наложения (в зависимости от видимости видеоокна и возможности видеокарты). У него был ограниченный доступ к видеоокну. Video for Windows страдает от взаимоблокировок, вызванных неправильной обработкой видеоокон приложениями, поэтому в ранних выпусках DirectShow дескриптор окно воспроизведения было скрыто от приложений. Также не было надежного способа рисования текста подписи или графики поверх видео.

DirectShow 6.0, выпущенный как часть DirectX Media, представил средство рендеринга Overlay Mixer, разработанное для DVD воспроизведение и трансляция видеопотоков с закрытыми субтитрами и субтитрами. Overlay Mixer использует DirectDraw 5 для рендеринга. Для управления окнами требуется нисходящее соединение с Video Renderer. Overlay Mixer также поддерживает расширения видеопортов (VPE), что позволяет ему работать с аналоговыми ТВ-тюнерами с возможностью наложения (отправка видео напрямую на видеокарту по аналоговому каналу, а не по шине PCI ). Overlay Mixer также поддерживает соединения DXVA. Поскольку он всегда отображается в оверлее, полноэкранное видео на ТВ-выход всегда активируется.

Начиная с Windows XP, был представлен новый фильтр под названием Video Mixing Renderer 7 (VMR-7 или иногда просто VMR). Число 7 было связано с тем, что VMR-7 использовала только DirectDraw версии 7 для визуализации видео и не имела возможности использовать рисование GDI. Главной новой функцией VMR-7 была возможность смешивать несколько потоков и графики с альфа-смешением, что позволяло приложениям рисовать текст и графику поверх видео и поддерживать настраиваемые эффекты. Он также имел "безоконный режим" (доступ к составному изображению до его рендеринга), который устранял проблемы с доступом к дескриптору окна.

DirectX 9 представил VMR-9, который включен в Windows XP SP2 и новее. В этой версии вместо DirectDraw используется Direct3D 9, что позволяет разработчикам преобразовывать видеоизображения с помощью пиксельных шейдеров Direct3D. Он доступен для всех платформ Windows как часть распространяемого пакета DirectX 9. Как и VMR-7, он обеспечивает безоконный режим. Однако, в отличие от микшера Overlay или VMR-7, он не поддерживает видеопорты. Использование параметра загрузки / 3 ГБ может привести к сбою VMR-9.

Windows Vista и Windows 7 поставляются с новым средством визуализации, доступным как Компонент Media Foundation и фильтр DirectShow, называемый Enhanced Video Renderer (EVR). EVR разработан для работы с Desktop Window Manager и поддерживает DXVA 2.0, который доступен в Windows Vista и Windows 7. Он обеспечивает лучшую производительность и лучшее качество согласно Microsoft.

Прием

Награды

8 января 2007 г. Microsoft получила премию «Эмми» за архитектуры и компоненты потокового мультимедиа на 58-й ежегодной церемонии вручения наград Technology Engineering Emmy Awards.

Simplicity

Дать команду DirectShow воспроизвести файл - относительно простая задача. Однако при программировании более сложных настроек, таких как команда DirectShow для отображения определенных сообщений Windows из окна видео или создание пользовательских фильтров, многие разработчики жалуются на трудности. Он считается одной из самых сложных библиотек / API разработки Microsoft.

Разработчики редко создают фильтры DirectShow с нуля. Вместо этого они используют базовые классы DirectShow. Базовые классы часто могут упростить разработку, позволяя программисту обойти определенные задачи. Однако процесс может оставаться относительно сложным; код, найденный в базовых классах, почти вдвое меньше всей библиотеки MFC. В результате, даже с базовыми классами, количество COM-объектов, содержащихся в DirectShow, часто ошеломляет разработчиков. В некоторых случаях API DirectShow отклоняется от традиционных правил COM, особенно в отношении параметров, используемых для методов. Чтобы преодолеть свои трудности с уникальными правилами COM DirectShow, разработчики часто обращаются к API более высокого уровня, который использует DirectShow, в частности, Windows Media Player SDK, API предоставляет разработчику элемент управления ActiveX, с которым приходится иметь дело с меньшим количеством COM-интерфейсов.

Хотя DirectShow может динамически строить граф для визуализации заданного типа мультимедиа, в некоторых случаях разработчикам сложно полагаться на эту функциональность, и им приходится прибегать к ручному построению графов фильтров, если результирующий граф фильтров является переменным. Графики фильтров могут изменяться с течением времени по мере установки на компьютер новых фильтров.

Codec hell

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

Тед Юманс из Microsoft объяснил, что «DirectShow был основан на системе заслуг, с идеей в том смысле, что, используя комбинацию достоинств фильтра и того, насколько специфичен тип / подтип носителя, каждый раз можно было бы разумно выбирать правильный кодек. На самом деле он не был предназначен для конкурирующей гонки ядерных вооружений за заслуги. 70>Инструмент, который помогает в устранении проблем с "адом кодеков", на который обычно ссылаются, - это GSpot Codec Information Appliance, которое может быть полезно для определения того, какой кодек используется для рендеринга видеофайлов в AVI и другие контейнеры. GraphEdit также может помочь понять последовательность фильтров, которые DirectShow использует для визуализации медиафайла. Адский кодек может быть решен путем создания графиков фильтров вручную, с помощью медиаплеера, который поддерживает игнорирование или переопределение качеств фильтров, или с помощью диспетчера фильтров, который изменяет достоинства фильтров в реестре Windows.

Инструменты для конечного пользователя

DirectShow, будучи ориентированной на разработчиков средой и API, не предлагает напрямую конечному пользователю контроль над кодированием контента и не включает пользовательский интерфейс для кодирования с использованием установленных кодеков или в различные форматы; вместо этого он полагается на разработчиков для разработки программного обеспечения с использованием API. Напротив, другие мультимедийные платформы, такие как QuickTime или Video для Windows, позволяют конечным пользователям выполнять основные задачи, связанные с видео, такие как перекодирование с использованием другого кодека и редактирование файлов и потоков.. Удобство, предлагаемое графическим интерфейсом конечного пользователя, очевидно, поскольку формат AVI и кодеки, используемые Video for Windows, все еще используются, например, VirtualDub.

См. Также

Ссылки

  • Пеше, Марк Д. (2003). Программирование Microsoft DirectShow для цифрового видео и телевидения. Microsoft Press. ISBN 0-7356-1821-6.

Внешние ссылки

  • DirectShow в MSDN - официальная документация
  • Руководство по воспроизведению DirectShow JRiver - руководство по DirectShow с информация общего назначения
  • VideoLab - библиотека обработки видео с поддержкой DirectShow (бесплатно для некоммерческих целей)
  • AC3 Directshow Filter - аудиофильтры AC3 с поддержкой DirectShow
  • Использование DirectShow Video Mixing Фильтр Renderer 9 - статья Самира Ахмеда
Последняя правка сделана 2021-05-17 08:13:56
Содержание доступно по лицензии CC BY-SA 3.0 (если не указано иное).
Обратная связь: support@alphapedia.ru
Соглашение
О проекте