Наши партнеры

UnixForum





Библиотека сайта rus-linux.net

Фреймворк GStreamer. Руководство разработчика приложений. Принципы проектирования фреймворка

Оригинал: GStreamer Application Development Manual
Авторы: Wim Taymans, Steve Baker, Andy Wingo, Ronald S. Bultje, Stefan Kost
Дата публикации: 21 мая 2013 г.
Перевод: А.Панин
Дата перевода: 18 июня 2014 г.

Глава 2. Принципы проектирования фреймворка

2.1. Понятный и мощный

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

2.2. Объектно-ориентированный

Фреймворк GStreamer использует объектную модель GObject, реализованную в рамках библиотеки GLib 2.0. Разработчик, знакомый с GLib 2.0 или GTK+, не будет испытывать дискомфорта при работе с GStreamer.

Также фреймворк GStreamer использует механизм сигналов и свойств объектов.

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

В плане методологии программирования фреймворк GStreamer аналогичен GTK+. Это утверждение справедливо для объектной модели, принципов владения объектами, механизма подсчета ссылок, и.т.д.

2.3. Расширяемый

Возможности всех объектов фреймворка GStreamer могут быть расширены благодаря методам наследования объектной модели GObject.

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

2.4. Позволяет использовать плагины при отсутствии исходного кода

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

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

2.5 Высокопроизводительный

Высокая производительность достигается благодаря:
  • Использованию механизма резервирования памяти GSlice из состава GLib.
  • Использованию чрезвычайно легковесных связей между плагинами. Данные могут передаваться по конвейеру с минимальными потерями производительности. При передаче данных между плагинами в типичном конвейере используются исключительно операции разыменования указателей.
  • Предоставлению механизма непосредственной работы с памятью целевого устройства. Например, плагин может осуществлять непосредственную запись данных в сегмент разделяемой памяти сервера оконной системы X. Содержимое буферов также может перенаправляться в произвольную область памяти, такую, как внутренний аппаратный буфер звуковой карты.
  • Механизмам подсчета ссылок и механизмам копирования при записи, которые позволяют минимизировать использование функции memcpy. Механизм работы с подбуферами позволяет эффективно разделять буферы на обрабатываемые фрагменты.
  • Разделению программных потоков для обработки потоков мультимедийных данных с управлением на уровне ядра операционной системы.
  • Использованию аппаратного ускорения благодаря наличию специализированных плагинов.
  • Использованию реестра плагинов с спецификациями плагинов таким образом, что загрузка плагинов может быть отложена до того момента, когда плагин на самом деле будет использован.

2.6. С четким разделением функций между ядром и плагинами

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

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

2.7. Предоставляет возможность проведения экспериментов с кодеками

Проект GStreamer также преследует цель создания простого фреймворка, с помощью которого разработчики кодеков смогут проводить эксперименты с различными алгоритмами, ускоряя таким образом разработку открытых и свободных мультимедийных кодеков, таких, как кодеки, разработанные организацией Xiph.Org Foundation (Theora и Vorbis).


Следующий раздел : Основные концепции.