История мультимедиа в Windows: DirectShow (ч.1)

Автор: Topol Вторник, Май 8th, 2012 Нет комментариев

Рубрика: Операционные системы

Что ж, первый этап развития мультимедийных средств системы Windows мы рассмотрели в первой статье цикла. Он продолжался с рубежа 80-х и 90-х по середину 90-х годов прошлого столетия, и результатом его стало появление в составе Windows мультимедийных подсистем Audio Compression Manager (ACM) и Video for Windows (VfW), которые «отвечали», соответственно, за воспроизведение звука и видео.

Настала пора заняться вторым этапом. Он начался в середине 90-х годов и закончился в начале 2000-х. Какие значимые события произошли в это время?

1. Что мы имели в начале второго этапа
Перво-наперво давайте подведём итоги первого этапа, выясним, что он принёс нам, пользователям Windows.

С одной стороны, мультимедийные подсистемы ACM и VfW были вполне адекватны для своего времени. Они позволяли воспроизводить звук и видео, хранящиеся в файлах WAV и AVI и обычно закодированные в форматах PCM, Cinepak и Indeo. (Другие форматы кодирования применялись значительно реже и требовали установки дополнительного ПО — кодеков ACM и VfW.) Они обеспечивали приемлемое качество воспроизведения, разумеется, при наличии достаточно мощного компьютера. И, наконец, они были доступны для использования сторонними разработчиками через хорошо документированные API.

С другой стороны, качество тогдашних аудио и видео оставляли желать лучшего. Тому есть несколько причин.

 

  • Компьютеры того времени всё-таки не были достаточно мощными, чтобы воспроизводить видео с относительно большим размером кадра без рывков.
  • Форматы кодирования того времени не предназначались для обеспечения высокого качества видео. У них была другая задача — обеспечить воспроизведение видео на большинстве тогдашних компьютеров, которые, как мы уже знаем, были не очень мощными.
  • Пользователи ещё не были избалованы качественным компьютерным видео. Более того, даже крошечный, мутный, рябой и постоянно дёргающийся видеоролик, воспроизводящийся в крошечном окошке, они почитали чудом.
  • Звук и видео в программах тех времён играли чисто вспомогательную роль: аудио- и видеоролики в пакетах компьютерных энциклопедий, внутриигровое видео в программах компьютерных игр, какие-либо обучающие ролики и т. п. От таких материалов не требовалось особо высокого качества.

Перелом случился в 1993 году, когда группа MPEG представила набор форматов MPEG I. Он предназначался именно для кодирования высококачественного видео. Более того, MPEG I оказался настолько удачным, что в том же году появился первый стандарт цифровых видеодисков, рассчитанный на самое широкое распространение, — Video CD.

И пользователи поняли, что цифровое видео — это серьёзно, качественно и доступно.

К сожалению, подсистема VfW в принципе не позволяла воспроизводить видео, закодированное в формате MPEG I. К тому же, она выполняла вывод видео через подсистему GDI, совершенно не приспособленную для этого и работающую чрезвычайно медленно. Нужно было что-то новое…

2. Три ключевых технологии
Но сначала должны были появиться три ключевые технологии, которые станут основой этого самого нового. Давайте поговорим о них.

2.1. Аппаратное ускорение вывода графики
Первая технология решила проблему медленного вывода графики на экран. Она является чисто аппаратной, реализуется видеоадаптером и включает в себя два компонента: функции аппаратного рисования графики и аппаратный оверлей.

2.1.1. Аппаратное рисование графики
Идея переложить на видеоадаптер операции по рисованию графических примитивов - прямых и кривых линий, прямоугольников и заливок — и вывод растровых изображений возникла давно. Компьютеры в те времена были медленными, графику рисовали долго, и перенос хотя бы некоторых операций по её выводу на видеоадаптер позволил бы заметно поднять производительность.

Первый видеоадаптер, реализующий функции аппаратного рисования примитивов, был выпущен компанией Intel ещё в 1983 году. Он назывался iSBX 275 Video Graphics Controller Multimodule Board (рис. 1), использовал шину Multibus и предназначался для рабочих станций Sun 1 и Sun 2. Платформа PC, где шина Multibus не применялась никогда, осталась «за бортом».


Рис. 1. Видеоадаптер iSBX 275 Video Graphics Controller Multimodule Board

А первый видеоадаптер, поддерживавший аппаратное рисование и предназначенный для PC, был выпущен в 1987 году компанией IBM. Он носил название 8514/A и предназначался для компьютеров семейства PS/2.

Кстати, эта разработка установила необходимый минимум операций аппаратного рисования, который должен был поддерживать любой приличный видеоадаптер. Этот минимум включал:

  • вывод графических примитивов, в первую очередь, прямых и кривых линий и прямоугольников — наиболее часто использовавшихся в графике фигур;
  • выполнение заливки замкнутых контуров;
  • вывод растровых графических изображений;
  • выполнение bit blit (смешивание двух и более растровых графических изображений с использованием операций булевой алгебры: И, ИЛИ, исключающее ИЛИ).

Семейство компьютеров PS/2 благополучно кануло в лету, а вместе с ней — и видеоадаптер 8514/A. Но идея не была забыта.

В 1991 году компания S3 представила видеоадаптер 86C911. Он обеспечивал исключительную по тем временам скорость вывода графики; даже медленная GDI — графическая подсистема тогдашних версий Windows — на нём выглядела молодцом. Неудивительно, что этот продукт стал активно копироваться другими фирмами.


Рис. 2. Одна из видеокарт, основанная на S3 86C911

И в середине 90-х годов практически все серьёзные видеоадаптеры реализовывали аппаратное рисование графики.

Достоинства аппаратного рисования графики мы рассматривать не будем — они и так понятны. А существенных недостатков у него нет.

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

2.1.2. Аппаратный оверлей
Это аппаратный оверлей. Первые видеоадаптеры, поддерживающие его, появились в первой половине 90-х.

Работает он следующим образом. Приложение, которому требуется вывести что-то на экран, отправляет видеоадаптеру через его драйвер соответствующий запрос, в котором указывает экранные координаты вывода. В ответ видеоадаптер выделяет приложению участок в оперативной памяти компьютера. Отметим, что этот участок памяти принадлежит именно этому приложению; остальные приложения ничего записать туда не могут.

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

Ключевое достоинство аппаратного оверлея видеоадаптера — исключительно быстрый вывод. Можно сказать, что приложение, использующее его, передаёт сформированную им графику прямо видеоадаптеру, минуя длинный, сложный и медленный программный «конвейер» GDI. Уже одно это позволяет устранить почти все рывки при воспроизведении видео.

К сожалению, аппаратный оверлей имеет и недостатки…

  • Невозможность снятия скриншотов выводимой с его помощью графики — вместо на её месте будет присутствовать прямоугольник, окрашенный в сплошной цвет.
  • Возможность поддержки только одного оверлея. Это значит, что в системе может работать только одно приложение, выводящее графику с его помощью; если запустить второе приложение, оно будет вынуждено использовать GDI.
  • Как следствие, проблемы с выводом на вторичный экран, что проявилось позднее, с появлением многоэкранных систем.
  • Отсутствие поддержки вывода на полный экран (впрочем, этот недостаток был устранён в более новых видеоадаптерах).
  • Часто наблюдались искажения яркости и цветов выводимой графики.
  • Трудности в реализации постобработки видео — его обработки перед собственно выводом с целью повысить качество. Постобработка обычно включает в себя сглаживание, деинтерлейсинг (преобразование чересстрочного видео в прогрессивное), коррекция цвета и частоты кадров и масштабирование до размеров окна, в которое выполняется вывод.
    Фактически операции постобработки в этом случае приходится выполнять самому приложению, которое воспроизводит видео. А реализовать их довольно сложно.

Тем не менее, сама концепция аппаратного оверлея оказалась настолько удачной и, главное, востребованной рынком, что в течение нескольких лет все производители видеоадаптеров взяли её на вооружение. Ныне аппаратный оверлей поддерживают все видеоадаптеры, выпущенные после 1998 года, даже самые простые.

2.2. DirectDraw и DirectSound
Вторая технология была уже чисто программной и предоставила разработчикам приложений стандартные средства для:

  • максимально быстрого вывода двухмерной графики с использованием всех аппаратных возможностей видеоадаптера;
  • максимально быстрого вывода звука и микширования нескольких аудиопотоков с использованием всех аппаратных возможностей аудиоадаптера.

Это DirectX, о которой упоминалось ещё в первой статье цикла.

Первая версия DirectX, носившая номер 1.0, была представлена 30 сентября 1995 года. Самая последняя на данный момент версия носит номер 11.0.

DirectX настолько всеобъемлюща, что ей впору посвящать отдельную статью. Но нас в плане поддержки мультимедиа интересуют только два её ключевых компонента. Рассмотрим их.

2.2.1. DirectDraw
Назначение компонента DirectDraw - предоставить разработчикам стандартный способ для максимально быстрого вывода двухмерной графики, в том числе и видео.

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

Отметим, что DirectDraw выполняет рисование графики в обход GDI, за счёт чего и достигается высокая скорость вывода. Её можно считать отдельной графической подсистемой, никак с GDI не соприкасающейся.

В работе DirectDraw максимально использует возможности видеоадаптера — аппаратное рисование графики и аппаратный оверлей. Причём в каждом конкретном случае используется тот аппаратный компонент, который позволит вывести графику максимально быстро.

Операции, не поддерживаемые видеоадаптером на аппаратном уровне, реализуются программно. Благодаря этому DirectDraw может работать на любом видеоадаптере, даже самом старом и маломощном.

Разумеется, DirectDraw может использоваться — и используется — для вывода видео. В конце концов, видео — это просто набор отдельных графических изображений.

Достоинство DirectDraw очевидно — он предоставляет разработчикам стандартные средства для быстрого аппаратно-независимого вывода графики с полным использованием средств видеоадаптера. Существенных недостатков у него нет.

DirectDraw присутствует во всех версиях DirectX. Но, начиная с DirectX 9.0, он был объявлен устаревшим и нерекомендованным для использования во вновь создаваемых приложениях. Вместо этого разработчикам было предложено использовать для вывода двухмерной графики другой компонент DirectX — Direct3D, ранее предназначавшийся исключительно для вывода трёхмерной графики.

2.2.2. DirectSound
Компонент DirectSound призван дать разработчикам стандартные средства для максимально быстрого вывода звука.

Полный набор её возможностей перечислен ниже.

  • Быстрый, с минимальными задержками, вывод звука.
  • Микширование, в том числе и программное, нескольких звуковых потоков, порождённых различными приложениями.
  • Средства для наложения на звук различных эффектов.
  • Ввод звука с микрофона и других источников.

В работе DirectSound максимально использует аппаратные возможности аудиоадаптера. Так, если аудиоадаптер включает в себя схему аппаратного микшера, для микширования звуков используется именно она; при этом программный микшер отключается.

Ключевое достоинство DirectSound — предоставление стандартных средств для быстрого аппаратно-независимого вывода звука с полным использованием средств аудиоадаптера. Существенных недостатков у него нет.

DirectSound присутствует во всех версиях DirectX. Однако, начиная с Windows Vista, он был объявлен устаревшим и нерекомендованным к использованию. Вместо него разработчикам рекомендуется использовать новую звуковую подсистему UAA, речь о которой пойдёт в третьей статье цикла.

2.3. COM
Третья технология, также сугубо программная, существенно упростила создание сложных программных комплексов, построенных на модульной основе. Она носит название COM (Component Object Model).

Технология COM была представлена ещё в 1993 году. А в 1994-м она уже вошла в полную силу — именно тогда вышла Windows 95, одним из ключевых компонентов которой была COM. Более того, многие возможности Windows 95, в частности, расширения Проводника, были реализованы именно на основе этой технологии.

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

В общем случае схема работы COM-приложений такова. Программный объект, который будет использоваться в составе других приложений, устанавливается в систему и регистрируется в Реестре в качестве COM-сервера. Приложение, которое использует этот объект, - COM-клиент - ищет в Реестре его уникальный идентификатор и, отыскав, активизирует его. Далее это COM-клиент собственно использует COM-сервер в своей работе — обменивается с ним данными и посылает ему команды, управляющие его функционированием. Завершив все «дела» с COM-сервером, COM-клиент деактивирует его, в процессе чего COM-сервер завершает свою работу и выгружается из памяти.

В качестве типичного примера COM-приложений можно привести обычный Проводник Windows. Сам Проводник — это COM-клиент, а его расширения, например, то, что выполняет упаковку и распаковку файлов в формат ZIP, — это COM-сервер.

Технология COM широко применяется во всех версиях Windows, начиная с Windows 95 и заканчивая самой современной на данный момент Windows 7. Думается, она никуда не исчезнет и в будущем; так, мы наверняка столкнёмся с COM и в Windows 8.

3. DirectShow
К разработке новой мультимедийной подсистемы программисты Microsoft подошли со всей серьёзностью. Они тщательно проанализировали плюсы и минусы ACM и VfW, первые постарались сохранить, а от вторых — избавиться. Помимо этого, они взяли на вооружение три технологии, что мы только что рассмотрели. Вероятно, именно поэтому процесс разработки несколько затянулся…

Так или иначе, в марте 1996 года была анонсирована мультимедийная подсистема DirectShow, призванная прийти на смену и ACM, и VfW. Та самая DirectShow, которой мы пользуемся и сегодня.

3.1. Достоинства и недостатки ACM и VfW
Итак, чем же были хороши и плохи существовавшие на тот момент подсистемы ACM и VfW? Давайте разберёмся.

Единственное ключевое достоинство обоих этих подсистем — модульная архитектура. Чтением мультимедийного файла, разделением его содержимого на звук и видео и декодированием их в вид, пригодный для вывода, занимались отдельные программы — кодеки. Это значит, что для добавления в Windows возможности воспроизведения какого-либо формата аудио- или видеофайлов было достаточно установить в неё соответствующий кодек. Заменять при этом всё программное обеспечение мультимедийной подсистемы не требовалось.

Недостатков же у этих подсистем заметно больше…

  • Воспроизведением звука и видео занимаются две отдельные мультимедийные подсистемы — ACM и VfW соответственно. Конечно, тому есть вполне историческая причина (ACM появилась существенно раньше, чем VfW), но выглядит этот «тандем» слишком топорно.
  • Каждый кодек ACM или VfW занимается и чтением данных из мультимедийного файла, и разделением их на звук и видео, и их декодированием. Необходимость реализации в кодеке всех этих операций заметно усложняет их написание и ограничивает гибкость мультимедийной подсистемы; так, чтобы добавить в систему только поддержку нового формата файлов, придётся создавать сразу несколько кодеков, поддерживающих различные сочетания данного формата файлов и различных форматов кодирования.
  • Функциональные ограничения ACM и VfW. Первая не «умеет» программно микшировать звуковые потоки, что в середине 90-х годов уже было серьёзным упущением. Вторая же не способна воспроизводить видео с размерами кадра большими, чем 352х240 пикселов, и работать с форматами кодирования, хранящими кадры видео в порядке, отличном от того, в котором они следуют. Следовательно, видео, закодированное в MPEG I Video, на ней не воспроизведёшь.

Эти недостатки и привели к тому, что век ACM и VfW оказался столь недолгим. Новая мультимедийная подсистема, если, конечно, она хочет «прожить» дольше своей предшественницы, должна быть свободна от них.

3.2. История разработки DirectShow
Как уже говорилось, новая подсистема — преемница ACM и VfW была анонсирована в марте 1996 года. Изначально она носила названиеActiveMovie и была призвана дать Windows возможность воспроизводить видео формата MPEG I Video.

Это интересно
В процессе разработки ActiveMovie носила название Quartz. Именно поэтому файл одного из ключевых модулей этой подсистемы называется quartz.dll.

Уже в мае 1996 года ActiveMovie вышла в составе дистрибутива beta-версии Internet Explorer 3.0. На тот момент установка этой программы была единственной возможностью попробовать новую подсистему в действии.

В марте 1997 года ActiveMovie вошла в состав DirectX 5.0. А в июле получила новое имя — DirectShow, чтобы в этом плане не отличаться от других компонентов DirectX.

Будучи 32-разрядной, DirectShow устанавливалась только на Windows 95. Установить её можно было в составе дистрибутивного комплекта либо Internet Explorer 3.0, либо DirectX версии 5.0 или более новой.

3.3. Архитектура и принцип работы DirectShow
В целом, DirectShow построена на том же модульном принципе, что и ACM с VfW. Вообще, модульный подход в построении сложных программных систем такого рода является самым подходящим.

Все программы, составляющие DirectShow, делятся на две группы. К первой группе относится программное ядро, которое управляет всеми остальными программными составляющими DirectShow и координирует их работу.

Во вторую группу входят так называемые фильтры - небольшие программы, выполняющие отдельные задачи по считыванию, разбору, декодированию и выводу содержимого мультимедийных файлов. Эти фильтры можно разделить на четыре типа:

  • источники (source filters), выполняющие чтение файла;
  • разделители (split filters, или splitters), выполняющие разделение считанного содержимого на отдельные дорожки, содержащие звук, видео, субтитры и дополнительные данные (например, меню) и, возможно, предоставляющие средства для выбора нужной дорожки;
  • преобразователи (transform filters), выполняющие преобразованиие данных, например, декодирование в подходящий для вывода вид или, наоборот, кодирование в другой формат;
  • фильтры вывода (renderer filters, или renderers), выполняющие вывод преобразованных данных или запись их в файл.
    Есть только один случай, когда фильтр вывода не используется — вывод звука через аудиоадаптер. В таком случае фильтром вывода выступает подсистема DirectSound.

Внимание!
Часто фильтры DirectShow неправильно называют кодеками. На самом деле кодеки - это:

  • либо аналогичные программные компоненты ACM и VfW;
  • либо программные пакеты, включающие набор фильтров DirectShow, которые поддержвают те или иные форматы файлов и кодирования.


Так что лучше называть фильтры фильтрами и не создавать такой путаницы.

Все фильтры DirectShow являются COM-серверами, реализуются в виде динамических библиотек Windows и хранятся в файлах с расширениями dll или ax.

Процесс воспроизведения мультимедийного файла с помощью DirectShow таков.

  • Приложение информирует программное ядро подсистемы, что ему требуется воспроизвести файл, и указывает его имя.
  • Программное ядро по расширению файла определяет его формат, отыскивает в Реестре фильтр-источник, который этот формат поддерживает, активизирует его и передаёт ему имя файла.
  • Фильтр-источник открывает файл и сообщает об этом программному ядру.
  • Программное ядро отыскивает в Реестре подходящий фильтр-разделитель, активизирует его и передаёт ему данные, полученные фильтром-источником.
  • Фильтр-разделитель разделяет содержимое файла на отдельные дорожки и сообщает об этом программному ядру.

    Если разделитель имеет возможность выбора нужной дорожки, он считывает из файла только те дорожки, что были выбраны пользователем через предоставляемый этим фильтром интерфейс. В результате будут воспроизведены только те дорожки, что нужны пользователю.

    Если же разделитель не обладает такой возможностью, он считывает из файла все дорожки. В результате будут воспроизводиться все дорожки, и выбор нужной перекладывается на приложение, которое воспроизводит файл.

  • Программное ядро находит в Реестре фильтры-преобразователи, поддерживающие форматы кодирования, в которые были закодированы данные из считанных разделителем дорожек, активизирует их и передаёт им данные, что хранятся в этих дорожках.
  • Преобразователи начинают обработку данных из дорожек, о чём и уведомляют программное ядро.
  • Программное ядро отыскивает в Реестре подходящие фильтры вывода, активизирует их и передаёт им преобразованные данные.
  • Программное ядро даёт команду собственно начать воспроизведение.

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


Рис. 3. Пример цепочки фильтров DirectShow, создаваемой при воспроизведении файла MP3

3.4. Форматы, поддерживаемые DirectShow
Какие же форматы файлов и кодирования звука и видео поддерживала DirectShow? Давайте выясним.

  • Форматы файлов: аудио — WAV, MIDI, AIFF, AU, видео — AVI.
  • Форматы кодирования звука: PCM, MP1, MP2.
  • Форматы кодирования видео: Cinepak, MPEG I Video.

Как видим, некоторые форматы кодирования, чья поддержка имелась в VfW, такие, как Indeo, в DirectShow не поддерживались. (Это притом, что подсистема VfW их всё ещё поддерживала.) Впрочем, после появления MPEG I Video все они безнадёжно устарели.

3.5. AIFF
Формат аудиофайлов AIFF (Audio Interchange File Format) был представлен ещё в 1988 году компаниями Apple и Electronic Arts. Он стал первым форматом мультимедийных файлов, поддерживаемым платформой Apple Mac.

Изначально в файлах AIFF хранился звук, закодированный в формате PCM, то есть несжатый. Впоследствии появилась специальная модификация формата AIFF, предназначенная для хранения сжатого звука; она получила название AIFF-C, или AIFC.

В файлах AIFF может храниться звук, закодированный практически в любом из современном форматов. Файлы формата AIFF должны иметь расширение aiff, aif или aifc (сжатый звук). Достоинства и недостатки формата AIFF такие же, как у аналогичного формата WAV. Формат AIFF применяется до сих пор. В нём хранятся системные звуки, используемые в программах на платформе Apple Mac, а также звук, предназначенный для обработки на профессиональном уровне.

3.6. AU
Формат аудиофайлов AU был представлен компанией Sun в конце 80-х годов. Он стал первым мультимедийным форматом, поддерживаемым Unix-совместимыми операционными системами.

В файлах AU может храниться звук, закодированный практически в любом из современном форматов. Файлы формата AU должны иметь расширение au или snd. Достоинства и недостатки формата AU такие же, как у аналогичного формата WAV. В настоящее время формат AU имеет довольно ограниченное применение и встречается, в основном, на Unix-совместимых системах.

3.7. Достоинства и недостатки DirectShow
Теперь перечислим достоинства и недостатки новой мультимедийной подсистемы.

Сначала, как водится, достоинства:

  • Отсутствуют функциональные ограничения на параметры воспроизводимых звука и видео. Так, DirectShow может воспроизводить многоканальный звук, видео с большими размерами кадра (видео высокого разрешения), выводить субтитры и меню, если формат файлов поддерживает их хранение.
  • Каждый фильтр DirectShow, в отличие от кодеков ACM и VfW, выполняет только часть задач по выводу мультимедиа: только чтение, только разделение, только преобразование или только собственно вывод. Поэтому, чтобы добавить в систему, скажем, поддержку нового формата файлов, требуется установить только подходящий фильтр-источник. Также существенно упрощается написание фильтров.
  • DirectShow имеет в своей основе технологию COM, а каждый фильтр представляет собой COM-сервер (программное ядро в этом случае выступает как COM-клиент). Следовательно, существенно упрощается задача поиска фильтров и управления ими. К тому же, фильтры могут быть написаны на любом языке программирования.
  • DirectShow активно использует для вывода звука и видео средства DirectX, а именно, DirectDraw и DirectSound. Благодаря этому обеспечивается качественное воспроизведение, без ряби и рывков.
  • Программирование простых мультимедийных приложений, использующих DirectShow, таких, как проигрыватели, выполняется очень просто. Более того, многие задачи за разработчика выполняет сама эти подсистема; так, она способна собственными силами создать цепочку фильтров для воспроизведения файла.

Теперь немного поругаем DirectShow, рассмотрев её недостатки:

  • Если пользователь установит два фильтра одного типа, поддерживающие один и тот же формат файлов или кодирования, между этими фильтрами может возникнуть конфликт. Результатом этого могут быть проблемы при воспроизведении файлов или даже завершение обоих фильтров по ошибке. Эта проблема носит название codec hell («ад кодеков»; кодеками здесь неправильно называются фильтры DirectShow).
  • DirectShow плохо поддерживает цифровое управление правами, что может вызвать проблемы при воспроизведении защищённого мультимедиа.
  • Программирование фильтров DirectShow — задача очень сложная и трудоёмкая даже для квалифицированного программиста. Даже несмотря на то, что Microsoft предусмотрела набор базовых классов DirectShow Base Classes, призванных упростить их разработку.

Что ж, с идеальными вещами в этом мире большая напряжёнка…

Но, несмотря на все недостатки, DirectShow оказалась настолько удачной, что без всяких изменений дожила до наших дней. Именно она используется в Windows XP — самой популярной на данный момент версии Windows. Да и новейшая мультимедийная подсистема Media Foundation, применяемся в Windows Vista и 7, — суть всего лишь усовершенствованная DirectShow.

3.8. Video Renderer
Помимо всего прочего, DirectShow также предоставляла новый способ вывода видео на экран. Для этого использовался фильтр вывода под названием Video Renderer.

Video Renderer использует для вывода видео средства подсистемы DirectDraw 3. При этом все аппаратные возможности видеоадаптера по выводу графики (рисование и оверлей) задействуются автоматически.

Достоинства у фильтра Video Renderer два. Во-первых, если видеоадаптер поддерживал самые современные на тот момент функции (аппаратное рисование графики и аппаратный оверлей), вывод видео выполнялся максимально быстро и качественно. Во-вторых, Video Renderer позволял смотреть видео даже на самых старых и маломощных видеоадаптерах, не поддерживавших ни того, ни другого; правда, скорость вывода видео было в этом случае невысокой.

Недостатки его таковы:

  • Отсутствовали средства для постобработки выводимого видео. В результате видео могло быть зернистым, выводиться с искажёнными цветами или низкой яркостью.
  • Не поддерживался вывод чересстрочного видео (что станет актуальным после появления видеодисков DVD-Video).
  • Отсутствовала возможность вывода субтитров.
  • Во многих случаях аппаратный оверлей не задействовался, даже если видеоадаптер его поддерживал; в результате скорость вывода видео сильно падала.

Video Renderer использовался для вывода видео недолго и вскоре уступил место более совершенным фильтрам вывода. В настоящее время практически нигде не используется, хотя и до сих пор поддерживается Windows.

3.9. ActiveMovie Control
Чтобы пользователи сразу смогли оценить преимущества DirectShow, Microsoft включила в её состав новый мультимедийный проигрыватель. Он назывался ActiveMovie Control, устанавливался вместе с Internet Explorer 3.0 или DirectX 5.0 и запускался через менюПуск.


Рис. 4. ActiveMedia Control, запущенный под Windows Vista

ActiveMovie Control воспроизводил звук и видео через подсистему DirectShow и фильтр Video Renderer. Старые мультимедийные подсистемы — ACM и VfW — при этом не использовались.

Это была очень примитивная программа. Она позволяла только запускать, приостанавливать и останавливать воспроизведение и выполнять прокрутку ролика с помощью регулятора. Вероятно, её сделали в расчёте на то, чтобы в будущем выпустить более развитый проигрыватель. Как, собственно, потом и случилось…

Источник: thevista.ru

Оставить комментарий

Чтобы оставлять комментарии Вы должны быть авторизованы.

Похожие посты