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

UnixForum





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

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

Оригинал: GStreamer FAQ
Авторы: Wim Taymans, Steve Baker, Andy Wingo, Ronald S. Bultje, Stefan Kost
Дата публикации: 27 августа 2014 г.
Перевод: А.Панин
Дата перевода: 5 сентября 2014 г.

7. Разработка приложений на основе фреймворка GStreamer

Вопрос: Как компилировать приложения, которые используют функции фреймворка GStreamer?

Ответ: GStreamer использует утилиту pkg-config для упрощения процесса получения флагов для компиляции и связывания приложений. Утилита pkg-config уже используется такими проектами, как GTK+, GNOME, SDL и другими; поэтому в том случае, если вы знакомы с одним из этих проектов, вы обладаете необходимыми знаниями.

Если же вы не знакомы с методикой использования утилиты pkg-config для компиляции и связывания небольших приложений, код которых размещается в единственном файле, просто передайте аргументы --cflags и --libs утилите pkg-config. Например, это может быть сделано следующим образом:
$ libtool --mode=link gcc `pkg-config --cflags --libs gstreamer-1.0` -o myprog myprog.c
причем этих флагов будет достаточно для приложения, использующего исключительно фреймворк GStreamer. В том же случае, если (к примеру) ваше приложение также использует библиотеки GTK+2.0, вам следует использовать команду компиляции:
$ libtool --mode=link gcc `pkg-config --cflags --libs gstreamer-1.0 gtk+-2.0` -o myprog myprog.c

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

При работе над большими проектами вам придется интегрировать вызовы утилиты pkg-config в ваш файл сборки Makefile или интегрировать инструменты из пакета autoconf с использованием макроса pkg.m4 (задействовав переменную PKG_CONFIG_CHECK).

В: Как вести разработку приложения на основе неустановленной копии компонентов фреймворка GStreamer?

О: Имеется возможность разработки приложений и их компиляции с использованием неустановленной копии ядра фреймворка GStreamer и пакетов его плагинов gst-plugins-* (например, собранной на основе исходного кода, полученного из репозитория git). Это позволит вам разрабатывать приложение и тестировать его на совместимость с новейшей версией фреймворка GStreamer без необходимости ее установки в систему и без конфликтов с установленными в систему компонентами фреймворка GStreamer.

Простейший способ создания такой установки заключается в использовании новейшей версии сценария create-uninstalled-setup.sh.

В случае работы с данным сценарием будет использована новейшая версия исходного кода из ветви gst-uninstalled. После запуска сценария вы переместитесь в окружение, в котором по умолчанию будут использоваться неустановленные инструменты и плагины. Также утилита pkg-config будет определять неустановленные копии программных компонентов перед определением любых установленных копий (и отдавать предпочтение первым).

Несколько неустановленных копий компонентов фреймворка могут использоваться параллельно. Обратитесь к ветви gst-uninstalled для ознакомления с технологией определения используемого окружения.

В: Как следует использовать систему GConf для получения системных настроек?

О: При разработке приложений для окружения рабочего стола GNOME хорошей идеей является использование системы GConf для получения заданных пользователем способов вывода аудио- и видеоданных. Вы можете решить описанную задачу, используя элементы 'gconfaudiosink' и 'gconfvideosink' для вывода аудио- и видеоданных. Они выполнят за вас все операции, связанные с системой GConf и автоматически задействуют элементы для вывода аудио- и видеоданных, установленные пользователем. В том случае, если вы используете элемент gconfaudiosink, ваше приложение должно устанавливать значение свойства 'profile'.

В: Как производить отладку забавных сценариев оболочки, генерируемых утилитой libtool?

О: При связывании приложения с неустановленной копией компонентов фреймворка GStreamer с использованием утилиты libtool происходит генерация забавных сценариев для модификации ваших путей поиска разделяемых библиотек и последующего запуска вашего приложения. К примеру, для отладки приложения gst-launch вы можете попробовать использовать команду:
libtool --mode=execute gdb /путь/к/gst-launch

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

В: Почему интенсивность отправки писем в список рассылки gstreamer-devel настолько мала?

О: Нашей главной ареной для координации действий и организации дискуссий является канал в сети IRC, а не список рассылки. Вы можете найти нас на канале #gstreamer сервера irc.freenode.net. При необходимости обсуждения более масштабных вопросов или ознакомления с мнением большего количества людей отправка электронного письма в список рассылки gstreamer-devel также не является плохой идеей.

В: Какую схему версий использует фреймворк GStreamer?

О: Для публичных выпусков фреймворка GStreamer используется стандартная схема версий: ВЕРСИЯ.ПОДВЕРСИЯ.МИКРОВЕРСИЯ. В том случае, если выпуск состоит по большей части из исправлений ошибок или последовательных изменений, увеличивается номер МИКРОВЕРСИИ. В том случае, если выпуск содержит значительные изменения, увеличивается номер ПОДВЕРСИИ. В том же случае, если внесенные изменения удивляют нас самих, мы можем увеличить даже номер ВЕРСИИ. Хотя вам и не следует ожидать этого.

В течение цикла разработки фреймворк GStreamer также использует четвертую или НАНОВЕРСИЮ. В том случае, если номер этой версии равен 1, данная версия исходного кода является разрабатываемой версией из репозитория git. Любой архив или пакет с номером НАНОВЕРСИИ, равным 1, создается на основе кода из репозитория git и, следовательно, его поддержка не осуществляется. К тому же, в том случае, если вы получили этот архив или пакет не от участников команды разработчиков проекта GStreamer, не питайте иллюзий о том, что он будет выполнять все необходимые задачи.

В том случае, если номер НАНОВЕРСИИ равен или больше 2, данная версия исходного кода является официальной версией исходного кода для предварительного выпуска, созданной в процессе подготовки полноценного выпуска. Ваша помощь, заключающаяся в тестировании компонентов фреймворка, созданных на основе исходного кода из этих архивов и пакетов, очень ценна.

В: Какой стиль оформления кода используется в рамках проекта GStreamer?

О: Код ядра фреймворка и практических всех плагинов оформлен в соответствии с рекомендациями, изложенными в книге K&R с отступами длиной в два знака. Просто оформляйте свой код по аналогии с существующим и все будет в порядке.

Код отдельных плагинов из пакета gst-plugins-* или код плагинов, которые вы планируете предоставить для проверки и последующего включения в состав одного из модулей gst-plugins-*, должен быть оформлен в одном стиле. С кодом проще работать тогда, когда он последователен. Последовательность, разумеется, является нашей целью.

Вам следует просто обрабатывать ваш код (исключительно файлы с расширением *.c, а не все файлы, включая заголовочные) с помощью утилиты indent
indent \
  --braces-on-if-line \
  --case-brace-indentation0 \
  --case-indentation2 \
  --braces-after-struct-decl-line \
  --line-length80 \
  --no-tabs \
  --cuddle-else \
  --dont-line-up-parentheses \
  --continuation-indentation4 \
  --honour-newlines \
  --tab-size8 \
  --indent-level2

перед отправкой патча. (В данном случае используется утилита indent от проекта GNU). Также в дереве исходного кода ядра фреймворка GStreamer в директории tools присутствует сценарий gst-indent, который является оберткой для упомянутой утилиты и использует новейшую комбинацию аргументов. Простейшим способом корректной расстановки отступов, вероятно, является разработка исходного кода с использованием копии существующего исходного кода из репозитория git. Локальная функция, вызываемая перед добавлением изменений в локальный репозиторий, будет заботиться о корректном использовании отступов. Мы требуем использования отступов исключительно в файлах кода, при этом в заголовочных файлах отступы могут добавляться вручную для лучшей читаемости (при этом для создания отступов используйте, пожалуйста, пробелы, а не символы табуляции, даже при разработке заголовочных файлов).

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

Патчи должны создаваться на основе кода из ветви master репозитория исходного кода git или новейшего выпуска исходного кода и должны использовать формат 'унифицированного контекста' (для их создания используйте команду diff -u -p). Они должны прикрепляться к сообщению об ошибке (или предложению о реализации возможности) в рамках системы отслеживания ошибок bugzilla, а не отправляться в список рассылки. Также следует обратиться к странице 'SubmittingPatches' wiki проекта GStreamer.

В: Я перевел один из файлов .po модуля на новый язык. Что мне сделать для того, чтобы его включили в комплект поставки фреймворка GStreamer?

О: Управление всеми переводами, использующимися в рамках проекта GStreamer, осуществляется в рамках проекта Translation Project (http://translationproject.org). На странице http://translationproject.org/html/translators.html приведены инструкции, описывающие процедуру вхождения в команду переводчиков проекта Translation Project и отправки новых переводов.

Новые переводы, предоставляемые переводчиками проекта Translation Project, периодически добавляются разработчиками в репозиторий git путем выполнения команды 'make download-po' для различных модулей.


Следующий раздел : Правовые аспекты использования фреймворка GStreamer.