GStreamer – это фреймворк для разработчиков, занимающихся мультимедийными приложениями. Этот фреймворк помогает создавать мультимедийные приложения и конвейеры для обработки аудио и видео.
Итак, если вы хотите попробовать, то в этой статье мы рассмотрим шаги по установке GStreamer на системы Ubuntu.
Примечание: Мы написали эту статью на Ubuntu 22.04, однако и для 20.04 будет то же самое, но версия GStreamer в системном репозитории по умолчанию будет другой.
Шаг 1: Обновление системных пакетов
В командном терминале запустите команду system update, чтобы установить новые доступные обновления пакетов. Также необходимо восстановить кэш пакетов APT, чтобы получить информацию о новых версиях пакетов, для этого также подойдет данная команда.
sudo apt update && sudo apt upgrade
Шаг 2: Установите GStreamer на Ubuntu
GStreamer может быть легко установлен на Ubuntu Linux без добавления каких-либо третьих репозиториев с помощью менеджера пакетов APT. Мы можем установить не только основной пакет, но и необходимые компоненты GStreamer, включая инструменты, базовые плагины, хорошие плагины, плохие плагины и уродливые плагины.
Вот команда, которую нужно выполнить:
apt-get install libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev libgstreamer-plugins-bad1.0-dev gstreamer1.0-plugins-base gstreamer1.0-plugins-good gstreamer1.0-plugins-bad gstreamer1.0-plugins-ugly gstreamer1.0-libav gstreamer1.0-tools gstreamer1.0-x gstreamer1.0-alsa gstreamer1.0-gl gstreamer1.0-gtk3 gstreamer1.0-qt5 gstreamer1.0-pulseaudio
Шаг 3: Проверьте версию
После завершения установки мы можем проверить, правильно ли установлен GStreamer или нет. Для этого воспользуйтесь приведенной командой.
gst-inspect-1.0 --version
Если в выводе вы увидите информацию о версии, это означает, что GStreamer успешно установлен.
Шаг 4: Пример кода GStreamer
Рассмотрим пример, в котором мы будем использовать конвейер GStreamer в Python с помощью модуля Gst.
Создайте пустой файл с расширением Python:
nano video.py
Теперь добавьте следующий код:
import gi
gi.require_version('Gst', '1.0')
from gi.repository import Gst
def main():
# Initialize GStreamer
Gst.init(None)
# Create a pipeline
pipeline = Gst.parse_launch("videotestsrc ! autovideosink")
# Start the pipeline
pipeline.set_state(Gst.State.PLAYING)
# Wait for EOS (End-of-Stream) or error
bus = pipeline.get_bus()
msg = bus.timed_pop_filtered(Gst.CLOCK_TIME_NONE, Gst.MessageType.ERROR | Gst.MessageType.EOS)
# Stop the pipeline
pipeline.set_state(Gst.State.NULL)
if __name__ == '__main__':
main()
Сохраните файл, нажав кнопку Ctlr+X , а затем введите Y после этого нажмите кнопку Введите клавиша.
После этого запустите файл:
python3 video.py
Если все сделано правильно, вы увидите окно с тестовым шаблоном видео, как показано на данном скриншоте:
В приведенном выше примере простой конвейер GStreamer генерирует тестовый видеошаблон (videotestsrc) и отображает его в окне (autovideosink).
Вот объяснение кода, который мы использовали для выполнения этого примера:
- Сначала импортируйте необходимые модули из
gi.repository
и инициализируйте модуль Gst. - Сайт
main()
определяется функция, содержащая наш код GStreamer. - Внутри
main()
, используется для инициализации GStreamer с помощьюGst.init(None)
. - Мы создаем трубопровод с помощью
Gst.parse_launch("videotestsrc ! autovideosink")
. Этот конвейер состоит из элемента источника видео (videotestsrc
) и элемента поглощения видео (autovideosink
). - Конвейер начнет работу с установки своего состояния в Gst.State.PLAYING. После этого мы ждем, пока конвейер не достигнет конца потока (EOS) или не столкнется с ошибкой, используя шину сообщений. В то время как
timed_pop_filtered()
метод позволяет блокировать выполнение до тех пор, пока не будет получено сообщение определенного типа. - Как только конвейер завершит работу или столкнется с ошибкой, мы устанавливаем его состояние в
Gst.State.NULL
, чтобы остановить его.