Научная статья на тему 'Технологии управления медиапотоками'

Технологии управления медиапотоками Текст научной статьи по специальности «Компьютерные и информационные науки»

CC BY
268
69
i Надоели баннеры? Вы всегда можете отключить рекламу.
Ключевые слова
МЕДИАПОТОКИ / МЕДИАФИЛЬТРЫ / ВИДЕООБРАБОТКА / MEDIA STREAMS / MEDIA FILTERS / VIDEO PROCESSING

Аннотация научной статьи по компьютерным и информационным наукам, автор научной работы — Алексеев К. Д., Алексеева Е. Д.

Рассмотрен компьютерный мультимедийный фреймворк DirectShow. Приведены результаты анализа эволюции технологии, её архитектура, фильтры рендеринга, интеграция видео и 3D.

i Надоели баннеры? Вы всегда можете отключить рекламу.
iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.
i Надоели баннеры? Вы всегда можете отключить рекламу.

This paper describes DirectShow computer multimedia framework. The results of analysis of the evolution of technology, architecture, rendering filters, video and 3D integration were shown.

Текст научной работы на тему «Технологии управления медиапотоками»

УДК 681.31

К.Д. АЛЕКСЕЕВ*, Е.Д. АЛЕКСЕЕВА* ТЕХНОЛОГИИ УПРАВЛЕНИЯ МЕДИАПОТОКАМИ

'Институт проблем математических машин и систем HAH Украины, Киев, Украина Киевский национальный университет имени Тараса Шевченка, Киев, Украина

Анотаця. Розглянуто комп 'ютерний мультимедтний фреймворк DirectShow. Наведено резуль-тати аналiзу еволюцИ' технологи', ïï архШектура, фтьтри рендертгу, ттегращя вiдео i 3D. Ключовi слова: медiапотоки, медiафiльтри, вiдеообробка.

Аннотация. Рассмотрен компьютерный мультимедийный фреймворк DirectShow. Приведены результаты анализа эволюции технологии, её архитектура, фильтры рендеринга, интеграция видео и 3D.

Ключевые слова:медиапотоки, медиафильтры, видеообработка.

Abstract. This paper describes DirectShow computer multimedia framework. The results of analysis of the evolution of technology, architecture, rendering filters, video and 3D integration were shown. Keywords: media streams, media filters, video processing.

1. Введение в технологию DirectShow

DirectShow (Dshow, DS) - мультимедийный фреймворк и интерфейс программирования приложений (API), разработанный компанией Microsoft для операционных систем семейства Windows. Эта технология пришла на смену технологии Video for Windows. DirectShow построен на технологии COM (Component Object Model), что позволяет использовать его в приложениях, написанных на разных языках программирования, таких как С, С++, С#, Basic, Delphi и т.д [1].

DirectShow является аналогом таких технологий, как Apple QuickTime (MacOS), Gstreamer, xine (Linux).

DirectShow - это API, позволяющий Windows-приложениям управлять широким спектром устройств аудио/видеоввода, включающий (но не ограниченный) DV-камеры, веб-камеры, DVD-устройства, карты TV-тюнеров. Он также поддерживает различные форматы от WAV и AVI до Windows Media. DirectShow, кроме этого, расширяемо, оно позволяет поддерживать устройства третьих производителей, форматы и компоненты обработки.

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

2. Эволюция технологии

Следует сказать несколько слов об эволюции DirectShow, которая началась с поддержки в Windows 3.1 видеозахвата, предоставляемого моделью Видео для Windows (Video for Windows - VfW). VfW считалась прогрессивной технологией для своего времени, но имела серьезные ограничения. Одним из них было то, что менеджер видеокомпрессии (Video Compression Manager - VCM) не был разработан для управления кодеками, которые бы передавали видеофреймы в разном порядке во время сжатия. Таким образом, было затруднительно писать MPEG-кодеки, базирующиеся на VCM.

Windows также предоставлял простую поддержку аудио- и видеопроигрывания через набор команд MCI - Media Control Interface, который использовался драйверами

© Алексеев К. Д., Алексеева Е.Д., 2014

ISSN 1028-9763. Математичш машини i системи, 2014, № 3

mciavi. Хотя инфраструктура MCI допускала MPEG-декодеры, она никогда не была полностью портирована на 32-битную архитектуру и не базировалась на COM. Для снятия этих ограничений Microsoft начала проект, известный под названием Quartz, в котором была заложена поддержка проигрывания MPEG-1 для Windows.

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

Для соответствия этим многочисленным требованиям группа разработчиков проекта Quartz начала с существующего проекта Clockwork. Clockwork был модульной оболочкой, в которой совместно работали полунезависимые компоненты, следуя предписаниям набора правил, для обработки медиапотоков. Группа разработчиков Quartz^ адаптировала эту модель для работы с Windows и обеспечила поддержку устройств третьих производителей. Результатом стала базирующаяся на COM потоковая архитектура, которая через шесть лет стала базисом сотен приложений под Windows.

Эта архитектура первоначально называлась ActiveMovie и впервые появилась в 1995 году с DirectX SDK. В 1996 году ActiveMovie была переименована в DirectShow. В 1998 году, вместе с DirectX Media 6.1, была добавлена поддержка для DVD и приложений аналогового телевидения. В 2000 году DirectShow стала частью DirectX SDK в составе DirectX 8.0 и дополнительно стала поддерживать Windows Media Format, DirectShow Editing Services и API видеоредактирования.

3. Архитектура DirectShow

Цифровые видеопотоки представляют собой последовательности видеофреймов, которые могут быть несжатыми RGB-изображениями или, если поток сжат, набором цировых значений, который можно декодировать для получения изображения. Обычно видео проигрывается со скоростью 25 или 30 кадров в секунду. Несжатый цифровой аудиопоток содержит последовательность значений, каждое из которых есть целым, представляющую из себя квантованную (округленную) амплитуду аналогового сигнала в определенный момент времени. При качестве CD-аудио данные имеют точность 16 бит на отсчет, записываются и воспроизводятся как звук максимальной частоты 44,1 килогерц. Сжатый видеопоток не содержит действительных последовательностей данных, но, как и видеопоток, содержит значения, которые декодер использует для восстановления исходного потока перед тем, как подать его в звуковую карту [2].

Аудио- и видеопотоки могут быть обработаны самыми разными способами. Они могут быть скомбинированы, проанализированы, перемешаны, скопированы, сгенерированы, изменены и т.д. В DirectShow все эти операции скрыты в фильтрах - COM-объектах, имеющих стандартное поведение. Фильтры, читающие файлы, расщепляющие бинарные данные на разные (например, аудио и видео) потоки - демультиплексоры, фильтры-компрессоры и фильтры-декомпрессоры, фильтры, отображающие аудио- или видеоданные, фильтры - драйверы устройств - все это фильтры, которые знают, как они должны взаимодействовать, кроме обработки данных, с другими фильтрами для передачи потоковых данных. Приложения соединяют эти фильтры в необходимом порядке.

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

Фильтр источника вводит данные в поток. Эти данные он может получать из файла или, например, видеокамеры, веб-камеры, TV-тюнера, сетевого потока и т.д. DirectShow тесно связан с моделью Windows-драйвером (Windows Driver Model - WDM); любое ме-диаустройство с правильно реализованным WDM-драйвером автоматически предоставляется для приложения как DirectShow фильтр источника. DirectShow предоставляет также фильтры источников для ввода данных из файлов, DVD- и VfW-устройств.

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

Фильтры рендеринга принимают данные от фильтров источников или преобразования и отображают их на экране, выводят через колонки в файлы, устройства и т.д. Часть "Direct" в названии "DirectShow" отражает тот факт, что фильтры рендеринга используют технологии DirectDraw и DirectSound для передачи данных в видео- и звуковую карту. Вдобавок DirectShow поддерживает свойства потокового ядра, что позволяет таким устройствам захвата, как ТВ-тюнеры и DVD-устройства, передавать данные на внешние устройства в режиме ядра для сохранения расходов переходов из режима ядра в пользовательский режим в случаях, когда приложение не требует этих данных.

Ниже приведена схема фильтров и их соединения при проигрывании avi-файла (рис. 1).

Рис. 1. Соединение фильтров при проигрывании avi-файла

Здесь фильтром источника есть File Source (Async), фильтрами рендеринга - Video Renderer и Default DirectSound Device, а фильтрами преобразования - AVI Splitter и AVI Decompressor.

Основной задачей приложения DirectShow являются построение и управление такого рода наборами соединенных фильтров - графом. Для этого используется вспомогательный СОМ объект - Filter Graph Manager. Этот объект поддерживает целый ряд интерфейсов для создания и управления графами обработки и воспроизведения медиапотоков.

4. Отображение видео. Фильтры рендеринга. Интеграция видео и 3D

Для отображения видео DirectShow предоставляет целый набор фильтров, основанных на различных технологиях.

Video Renderer фильтр. Этот фильтр доступен на всех платформах, которые поддерживают DirectX. Он не предъявляет каких-либо специальных системных требований.

Этот фильтр использует технологию DirectDraw для отображения, если данная технология доступна, в противном случае используется технология GDI. Фильтр используется по умолчанию на всех платформах, предшествующих Windows XP.

Video Mixing Renderer Filter 7 (VMR-7). Этот фильтр доступен на платформе Windows XP, где является фильтром отображения по умолчанию. VMR-7 всегда использует технологию DirectDraw7 для отображения. Он обладает свойствами, которые были недоступны на традиционном Video Renderer фильтре. Среди этих особенностей стоит отметить прежде всего возможность сведения и композиции нескольких видеопотоков (микширование), а также plug-in модель, позволяющую разработчику получить непосредственный доступ к DirectDraw поверхностям, используемым фильтром.

Video Mixing Renderer Filter 9 (VMR-9). Это новая версия фильтра-микшера VMR-7. VMR-9 всегда использует технологию Direct3D9 для рендеринга. Данный фильтр доступен на всех платформах, которые поддерживают DirectX9. Он не является фильтром по умолчанию, так как предъявляет более строгие системные требования, чем традиционный Video Renderer фильтр.

Overlay Mixer фильтр разработан специально для проигрывания DVD и широковещательного сигнала. Этот фильтр предоставляет интерфейс, позволяющий работать с аппаратными MPEG-2-декодерами и ТВ-тюнерами с прямым доступом к видеопамяти.

Enchanced Video Renderer (EVR). Это рендер-фильтр нового поколения, доступный системам, начиная с Windows Vista.

Остановимся подробнее на описании архитектуры (VMR-9). Именно этот фильтр используется для отображения видео в нашей системе. Он может работать в трех режимах:

• оконный режим (Windowed). В этом режиме фильтр создает собственное окно, в котором производится отображение;

• безоконный режим (Windowless). В этом режиме производится отображение в окне, предоставленном приложением;

• безрендерный режим (Renderless). В этом режиме отображения не происходит. Данный специальный режим предназначен для перехвата приложением распакованных видеоданных и использования их в собственном контексте.

В нашей системе мы используем безрендерный режим для получения видеоданных и композиции их в нашем Direct3D-контексте. Такая функциональность доступна благодаря модульному дизайну VMR-9-фильтра. Для достижения этих целей мы инкапсулируем в фильтр наш собственный Allocator/Presenter. В таком режиме использования VMR-9 наше приложение осуществляет управление окном отображения; аллокацией промежуточных Direct3D объектов и буфера вывода; оповещением системы воспроизведения об используемых ресурсах; композицией и отображением видеоданных; обрабатывает различного рода ошибки и исключения Direct3D-подсистемы. В то же время VMR-9 фильтр выполняет следующие задачи: отслеживает текущее время видеопотока для своевременного предоставления видеокадров; обрабатывает и предоставляет видеоподсистеме информацию о показателях качества отображения; предоставляет апстрим компонентам видеографа совместимые ресурсы для декодирования видео; в случае необходимости производит предварительное сведение (микширование) нескольких видеопотоков.

Для успешного решения задачи инкапсуляции Allocator/Presenter в VMR-9-фильтр необходимо осуществить несколько следующих шагов:

- имплементировать класс, который бы поддерживал интерфейсы IVMRSurfaceAllocator9 и IVMRImagePresenter9;

- запросить у VMR-9 интерфейсы IVMRFilterConfig9 и IVMRSurfaceAllocatorNotify9;

- установить VMR-9 в безрендерный режим путем вызова метода IVMRFilterConfig9::SetRenderingMode с параметром VMR9Mode_Renderless;

- вызвать метод IVMRSurfaceAllocatorNotify9::AdviseSurfaceAllocator с указателем на собственный Allocator/Presenter;

- вызвать метод IVMRSurfaceAllocator9::AdviseNotify с указателем на полученный IVMRSurfaceAllocatorNotify9 интерфейс. На этом шаге устанавливается коммуникация между фильтром и нашим Allocator/Presenter объектом;

- аллоцировать совместимые DirectSD-поверхности в момент вызова IVMRSurfaceAllocator9::InitializeDevice;

- VMR-9 получает доступ к аллоцированным поверхностям путем вызова метода IVMRSurfaceAllocator9: :GetSurface;

- отобразить очередной видеокадр в момент вызова IVMRImagePresenter9::PresentImage. В нашей системе в этот момент мы производим копирование данных поверхности в нашу частную текстуру, которая в дальнейшем используется в момент рендеринга всей композиции;

- после окончания воспроизведения освободить все ресурсы в момент вызова IVMRSurfaceAllocator9::TerminateDevice.

5. Выводы

DirectShow - это API, позволяющий Windows-приложениям управлять широким спектром устройств аудио/видеоввода и включающий (но не ограниченный) DV-камеры, веб-камеры, DVD-устройства, карты TV-тюнеров.

Основные логические единицы технологии - фильтры. Фильтры могут быть трех основных типов: фильтры источников для ввода, фильтры преобразования для обработки и фильтры рендеринга для отображения информации.

Основной задачей приложения DirectShow являются построение и управление разного рода наборами соединенных фильтров - графом.

Рассмотренные в статье технологии являются эффективным инструментом создания современных медиаприложений.

СПИСОК ЛИТЕРАТУРЫ

1. http://en.wikipedia.org/wiki/DirectShow.

2. Клименко А.В. Обзор аппаратных средств и API-сервисов определения времени в персональном компьютере / А.В. Клименко, К.Д. Алексеев // Математичш машини i системи. - 2009. - № 3. -С.137 - 143.

3. DirectShow documentation. MSDN. Microsoft [Електронний ресурс]. - Режим доступу: http://msdn.microsoft.com/ru-ru/library/ms783323(en-us,VS.85).aspx.

Стаття над1йшла до редакцп 24.06.2014

i Надоели баннеры? Вы всегда можете отключить рекламу.