stringtranslate.com

GStreamer

GStreamer — это конвейерная мультимедийная структура , которая связывает воедино широкий спектр систем обработки мультимедиа для выполнения сложных рабочих процессов. Например, GStreamer можно использовать для создания системы, которая считывает файлы в одном формате, обрабатывает их и экспортирует в другом. Форматы и процессы можно изменять в режиме plug and play.

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

Он предназначен для работы на различных операционных системах, например, BSD , OpenSolaris , Linux , Android , macOS , iOS , Windows , OS/400 .

GStreamer — это бесплатное программное обеспечение с открытым исходным кодом, подпадающее под условия LGPL-2.1 или более поздней версии [4] и размещаемое на freedesktop.org .

Распространение и принятие

Среда рабочего стола GNOME , активно использующая GStreamer, включила GStreamer с версии GNOME 2.2 и поощряет использование его приложениями GNOME и GTK . Другие проекты также используют или поддерживают его, например, медиа-фреймворк Phonon и медиа-плеер Songbird . Он также используется в браузерном движке WebKit . [5]

GStreamer также работает во встраиваемых устройствах, таких как Jolla Phone , Palm Pre , [6] Tizen и интернет-планшетах Nokia 770 , N800 , N810 , N900 и N9 , работающих под управлением операционной системы Maemo .

Помимо релизов исходного кода, проект GStreamer предоставляет бинарные сборки для Android, iOS, OSX и Windows. [7]

Лаборатория LIGO использует GStreamer для моделирования и анализа данных гравитационных волн. Интерфейс GStreamer называется GstLAL. [8]

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

Обзор
Ядро GStreamer с тремя различными типами плагинов
GStreamer — это конвейер .

GStreamer написан на языке программирования C с системой типов, основанной на GObject и объектной модели GLib 2.0.

Языковые привязки

Библиотека, написанная на одном языке программирования, может использоваться на другом языке, если написаны привязки ; GStreamer имеет ряд привязок для различных языков, таких как Go , Python , Rust , Vala , C++ , Perl , GNU Guile , C# и Ruby .

Обзор

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

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

Диаграмма справа может служить примером воспроизведения файла MP3 с использованием GStreamer. Источник файла считывает файл MP3 с жесткого диска компьютера и отправляет его в декодер MP3. Декодер декодирует данные файла и преобразует их в сэмплы PCM , которые затем передаются в звуковой драйвер. Звуковой драйвер отправляет звуковые сэмплы PCM на динамики компьютера.

Плагины

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

Плагины могут быть установлены полуавтоматически, когда они впервые понадобятся. Для этой цели дистрибутивы могут зарегистрировать бэкэнд, который преобразует описания функций в имена пакетов.

Начиная с версии 0.9, плагины сгруппированы в три набора (названные в честь фильма « Хороший, плохой, злой »). [10]

Отдельные дистрибутивы могут дополнительно подразделять эти плагины: например, Ubuntu группирует «плохие» и «уродливые» наборы в компоненты «Вселенная» или «Мультивселенная» .

Кроме того, существует плагин GStreamer FFmpeg (называемый gst-libav по историческим причинам [14] ), который расширяет количество поддерживаемых медиаформатов.

Ускорение видео

Благодаря специальным плагинам, предоставляемым Texas Instruments, GStreamer использует аппаратное ускорение, предоставляемое, например, Texas Instruments DaVinci .

Существуют различные блоки SIP , которые могут выполнять вычисления для декодирования определенных видеокодеков, таких как PureVideo , UVD , QuickSync Video , TI Ducati и др. Они должны поддерживаться драйвером устройства , который, в свою очередь, предоставляет один или несколько интерфейсов , таких как VDPAU , VAAPI , Distributed Codec Engine или DXVA, для программного обеспечения конечного пользователя, такого как MPlayer, для доступа к этому оборудованию и передачи ему вычислений.

Форматы медиа

Плагины Good, Bad и Ugly GStreamer, упомянутые ранее, наряду с элементами обработки/фильтрами всех видов, поддерживают широкий спектр форматов файлов, протоколов и кодеков мультимедиа. В дополнение к ним, поддержка более сотни форматов сжатия (включая MPEG-1 , MPEG-2 , MPEG-4 , H.261 , H.263 , H.264 , RealVideo , MP3 , WMV и т. д. [20] ) прозрачно предоставляется через плагин gst-libav .

История и развитие

Ранние дни

Эрик Валтинсен основал проект GStreamer в 1999 году. Многие из его основных идей дизайна пришли из исследовательского проекта в Институте аспирантуры Орегона . [21] Вскоре после этого к проекту присоединился Вим Тайманс и значительно расширил многие аспекты системы. С тех пор внесли свой вклад многие другие разработчики программного обеспечения.

Первым крупным релизом был 0.1.0, о котором было объявлено 11 января 2001 года. [1] Вскоре после этого GStreamer нашёл своего первого коммерческого спонсора. К концу января 2001 года они наняли Эрика Валтинсена для разработки методов встраивания GStreamer в меньшие устройства ( класса сотовых телефонов ). Другой сотрудник RidgeRun, Брок А. Фрейзер, разработал логотип GStreamer. Позже RidgeRun столкнулся с финансовыми трудностями и был вынужден уволить своих сотрудников, включая Эрика Валтинсена. Прогресс GStreamer в основном не пострадал.

Проект выпустил серию крупных релизов: 0.2.0 вышел в июле 2001 года, 0.4.0 — в сентябре 2002 года, а 0.8.0 — в марте 2004 года. В этот период проект также изменил свою стратегию версий, и хотя первые релизы были просто новыми версиями, позже средняя цифра стала обозначать серию релизов. Это означало, что проект выпустил серию релизов 0.6.x и 0.8.x, которые должны были оставаться бинарно совместимыми в этих сериях релизов. Эрик Валтинсен более или менее оставил разработку GStreamer позади в это время, сосредоточившись на других начинаниях.

Все серии релизов, проект сталкивается с трудностями. Каждая серия не очень популярна в сообществе Linux в основном из-за проблем со стабильностью и серьезного недостатка функций по сравнению с конкурирующими проектами, такими как Xine , MPlayer и VLC . Проект также страдает от отсутствия руководства, поскольку Вим Тайманс, руководитель проекта после ухода Эрика Валтинсена, в значительной степени прекратил участие.

Серия 0.10

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

С возвращением Вима Тайманса у руля ядро ​​GStreamer было переработано и стало тем, что является текущей серией 0.10.x, первый релиз которой (0.10.0) состоялся в декабре 2005 года. [22] С тех пор он поддерживает совместимость с API и ABI .

С новым стабильным ядром GStreamer приобрел популярность в 2006 году, его использовали такие медиаплееры, как Totem , Rhythmbox и Banshee , а затем и многие другие. Его также приняли такие корпорации, как Nokia , Motorola , Texas Instruments , Freescale , Tandberg и Intel .

В 2007 году большинство основных разработчиков GStreamer покинули Fluendo, включая специалиста по поддержке GStreamer Вима Тайманса, который впоследствии стал соучредителем Collabora Multimedia вместе с другими ветеранами GStreamer, в то время как другие присоединились к Sun Microsystems , Oblong Industries и Songbird .

В период с июня 2012 года по август 2014 года GStreamer 0.10 также распространялся Collabora и Fluendo как многоплатформенный SDK [23] на стороннем веб-сайте gstreamer.com (а не gstreamer.freedesktop.org для проекта upstream community). Цель состояла в том, чтобы предоставить разработчикам приложений SDK, который был бы функционально идентичен для Windows, Mac OS X , iOS и Android. Инициатива SDK была направлена ​​на содействие коммерческому принятию проекта GStreamer, поскольку он предоставлял стандартизированную точку входа для разработки мультимедийных приложений с GStreamer, без необходимости самостоятельной сборки всей платформы. Пользователи SDK также получили выгоду от документации, архивированной 16.06.2012 на Wayback Machine , учебных пособий и инструкций, относящихся к этому SDK.

Серия 1.x

GStreamer 1.0 был выпущен 24 сентября 2012 года. [24] Серия 1.x устанавливается параллельно с GStreamer 0.10, что упрощает переход, и обеспечивает множество архитектурных преимуществ по сравнению с серией 0.10. [25] В целом, GStreamer 1.0 принес значительные улучшения для:

Помимо технических улучшений, серия 1.x также определяется новой схемой нумерации версий релизов. Как поясняет дорожная карта GStreamer, [26] все версии 1.xy имеют суффикс версии API -1.0 и стабильный API/ABI. API/ABI может быть нарушен только новой основной серией релизов (например, 2.x); однако в настоящее время нет планов на серию релизов 2.0. До тех пор новая схема нумерации версий может использоваться для прогнозирования предполагаемого использования каждого релиза. Дорожная карта приводит несколько примеров:

В марте 2013 года разработчики проекта GStreamer опубликовали заявление [27] , в котором разъяснили, что серия 0.10 больше не поддерживается. В заявлении была подтверждена готовность проекта GStreamer помочь разработчикам приложений и плагинов перейти на новую технологию, а также намекнулось, что те, для кого переход на серию 1.x все еще считается невозможным, могут обратиться за помощью в различные консалтинговые компании.

1.2 добавлена ​​поддержка адаптивной потоковой передачи DASH , изображений JPEG 2000 , видео VP9 и Daala , а также поддержка только декодирования для WebP .

Версия 1.14 была выпущена 19 марта 2018 года [28], добавив поддержку WebRTC , AV1 , Nvidia NVDEC и Secure Reliable Transport , а также другие изменения.

Версия 1.22 была выпущена 23 января 2023 года [29] , добавив улучшенную поддержку AV1 , а также поддержку HLS , DASH и Microsoft Smooth Streaming для потоковой передачи с адаптивным битрейтом.

Смотрите также

Ссылки

  1. ^ ab "GStreamer "Slipstream" 0.1.0 released". 11 января 2001 г. Архивировано из оригинала 11 ноября 2012 г. Получено 3 ноября 2010 г.
  2. ^ "GStreamer 1.24.9 stable bug-fix release". 31 октября 2024 г. Получено 31 октября 2024 г.
  3. ^ "GStreamer", Ohloh Analysis Summary , Ohloh , заархивировано из оригинала 2014-06-26 , извлечено 2016-11-06
  4. ^ ab "Каковы точные условия лицензирования GStreamer и его плагинов?". freedesktop.org . Архивировано из оригинала 2021-06-07 . Получено 2021-06-07 .
  5. ^ "Igalia Multimedia". Архивировано из оригинала 2021-09-01 . Получено 2021-09-01 .
  6. ^ "webOS и GStreamer". webOShelp. Архивировано из оригинала 22 марта 2009 г. Получено 25 июля 2009 г.
  7. ^ "GStreamer: Download". gstreamer.freedesktop.org . Архивировано из оригинала 2015-05-10 . Получено 15 мая 2015 .
  8. ^ "GstLAL Project Page". Wiki.ligo.org . Архивировано из оригинала 23 апреля 2020 г. . Получено 6 мая 2019 г. .
  9. ^ Обзор модулей, Gstreamer.freedesktop.org, архивировано из оригинала 25 января 2012 г. , извлечено 8 февраля 2012 г.
  10. ^ Серия статей о разработке GStreamer 0.9 — Hung by a Thread, Gstreamer.freedesktop.org, заархивировано из оригинала 27 января 2013 г. , извлечено 24 февраля 2013 г.
  11. ^ "GStreamer Good Plug-ins". Архивировано из оригинала 2019-02-07 . Получено 2019-02-05 .
  12. ^ "GStreamer Bad Plug-ins". Архивировано из оригинала 2019-02-07 . Получено 2019-02-05 .
  13. ^ "GStreamer Ugly Plug-ins". Архивировано из оригинала 2019-02-07 . Получено 2019-02-05 .
  14. ^ "subprojects/gst-libav/README.md · 47ac79d7b8cc078f4890d0ce21f47e1c1af2c736 · GStreamer / gstreamer · GitLab". GitLab . Получено 2022-07-12 .
  15. ^ "GStreamer OpenMAX IL wrapper plugin". gstreamer.freedesktop.org . Архивировано из оригинала 2017-07-10 . Получено 2017-07-21 .
  16. ^ "Gstreamer 1.0 для raspbian". GRaspberrypi.org . Архивировано из оригинала 2017-07-10 . Получено 2017-07-21 .
  17. ^ "GStreamer Plug-ins for TI hardware". Processors.wiki.ti.com . Архивировано из оригинала 2017-06-28 . Получено 2017-07-21 .
  18. ^ "Fluendo Codec Pack Release 11 приносит поддержку VDPAU и VAAPI". 2010-03-25. Архивировано из оригинала 2014-06-24.
  19. ^ Debian Webmaster. "Debian - Подробности пакета gstreamer0.10-crystalhd в wheezy". Packages.debian.org . Архивировано из оригинала 2017-06-29 . Получено 2017-07-21 .
  20. ^ "subprojects/gst-libav/ext/libav/gstavcodecmap.c · 47ac79d7b8cc078f4890d0ce21f47e1c1af2c736 · GStreamer / gstreamer · GitLab". GitLab . Получено 2022-07-12 .
  21. Эдж, Джейк (26 октября 2010 г.). «GStreamer: прошлое, настоящее и будущее». LWN.net . Получено 15 мая 2022 г.
  22. ^ "GStreamer 0.10.0 stable release - Анонс первого выпуска в серии 0.10 stable". gstreamer.freedesktop.org . Архивировано из оригинала 2017-07-07 . Получено 2017-07-21 .
  23. ^ "Документация GStreamer". Docs.gstreamer.com . Архивировано из оригинала 2016-10-28 . Получено 2017-07-21 .
  24. ^ "GStreamer 1.0 released". gstreamer.freedesktop.org . Архивировано из оригинала 2017-07-07 . Получено 2017-07-21 .
  25. ^ "GStreamer 1.0 и 0.10". Lwn.net . Архивировано из оригинала 2017-06-13 . Получено 2017-07-21 .
  26. ^ "ReleasePlanning2013 - gstreamer Wiki". Архивировано из оригинала 2013-08-15 . Получено 2013-09-16 .
  27. ^ "GStreamer 0.10 больше не поддерживается". Lists.freedesktop.org . 11 марта 2013 г. Архивировано из оригинала 2017-07-10 . Получено 2017-07-21 .
  28. ^ "GStreamer 1.14 release notes". Архивировано из оригинала 20.03.2018 . Получено 08.09.2018 .
  29. ^ "Заметки о выпуске GStreamer 1.22". gstreamer.freedesktop.org . Получено 2023-05-18 .

Внешние ссылки