Рейтинг@Mail.ru

Наши друзья и партнеры

UnixForum
купить дешевый 
компьютер родом из Dhgate.com




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

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

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

Глава 13. Интерфейсы

Из раздела под названием "Использование элемента как объекта типа GObject" вы узнали о том, как использовать свойства объектной модели GObject в качестве простого способа взаимодействия между приложениями и элементами. Этот метод вполне пригоден для выполнения простых и очевидных настроек, но не подходит для реализации чего-либо более запутанного, чем функция для получения и установки значения. В более сложных случаях фреймворк GStreamer использует интерфейсы, основанные на типе GTypeInterface объектной модели GObject.

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

13.1. Интерфейс URI

Во всех предыдущих примерах мы использовали исключительно локальные файлы посредством элемента "filesrc". Очевидно, что фреймворк GStreamer поддерживает гораздо большее количество элементов для ввода данных. Однако, не хотелось бы чтобы приложение обрабатывало информацию об особенностях реализации каждого из элементов, такую, как имена элементов для определенных сетевых источников мультимедийных потоков, и.т.д. Исходя из этих соображений, был реализован интерфейс URI, который может использоваться с целью получения элемента для ввода данных, поддерживающего определенный тип идентификатора URI. Не существует строгих правил записи идентификаторов URI, но в общем случае мы следуем соглашениям, используемым в других программных продуктах. Например, в том случае, если у вас установлены все необходимые плагины, фреймворк GStreamer будет поддерживать следующие идентификаторы URI: "file:///<путь>/<файл>", "http://<узел>/<путь>/<файл>", "mms://<узел>/<путь>/<файл>" и.т.д.

Для того, чтобы получить объект элемента для ввода или вывода данных, поддерживающего определенный идентификатор URI, следует использовать функцию gst_element_make_from_uri () с указанием идентификатора типа URI в форме константы GST_URI_SRC в случае получения объекта элемента для ввода данных или GST_URI_SINK в случае получения объекта элемента для вывода данных.

Вы можете преобразовать имена файлов в идентификаторы URI и наоборот с помощью функций библиотеки GLib g_filename_to_uri () и g_uri_to_filename ().

13.2. Интерфейс цветового баланса

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

Интерфейс цветового баланса реализован несколькими плагинами, включая плагин с реализацией элемента для вывода изображения посредством видеооверлеея xv "xvimagesink" и плагины с реализациями элементов для работы с подсистемой Video4Linux2.

13.3. Интерфейс видеооверлея

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

Описанный интерфейс реализован, кроме прочих, элементами для для работы с подсистемой Video4Linux2, а также элементами для вывода изображения с помощью видеооверлеев "ximagesink", "xvimagesink" и "sdlvideosink".


Следующий раздел : Таймеры и синхронизация в фреймворке GStreamer

Если вам понравилась статья, поделитесь ею с друзьями: