Библиотека сайта 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 и другими; поэтому в том случае, если вы знакомы с одним из этих проектов, вы обладаете необходимыми знаниями.
$ libtool --mode=link gcc `pkg-config --cflags --libs gstreamer-1.0` -o myprog myprog.c
$ 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?
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-*, должен быть оформлен в одном стиле. С кодом проще работать тогда, когда он последователен. Последовательность, разумеется, является нашей целью.
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.