Глава 1(фрагмент)Общие принципы построения и использования DirectShow
Телевизионная технология Microsoft
Архитектура DirectShow
Основные свойства фильтров и фильтрового графа [читать...]
Критерий предпочтения фильтра
Телевизионная технология Microsoft
DirectShow является архитектурой, обеспечивающей запись и воспроизведение мультимедийных потоков данных от различных источников, и входит в состав DirectX 8.1 и DirectX 9.0 SDK. В то же время DirectShow является объединяющей частью, поскольку использует другие компоненты DirectX, такие как DirectDraw, Direct3D, DirectSound для решения основной задачи записи и воспроизведения мультимедийных потоков. DirectShow также частично использует и технологию Windows Media для сжатия медиа потоков.
DirectShow позволяет создавать широкий спектр видео и звуковых приложений, в том числе для телевизионных карт аналогового и цифрового телевидения (DV). Телевизионные устройства должны поддерживаться драйверами WDM (Windows Driver Model) или драйверами широковещательной передачи (Microsoft Broadcast Driver Architecture), сокращенно BDA.
Телевизионная технология Microsoft являясь составной частью DirectShow, не выделена в явном виде в отдельный подраздел и тесно связана с DirectShow общим подходом к решению задач записи и воспроизведения потоков мультимедийных данных. В DirectShow телевизионный источник информации является равноправным среди других источников и подчиняется общим принципам построения приложений DirectShow. DirectShow позволяет быстро создавать TV приложения на платформах Microsoft Windows. Данная технология реализована на основе модели СОМ и содержит компоненты, предоставляемые Microsoft, а также спецификации для дополнительных компонентов создаваемых сторонними производителями.
Телевизионная технология Microsoft поддерживает все аналоговые и цифровые стандарты, включая ATSC, DVB, NTSC, PAL, SECAM и другие. Также полностью поддерживаются дополнительные телевизионные сервисы, например телетекст. Приложения, реализованные на основе технологии Microsoft, полностью освобождены от необходимости учета специфических деталей связанных с особенностями распространения телевизионного сигнала. Это означает, что приложение может использовать любую сеть распространения сигнала аналоговую, кабельную, цифровую (ATSC, DVB-S, DVB-C, DVB-T) а также любой другой тип сети, если ее производитель поддерживает технологию Microsoft.
Архитектура DirectShow
DirectShow имеет модульную архитектуру, основой которой является отдельный программный модуль, называемый фильтром. Фильтры могут соединяться между собой для выполнения последовательной и параллельной обработки потоков данных. Совокупность соединенных фильтров, выполняющих определенную задачу, называется фильтровым графом. Например, запись телевизионной передачи на диск выполняет фильтровый граф определенной конфигурации, созданный именно для выполнения этой задачи. Он содержит несколько фильтров DirectShow соединенных между собой. Приложение, написанное с применением DirectShow, представляет собой две части, первая часть это само приложение, которое обеспечивает интерфейс с пользователем, а также реализует построение фильтрового графа и управление им. Второй частью приложения является фильтровый граф, который взаимодействует с аппаратурой и каналами передачи данных.
DirectShow реализован на основе СОМ и любой компонент DirectShow является объектом COM. Все компоненты DirectShow можно разделить на три группы.
- Компоненты, обеспечивающие создание и функционирование фильтрового графа. Компоненты этой группы объединяются под общим названием менеджер фильтрового графа.
- Фильтры, осуществляющие обработку потоков данных, их передачу преобразование и отображение.
- Дополнительные служебные компоненты, обеспечивающие функционирование фильтрового графа.
Таким образом, фильтровый граф представляет собой совокупность фильтров соединенных определенным образом и управляемый в процессе работы менеджером фильтрового графа. Менеджер фильтрового графа также участвует в первоначальном построении графа, и в последующей его перестройке. Эти задачи во многом автоматизированы, но менеджер графа допускает и ручное построение или перестройку графа. Некоторые задачи невозможно решить в режиме автоматического построения и требуется ручное построение участков графа или даже полностью всего графа. После построения графа приложение управляет им посредством передачи команд. Реакцию графа отображают события, которые он может посылать приложению. На рисунке 1 показано взаимодействие приложения и DirectShow.
DirectShow содержит компоненты, которые обеспечивают создание графа и его функционирование. Каждый компонент имеет соответствующий идентификатор CLSID.
К компонентам создающим граф относятся.
- Построитель графа сбора (Capture Graph Builder, CLSID_CaptureGraphBuilder2). Графом сбора (capture) называется граф, производящий сбор звуковой и видео информации для записи и отображения.
- Построитель графа DVD (DVD Graph Builder, CLSID_DvdGraphBuilder). Это вспомогательный объект, обеспечивающий воспроизведение DVD.
Рис. 1. 1. Взаимодействие приложения и DirectShow.
К компонентам, управляющим функционированием графа, относится менеджер фильтрового графа (Filter Graph Manager, CLSID_FilterGraph ). Это центральный элемент фильтрового графа. Менеджер фильтрового графа осуществляет взаимодействие приложения с графом. Приложение передает в фильтровый граф управляющие сигналы и принимает события, а все управление работой и потоками информации выполняет менеджер фильтрового графа. Он предоставляет методы для соединения фильтров, их запуска и остановки, как в целом, так и по частям. Более детальное управление данными или поведением фильтра, может быть предоставлено только фильтром посредством своих COM интерфейсов. Менеджер графа имеет два идентификатора, один для рабочего потока процесса, в котором существуют все компоненты графа CLSID_FilterGraph, а второй для многопоточного приложения CLSID_FilterGraphNoThread. Для второго случая, поток, создающий граф должен иметь цикл сообщений, кроме того, перед завершением потока он должен освободить все объекты графа.
Дополнительные компоненты обеспечивают функционирование фильтрового графа. К ним относятся:
- Системный перечислитель устройств и фильтров, зарегистрированных в системе (System Device Enumerator, CLSID_SystemDeviceEnum).
- Карта фильтров (Filter Mapper, CLSID_FilterMapper2). Служит для поиска фильтров зарегистрированных в регистре по определенным критериям отбора. Используется менеджером графа и может использоваться приложением.
- Синхронизатор графа (System Reference Clock, CLSID_SystemClock) или ссылочное время. Объект используется менеджером графа для общей синхронизации фильтров и получения отсчетов времени. Менеджер графа использует в качестве источника ссылочного времени любой фильтр в графе, который способен предоставить такой источник. В случае его отсутствия данный объект должен быть создан приложением. Фильтровый граф может функционировать и без источника ссылочного времени.
- Вспомогательный компонент для получения информации о свойствах файлов AVI (Media Property Bag, CLSID_MediaPropertyBag).
- Распределитель памяти для буферов медиа данных (Memory Allocator, CLSID_MemoryAllocator). Используется фильтрами DirectShow.
- Вспомогательный компонент для поиска фильтров с одним входным контактом (SeekingPassThru). Данный объект не должен использоваться приложением
Основные свойства фильтров и фильтрового графа
Фильтровый граф строится по определенным правилам с учетом свойств фильтров, принципов соединения фильтров и принципов передачи потоков данных между фильтрами. Каждый фильтр в графе выполняет определенную операцию с мультимедийным потоком, например:
- Управление устройствами аналогового телеприемника.
- Прием видеопотока из телевизионной карты.
- Чтение мультимедийного файла.
- Передача видеопотока в видеокарту для отображения.
- Передачу звукового потока в звуковую карту для прослушивания и другие задачи.
Существует три типа фильтров:
- Фильтр источник информации (Source Filters). Например, файл AVI на диске представляется как фильтр источник сырых данных. Звуковая карта также является фильтром источником. Любой источник информации для фильтрового графа должен быть представлен своим фильтром или несколькими фильтрами.
- Трансформирующие фильтры (Transform Filters). К этим фильтрам относятся те фильтры, которые каким либо способом преобразуют поток данных. Например, кодируют или декодируют данные или разделяют общий поток на звуковой поток и видеопоток.
- Отображающие фильтры (Renderer Filters). Эти фильтры представляют информацию потребителю, они преобразуют цифровые потоки в зрительную информацию, отображаемую на экране и в аналоговый звук, передаваемый на динамики. Также в эту категорию отнесены фильтры, производящие запись информации на твердый носитель. Такие фильтры называются фильтрами записи (file-writer).
Для выполнения специфической задачи обработки мультимедийного потока может быть разработан пользовательский фильтр с учетом соглашений налагаемых DirectShow.
Каждый фильтр может иметь несколько входов и выходов. Для работы в составе фильтрового графа они соединяются последовательно в разветвленные цепочки. Например, для проигрывания видео файла создается следующая последовательность фильтров, которая содержит фильтры всех трех типов (рис 1.2).
Рис. 1.2 Пример фильтрового графа.
Критерий предпочтения фильтра
При построении фильтрового графа в автоматизированном режиме, когда выбор фильтров и их установку производит менеджер графа используется критерии предпочтения (Merit). Он позволяет менеджеру графа выбрать из нескольких фильтров одинаковых по назначению наиболее подходящий. При установке фильтров в граф в ручном режиме он не используется и может служить просто для сведения программиста.
Все фильтры в системе регистрируются с критерием предпочтения. При установке фильтра менеджер графа осуществляет перечисление всех фильтров с корректным медиа типом и их отбор в соответствии с критерием предпочтения, начиная с наивысшего значения. Для фильтров имеющих одинаковый критерий предпочтения используются дополнительные критерии отбора.
Константы критерия предпочтения имеют такие значения.
MERIT_PREFERRED = 0x800000
MERIT_NORMAL = 0x600000
MERIT_UNLIKELY = 0x400000
MERIT_DO_NOT_USE = 0x200000
MERIT_SW_COMPRESSOR = 0x100000
MERIT_HW_COMPRESSOR = 0x100050
Фильтры, которые не используются для стандартного режима воспроизведения видео, имеют значение критерия равное MERIT_DO_NOT_USE. Менеджер графа не проверяет такие фильтры. Каждый критерий может иметь промежуточное значение. Например, MERIT_NORMAL + 1.
[в начало]