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

UnixForum





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

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

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

Глава 10. Ваше первое приложение

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

10.1. Hello world

Мы будем создавать первое простое приложение, являющееся проигрывателем для аудиофайлов формата Ogg/Vorbis с интерфейсом командной строки. Для этого мы будем использовать стандартные компоненты фреймворка GStreamer. Проигрыватель будет читать файл, заданный с помощью параметра командной строки. Давайте начинать работу!

В Главе 4, "Инициализация библиотеки фреймворка GStreamer" мы узнали о том, что первой операцией, которую необходимо выполнить с помощью вашего приложения, является инициализация библиотеки фреймворка GStreamer, которая осуществляется путем вызова функции gst_init (). Также следует убедиться в том, что к исходному коду приложения подключен заголовочный файл gst/gst.h, который содержит необходимые объявления всех имен функций и объектов. Используйте директиву #include <gst/gst.h> для подключения этого файла.

После этого вы захотите создать различные элементы с помощью функции gst_element_factory_make (). Для реализации проигрывателя аудиофайлов формата Ogg/Vorbis нам потребуется элемент для ввода данных, который будет читать данные с диска. Фреймворк GStreamer включает элемент с описанными функциями и именем "filesrc". Далее, нам потребуются какие-либо элементы для разбора файла, а также его декодирования с целью получения раскодированного аудиопотока. Для этой цели в составе фреймворка GStreamer имеются два элемента: первый элемент позволяет осуществить разбор потока формата Ogg на элементарные потоки (аудио- и видеопотоки) и носит имя "oggdemux". Второй элемент является декодером аудиопотока формата Vorbis и, соответственно, назван "vorbisdec". Так как элемент "oggdemux" создает динамические точки соединения для каждого элементарного потока, вам придется устанавливать обработчик сигнала добавления точки соединения "pad-added" для элемента "oggdemux" таким же образом, как описано в разделе под названием "Динамические (или не постоянно доступные) точки соединения" для того, чтобы связать элемент демультиплексора потока формата Ogg с элементом декодера аудиопотока формата Vorbis. Наконец, нам также потребуется элемент для вывода аудиоданных, в качестве которого мы используем элемент с именем "autoaudiosink", который автоматически определит звуковое устройство.

Последняя операция, которую нам стоит выполнить, заключается в добавлении всех элементов в контейнерный элемент типа GstPipeline и ожидании завершения проигрывания всей композиции. Ранее мы узнали о том, как как добавлять элементы в контейнерный элемент в Главе 6, "Контейнеры", а также о состояниях элементов в разделе под названием "Состояния элементов". Кроме того, мы также установим обработчик сообщений конвейера для того, чтобы получать уведомления об ошибках и определять момент окончания потока.

А теперь давайте объединим все наши размышления в форме кода для того, чтобы получить наш первый проигрыватель аудиофайлов:

Мы создали завершенный конвейер. Теперь мы можем схематично изобразить его следующим образом:

Рисунок 10.1. Конвейер приложения "hello world"
Конвейер приложения

10.2. Компиляция файла helloworld.c и запуск приложения

Для компиляции примера "helloworld" следует использовать команду: cc -Wall helloworld.c -o helloworld $(pkg-config --cflags --libs gstreamer-1.0). Фреймворк GStreamer использует инструмент pkg-config для получения флагов компилятора и линковщика, необходимых для компиляции данного приложения.

В том случае, если вы используете нестандартную установку (т.е., вы самостоятельно скомпилировали исходный код и установили библиотеки фреймворка GStreamer вместо того, чтобы использовать предварительно собранные пакеты), убедитесь в том, что переменная окружения PKG_CONFIG_PATH указывает на корректную директорию ($libdir/pkgconfig).

В маловероятном случае использования не устанавливаемой версии фреймворка GStreamer (т.е., gst-uninstalled), вам придется использовать инструмент libtool для выполнения сборки программы helloworld с помощью аналогичной команды: libtool --mode=link gcc -Wall helloworld.c -o helloworld $(pkg-config --cflags --libs gstreamer-1.0).

Вы можете запустить приложение, собранное на основе кода из данного примера, воспользовавшись командой ./helloworld file.ogg. Замените file.ogg на имя файла формата Ogg/Vorbis с вашей любимой композицией.

10.3. Заключение

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

При рассмотрении примера должно быть ясно то, что мы можем достаточно просто заменить элемент с именем "filesrc" на какой-либо другой элемент, который будет принимать данные посредством сети или другой элемент ввода данных, который будет лучше интегрирован с вашим окружением рабочего стола. Вы также можете использовать другие декодеры и элементы разбора потоков/демультиплексоры для добавления поддержки мультимедийных потоков других типов. К тому же, вы можете использовать другой элемент вывода аудиопотока в том случае, если вы используете не Linux, а Mac OS X, Windows или FreeBSD, причем вместо него вы можете использовать элемент вывода данных для записи аудиопотоков в файлы на диске вместо их воспроизведения. Используя элемент для ввода данных, работающий с аудиокартой, вы можете даже захватывать аудиопоток вместо его проигрывания. Все эти примеры свидетельствуют о наличии возможности повторного использования элементов фреймворка GStreamer, которая является его значительным преимуществом.


Следующий раздел : Отслеживание позиции в перемещение в мультимедийном потоке.