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

UnixForum





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

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

Оригинал: GStreamer Plugin Writer's Guide
Авторы: Richard John Boulton, Erik Walthinsen, Steve Baker, Leif Johnson, Ronald S. Bultje, Stefan Kost, Tim-Philipp Muller, Wim Taymans
Дата публикации: 19 июля 2014 г.
Перевод: А.Панин
Дата перевода: 26 июля 2014 г.

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

Периодически у вас будет возникать желание протестировать разрабатываемый плагин в настолько ограниченном окружении, насколько это возможно. Утилита gst-launch-1.0 обычно является неплохим первым шагом в процессе тестирования плагина. Если вы не установили ваш плагин в директорию, в которой фреймворк GStreamer осуществляет поиск плагинов, вам придется установить путь к дополнительной директории плагинов. Следует либо установить в качестве значения переменной окружения GST_PLUGIN_PATH путь к директории, содержащей ваш плагин, либо использовать параметр командной строки утилиты --gst-plugin-path для передачи этого пути. В том случае, если вы создавали свой плагин на основе шаблона gst-plugin, параметры запуска утилиты будут аналогичны следующим: gst-launch-1.0 --gst-plugin-path=$HOME/gst-template/gst-plugin/src/.libs ТЕСТОВЫЙ_КОНВЕЙЕР. Однако, обычно для отладки плагина требуется больше возможностей, чем утилита gst-launch-1.0 может предоставить, а именно, требуются функции для осуществления перемещений в мультимедийном потоке, обработки событий, интерактивного взаимодействия и другие. Разработка вашего собственного небольшого тестового приложения является простейшим способом получения доступа к упомянутым функциям. В данной главе кратко описывается методика разработки такого приложения. Если же вас интересует подробное руководство по разработке приложений, вам следует обратиться к Руководству разработчика приложений на основе фреймворка GStreamer.

Для начала вам придется инициализировать главную библиотеку фреймворка GStreamer, вызвав функцию gst_init (). Альтернативным вариантом является вызов функции gst_init_get_option_group (), которая вернет указатель на структуру типа GOptionGroup. После этого вы сможете использовать интерфейс GOption для выполнения инициализации и на этом этапе инициализация фреймворка GStreamer будет завершена.

Вы можете создать элементы с помощью функции gst_element_factory_make (), первым аргументом которой является идентификатор типа элемента, который вы хотите создать, а вторым аргументом - имя элемента в свободной форме. В примере, размещенном в конце главы, используется простой конвейер из элемента для ввода данных из файла, декодера и элемента для вывода данных с помощью звуковой карты, но вы также можете использовать специфические элементы для отладки, если это необходимо. Например, элемент для передачи данных без изменения identity может быть помещен в центре конвейера для того, чтобы он функционировал как передатчик данных к приложению. Описанный подход может использоваться для выявления некорректных попыток передачи данных или проверки корректности самих данных в ходе тестирования вашего приложения. Также вы можете использовать элемент фиктивного вывода данных fakesink в конце конвейера для вывода ваших данных в поток стандартного вывода stdout (для того, чтобы активировать соответствующий режим работы элемента, установите логическое значение TRUE свойства dump). Наконец, вы можете использовать инструмент valgrind для выявления ошибок, допущенных при ручном управлении памятью.

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

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

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


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