Знайомство з gstreamer введення

Знайомство з gstreamer введення

Дисклеймер

Багато напевно чули, що є така річ як GStreamer, або ж бачили як Ubuntu і їй подібні дистрибутиви пропонують встановити різні пакети, в назві яких міститься «gstreamer» при першій спробі відтворити mp3 або який-небудь інший файл з «не свободних» форматом мультимедійних файлів . Так ось, мова піде саме про цю бібліотеці.

GStreamer має плагін архітектуру, і в стандартному постачанні має дуже великий набір плагінів які можуть вирішити 99% потреб всіх розробників мультимедійного ПО.

архітектура

У GStreamer є кілька основних компонентів:

  • елементи
  • Pads
  • Контейнери bin і pipeline

А тепер детальніше:

Знайомство з gstreamer введення

Практично всі в GStreamer є елементом. Все, починаючи від звичайних джерел потоків (filesrc, alsasrc, і т. П.), Обработчиками потоків (демультіплексори, декодери, фільтри, і т. П.) І закінчуючи кінцевими пристроями виведення (alsasink, fakesink, filesink, і т. П .).

Знайомство з gstreamer введення

Pad - це якась точка підключення елемента до іншого елементу, якщо простіше - це входи і виходи елемента. Зазвичай вони іменуються «sink» - вхід і «src» - вихід.
Елементи завжди мають як мінімум один pad. Наприклад, filesrc - елемент для читання даних з файлової системи - має тільки один pad з назвою «src», т. К. Він не має входу, а може тільки перетворювати потік з файлової системи в внутрішнєподання з яким вже будуть працювати інші елементи. Так само і елемент alsasink, він має один pad з назвою «sink», т. К. Він може тільки приймати внутрішній потік і виводити його на звукову карту через alsa. Елементи з розряду «filters» (ті, які якось трансформують потік) мають дві і більше точок підключення. Наприклад, елемент volume має pad з ім'ям «sink», на який надходить потік, всередині цього елемента трансформується (змінюється гучність), і через pad з назвою «src» вже продовжує свій шлях. Так само є елементи де може бути кілька як входів, так і виходів.

контейнери

Знайомство з gstreamer введення
Всередині контейнерів елементи проводять свій життєвий цикл. Контейнер управляє розсилкою повідомлень від елемента до елементу, управляє статусами елементів. Контейнери поділяються на два види:

Як же це працює

Розглянемо приблизну схему примітивного плеєра. Найпростіша схема плеєра повинна мати приблизно такий вигляд:

Знайомство з gstreamer введення

Розглянемо що тут відбувається. Елемент filesrc Новомосковскет файл з файлової системи і відправляє потік в контейнер decodebin, який же в свою чергу декодує потік в внутрішнєподання, і надалі відправляє потік в елемент alsasink, який же, відправляє аудіо-потік на звукову карту. Для перевірки даної схеми досить виконання команди

І в разі якщо ви почули свою мелодію, значить все відмінно.

Примітки
  • Утиліта gst-launch-1.0 поставляється в пакеті gstreamer1.0-tools
  • У разі використання OSS / Jack / тощо. Дана схема може не спрацювати. Тому, alsasink можна замінити на елемент autoaudiosink, який сам вибере потрібний елемент для виведення аудіо.

Що далі?

Надалі я планую написати серію статей, в яких будуть розглянуті різні елементи і їх можливості, а також, будуть наведені приклади коду реального використання можливостей GStreamer.

Схожі статті