Знайомство з gstreamer введення
Дисклеймер
Багато напевно чули, що є така річ як GStreamer, або ж бачили як Ubuntu і їй подібні дистрибутиви пропонують встановити різні пакети, в назві яких міститься «gstreamer» при першій спробі відтворити mp3 або який-небудь інший файл з «не свободних» форматом мультимедійних файлів . Так ось, мова піде саме про цю бібліотеці.
GStreamer має плагін архітектуру, і в стандартному постачанні має дуже великий набір плагінів які можуть вирішити 99% потреб всіх розробників мультимедійного ПО.
архітектура
У GStreamer є кілька основних компонентів:
- елементи
- Pads
- Контейнери bin і pipeline
А тепер детальніше:
Практично всі в GStreamer є елементом. Все, починаючи від звичайних джерел потоків (filesrc, alsasrc, і т. П.), Обработчиками потоків (демультіплексори, декодери, фільтри, і т. П.) І закінчуючи кінцевими пристроями виведення (alsasink, fakesink, filesink, і т. П .).
Pad - це якась точка підключення елемента до іншого елементу, якщо простіше - це входи і виходи елемента. Зазвичай вони іменуються «sink» - вхід і «src» - вихід.
Елементи завжди мають як мінімум один pad. Наприклад, filesrc - елемент для читання даних з файлової системи - має тільки один pad з назвою «src», т. К. Він не має входу, а може тільки перетворювати потік з файлової системи в внутрішнєподання з яким вже будуть працювати інші елементи. Так само і елемент alsasink, він має один pad з назвою «sink», т. К. Він може тільки приймати внутрішній потік і виводити його на звукову карту через alsa. Елементи з розряду «filters» (ті, які якось трансформують потік) мають дві і більше точок підключення. Наприклад, елемент volume має pad з ім'ям «sink», на який надходить потік, всередині цього елемента трансформується (змінюється гучність), і через pad з назвою «src» вже продовжує свій шлях. Так само є елементи де може бути кілька як входів, так і виходів.
контейнери
Всередині контейнерів елементи проводять свій життєвий цикл. Контейнер управляє розсилкою повідомлень від елемента до елементу, управляє статусами елементів. Контейнери поділяються на два види:Як же це працює
Розглянемо приблизну схему примітивного плеєра. Найпростіша схема плеєра повинна мати приблизно такий вигляд:
Розглянемо що тут відбувається. Елемент filesrc Новомосковскет файл з файлової системи і відправляє потік в контейнер decodebin, який же в свою чергу декодує потік в внутрішнєподання, і надалі відправляє потік в елемент alsasink, який же, відправляє аудіо-потік на звукову карту. Для перевірки даної схеми досить виконання команди
І в разі якщо ви почули свою мелодію, значить все відмінно.
Примітки
- Утиліта gst-launch-1.0 поставляється в пакеті gstreamer1.0-tools
- У разі використання OSS / Jack / тощо. Дана схема може не спрацювати. Тому, alsasink можна замінити на елемент autoaudiosink, який сам вибере потрібний елемент для виведення аудіо.
Що далі?
Надалі я планую написати серію статей, в яких будуть розглянуті різні елементи і їх можливості, а також, будуть наведені приклади коду реального використання можливостей GStreamer.