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

UnixForum





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

Фреймворк GStreamer. Часто задаваемые вопросы. Диагностика фреймворка GStreamer

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

5. Диагностика фреймворка GStreamer

Вопрос: Одно из приложений сообщает мне о том, что в системе не установлен плагин. Каковы мои действия?

Ответ: Ну, начните с проверки того, отсутствует ли плагин на самом деле:
$ gst-inspect-1.0 (плагин)

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

Если вы не уверены в причине невозможности осуществления доступа к плагину, высока вероятность того, что плагин действительно не установлен. Вы должны установить плагин и выполнить команду gst-register для его регистрации. Способ установки плагина зависит от вашего дистрибутива.
  • В том случае, если вы используете компоненты фреймворка GStreamer, установленные из пакетов для вашего дистрибутива, вы должны выяснить, какие дополнительные пакеты доступны в вашем дистрибутиве и определить, содержит ли какой-либо из доступных пакетов необходимый вам плагин.
  • В том случае, если вы используете компоненты фреймворка GStreamer, собранные из исходного кода, высока вероятность того, что плагин не был собран из-за отсутствия сторонней библиотеки. После запуска сценария конфигурации пакета исходного кода configure должен выводиться список плагинов, которые будут впоследствии собраны. Вы можете повторно выполнить сценарий конфигурации пакета исходного кода для того, чтобы проверить, действительно ли плагин находится в этом списке. В том случае, если плагина в списке не оказывается, существует весомая причина, по которой его сборка отменяется. Наиболее вероятно, что эта причина заключается в отсутствии необходимой для функционирования плагина сторонней библиотеки. Обратитесь к файлу README из пакета исходного кода gst-plugins для получения информации о том, какая библиотека требуется для сборки плагина. Также не забудьте о том, что необходимо повторно выполнить сценарий конфигурации пакета исходного кода после установки необходимой сторонней библиотеки!
  • В том случае, если вы используете компоненты фреймворка GStreamer, которые собранны из исходного кода, полученного из репозитория git, следует руководствоваться той же логикой, что и при работе с пакетом исходного кода. Вам придется определить причины, по которым сборка плагина была отменена. Обратитесь к файлу журнала конфигурации с именем config.log для установления неочевидной причины отмены сборки плагина, если вы уверены в том, что необходимая сторонняя библиотека установлена должным образом.

В: Я столкнулся с ошибкой, аналогичной следующей: "(process:26626): GLib-GObject-WARNING **: specified instance size for type `DVDReadSrc' is smaller than the parent type's `GstElement' instance size". В чем проблема?

О: В том случае, если вы используете неустанавливаемую копию компонентов фреймворка GStreamer, собранную на основе исходного кода из репозитория git, эта ошибка может говорить о том, что были произведены изменения в ядре фреймворка, требующие повторной компиляции всех плагинов. Скомпилируйте плагины с помощью команды "make clean && make".

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

Учтите, что мы настоятельно рекомендуем использовать пакетные менеджеры Debian или RPM, так как вы не столкнетесь с подобными проблемами в случае использования предоставляемых дистрибутивом бинарных пакетов.

В: Приложение на основе фреймворка GStreamer прекратило работу из-за ошибки сегментирования. Что я могу сделать в этом случае?

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

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

  1. Запустить приложение под управлением отладчика gdb с помощью команды:
    $ gdb (приложение)
    

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

  2. Передать приложению аргументы командной строки с помощью команды:
    set args (аргументы приложения)
    

    в рамках интерактивной сессии отладчика (gdb)

  3. Ввести команду запуска приложения "run" в рамках интерактивной сессии отладчика (gdb) и ожидать завершения приложения из-за ошибки сегментирования. При этом само приложение будет работать ощутимо медленнее.

  4. После возникновения ошибки сегментирования ввести команду "bt" для получения обратной трассировки стека. В результате будут выведены данные состояния стека вызовов функций, указывающие путь исполнения кода от функции main () до текущей позиции в коде.

  5. В том случае, если приложение, отладку которого вы пытаетесь осуществить, содержит программные потоки, будет также полезно использовать команду:
    info threads
    

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

  6. В том случае, если вы не можете или не хотите решать проблему самостоятельно, следует скопировать всю эту информацию и включить ее в состав вашего сообщения об ошибке.

В: Моя система не может выполнить команду gst-register.

О: Начиная с версии GStreamer-0.10 соответствующая утилита больше не требуется. Реестр будет повторно создаваться автоматически. Если же вы подозреваете, что реестр поврежден, просто удалите файлы registry.*.xml из директории $HOME/.gstreamer-1.X/ и выполните команду:
$ gst-inspect-1.0

для повторного создания реестра.


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