Что за программа gstreamer

Данная статья ориентирована на начинающих программистов, которые не знакомы с GStreamer и хотят с ним познакомиться. Опытные разработчики навряд ли найдут для себя что-то новое в этой статье.

Преамбула

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

Введение

GStreamer — мощный фреймворк для построения мультимедийных приложений, который перенял идеи «video pipeline» от Oregon Graduate Institude, а так же что-то взял из DirectShow. Данный фреймворк позволяет создавать приложения различных уровней сложности, начиная от простого консольного плеера (можно воспроизвести какой-нибудь файл прям из терминала без написания какого-либо кода), заканчивая полноценными аудио/видео плеерами, мультимедийными редакторами и прочими приложениями.

C++ CoreHard Spring 2017: Пётр Мороз. Применение фреймворка GStreamer в системе видеонаблюдения



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

Архитектура

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

Практически все в GStreamer является элементом. Все, начиная от обычных источников потоков (filesrc, alsasrc, и т. п.), обработчиками потоков (демультиплексоры, декодеры, фильтры, и т. п.) и заканчивая конечными устройствами вывода (alsasink, fakesink, filesink, и т. п.).

Pads

Pad — это некая точка подключения элемента к другому элементу, если более просто — это входы и выходы элемента. Обычно они именуются «sink» — вход и «src» — выход.
Элементы всегда имеют как минимум один pad. Например, filesrc — элемент для чтения данных из файловой системы — имеет только один pad с названием «src», т. к. он не имеет входа, а может только превращать поток из файловой системы в внутреннее представление с которым уже будут работать другие элементы.

Так же и элемент alsasink, он имеет один pad с названием «sink», т. к. он может только принимать внутренний поток и выводить его на звуковую карту через alsa. Элементы из разряда «filters» (те, которые как-то трансформируют поток) имеют две и более точек подключения. Например, элемент volume имеет pad с именем «sink», на который поступает поток, внутри этого элемента трансформируется (изменяется громкость), и через pad с названием «src» уже продолжает свой путь. Так же имеются элементы где может быть несколько как входов, так и выходов.

Читайте также:
Handbrake что это за программа и нужна ли она

Video Streaming Made Awesome with GStreamer and Python — sunhacks 2020 Talk

Контейнеры

Внутри контейнеров элементы проводят свой жизненный цикл. Контейнер управляет рассылкой сообщений от элемента к элементу, управляет статусами элементов. Контейнеры делятся на два вида:

  • Bin
  • Pipeline

Pipeline является контейнером верхнего уровня, он управляет синхронизацией элементов, рассылает статусы. Например, если pipeline установить статус PAUSED, этот статус будет автоматически разослан всем элементам которые находятся внутри него. Pipeline является реализацией Bin.
Bin — простой контейнер, который управляет рассылкой сообщений от элемента к элементу которые находятся внутри него. Bin обычно используется для создания группы элементов которые должны совершать какое-либо действие. Например, decodebin — элемент для декодирования потока, который автоматически выбирает нужные элементы для обработки потока в зависимости от типа данных (vorbisdec, theoradec, и т. п.) снимая с разработчика дополнительную работу.
Также имеются законченные самодостаточные контейнеры, такие как playbin. Playbin же, по сути является полноценным плеером, который содержит в своем составе все нужные элементы для воспроизведения аудио и видео, но как вы понимаете, гибкости нет никакой…

Как же это работает

Рассмотрим примерную схему примитивного плеера. Самая простая схема плеера должна иметь примерно такой вид:

Рассмотрим что тут происходит. Элемент filesrc читает файл из файловой системы и отправляет поток в контейнер decodebin, который же в свою очередь декодирует поток в внутреннее представление, и в последствии отправляет поток в элемент alsasink, который же, отправляет аудио-поток на звуковую карту. Для проверки данной схемы достаточно выполнения команды

gst-launch-1.0 filesrc location=/path/to/file.ogg ! decodebin ! alsasink

И в случае если вы услышали свою мелодию, значит все отлично.

Примечания
  • Утилита gst-launch-1.0 поставляется в пакете gstreamer1.0-tools
  • В случае использования OSS/Jack/и пр. данная схема может не сработать. Поэтому, alsasink можно заменить на элемент autoaudiosink, который сам выберет нужный элемент для вывода аудио.

Что дальше?

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

Источник: habr.com

GStreamer для Windows

GStreamer скриншот № 1

Распространяемый компонент Microsoft Visual C++ для Visual Studio 2015, 2017 и 2019, поскольку в VS 2015 и более.

Adobe AIR — среда для выполнения, благодаря которой появляется возможность преобразовать.

Microsoft Visual C++ Redistributable Package — пакет, устанавливающий компоненты среды выполнения библиотек.

DLL Export Viewer — утилита, которая отображает в виде списка информацию о всех экспортированных функциях и виртуальных адресах памяти для выбранного DLL.

ShellExView — небольшая бесплатная утилита, которая отображает список всех компонентов.

Читайте также:
Phoenix программа что это

FreeReport — Компонент для построения отчетов, представляет собой сочетание дизайнера.

Отзывы о программе GStreamer

Отзывов о программе GStreamer 1.4.0 пока нет, можете добавить.

Источник: www.softportal.com

Как разработать приложения видеоконференцсвязи на основе Gstreamer для приставок RDK и Linux

Пандемия COVID-19 стала катализатором появления новых онлайн-сервисов. Например, Zoom стал настолько успешным, что в этом месяце обогнал IBM по капитализации. Программные инженеры Promwad были вдохновлены этим успехом и решили пойти еще дальше: как насчет реализации видеоконференцсвязи на Smart TV и STB? Тогда у пользователей такого приложения будет возможность не только общаться на работе, но и наслаждаться удаленными встречами с друзьями, болеть за футбольную команду, вместе смотреть фильм или заниматься спортом с тренером.

Почему-то у большинства операторов цифрового ТВ нет такой услуги, хотя с инженерной точки зрения все эти функции могут быть реализованы на приставках на базе Linux/Android и RDK.

Давайте проанализируем архитектуру Zoom-подобного приложения для видеоконференцсвязи для Smart TV и реализуем кодирование видеопотока с помощью мультимедийной платформы с открытым исходным кодом GStreamer. Мы собирали информацию для работы с этим фреймворком по частям, но оно того стоило.

Проблемы и архитектура программного обеспечения

При разработке архитектуры приложений для телевизионных приставок важно учитывать все возможные программные и аппаратные ограничения. Инженеры, создающие программы для настольных ПК, как правило, не сталкиваются с этими проблемами, в то время как для разработчиков встраиваемых систем это обычное дело.

Итак, что нас ждет на приставках:

  1. Ограниченные ресурсы процессора и самих устройств. В большинстве случаев устройства STB используют различные процессоры ARM, что подразумевает несколько ограничений и дополнительных задач, таких как необходимость использования аппаратного кодирования/декодирования для видеопотока. Итак, производительность — «узкое место».
  2. Разные архитектуры в приставках разных производителей. Некоторые из них основаны на Android; другие используют дистрибутивы на основе RDK или Linux с их ограничениями и нюансами. Поэтому на старте процесса разработки лучше выбрать наиболее распространенные и кроссплатформенные решения в разных программных модулях. Не говоря уже о поддержке десктоп-версии. А затем перейдем к частным случаям.
  3. Сетевые ограничения. Многие приставки работают как через Ethernet, так и через Wi-Fi. Сжатие и передача видео/аудиопотоков — еще одно «узкое место» в приложениях такого типа.
  4. Безопасность потоковой передачи и другие вопросы безопасности данных.
  5. Поддержка камер и микрофонов на встраиваемых платформах.

Теперь мы можем кластеризовать саму архитектуру. Наше приложение для видеоконференцсвязи для приставок будет состоять из нескольких крупных компонентов и модулей:

  • Захват видеопотока
  • Захват аудиопотока
  • Сетевой модуль
  • Модуль кодирования видео / аудиопотока
  • Модуль декодирования видео / аудиопотока
  • Отображение видеоконференции на экране
  • Вывод звука
  • Цветовые преобразования
  • Несколько других второстепенных компонентов

В упрощенном виде архитектуру можно изобразить следующим образом:

Читайте также:
Wormhole что за программа

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

Кодирование и декодирование аудио/видеопотока

Преимущества GStreamer для видеоконференцсвязи

Как мы уже отмечали, потоковое видео — одно из «узких мест». Предположим, у вас есть камера, которая выводит кадры со скоростью 30 кадров в секунду при небольшом разрешении 640 × 480. В сумме получается в RGB24: 640 * 480 * 3 * 30 = 27 648 000 байт в секунду, то есть более 26 мегабайт в секунду, что не работает по очевидным причинам, в частности, по пропускной способности сети.

Одно из решений — реализовать кодирование видео с помощью какой-нибудь библиотеки. Как можно догадаться из названия обзора, наш выбор пал на фреймворк GStreamer. Почему именно эта библиотека? Вот некоторые из его преимуществ перед другими решениями:

  1. Хорошее кроссплатформенное решение с отличной поддержкой Linux и Android.
  2. В RDK Gstreamer — это стандарт кодирования/декодирования, включенный в дистрибутив по умолчанию.
  3. Он поддерживает широкий спектр модулей, фильтров и кодеков. Например, FFmpeg, который можно использовать для тех же целей, является одним из модулей GStreamer.
  4. Легко построить конвейер. Легко создать цепочку кодирования/декодирования, а конвейерный подход позволяет плавно заменять кодеки, фильтры и т. д. без необходимости переписывать код.
  5. C/C++ API включен.
  6. Поддержка аппаратных кодеров/декодеров, в частности OpenMAX API — важная вещь для работы с приставками.

Изучение GStreamer и конвейеров

Прежде чем переходить к обзору кода, давайте посмотрим, что мы можем без этого сделать. GStreamer включает полезные утилиты для работы, в частности:

  • gst-inspect-1.0 позволит вам увидеть список доступных кодеков и модулей, чтобы вы могли сразу увидеть, что с ним делать, и выбрать набор фильтров и кодеков.
  • gst-launch-1.0 позволяет запускать любой конвейер.

GStreamer использует схему декодирования, при которой поток последовательно проходит через различные компоненты, от источника к выходу приемника. Вы можете выбрать что угодно в качестве источника: файл, устройство, выход (приемник), также может быть файл, экран, сетевые выходы и протоколы (например, RTP).

Классический пример воспроизведения файла mp4:

gst — launch — 1.0 filesrc location = file . mp4 ! qtdemux ! h264parse ! avdec_h264 ! videoconvert ! autovideosink

Вход принимает файл mp4, который проходит через демультиплексор mp4 — qtdemux, затем через синтаксический анализатор h264, затем через декодер, конвертер и, наконец, вывод.

Вы можете заменить autovideosink на filesink с параметром файла и вывести декодированный поток непосредственно в файл.

Программирование приложения с помощью GStreamer C/C ++ API. Попробуем расшифровать.

Теперь, когда мы знаем, как использовать gst-launch-1.0, мы делаем то же самое в нашем приложении. Принцип остается прежним: мы строим конвейер декодирования, но теперь мы используем библиотеку GStreamer и glib-events.

Рейтинг
( Пока оценок нет )
Загрузка ...
EFT-Soft.ru