Введение

Мультимедийный фреймворк GStreamer — это фреймворк, основанный на конвейерной обработке, который объединяет широкий спектр систем обработки мультимедиа для выполнения сложных рабочих процессов. Например, GStreamer можно использовать для создания системы, которая считывает файлы одного формата, обрабатывает их и экспортирует в другой. Форматы и процессы можно изменять в режиме "подключи и работай". GStreamer поддерживает широкий спектр компонентов для работы с мультимедиа, включая простое воспроизведение аудио, воспроизведение аудио и видео, запись, потоковую передачу и редактирование. Конвейерная архитектура служит основой для создания различных типов мультимедийных приложений, таких как видеоредакторы, транскодеры, серверы потокового вещания и медиаплееры. Он предназначен для работы на различных операционных системах, таких как BSD, OpenSolaris, Android, macOS, iOS, Windows, OS/400. GStreamer — это бесплатное программное обеспечение с открытым исходным кодом, распространяемое на условиях лицензии LGPL 2.1 или более поздней версии.

GStreamer также используется во встроенных устройствах, таких как Jolla Phone, Palm Pre, Tizen и интернет-планшетах Nokia 770, N800, N810, N900 и N9, работающих под управлением операционной системы Maemo. Помимо выпуска исходного кода, проект GStreamer предоставляет скомпилированные сборки для Android, iOS, OSX и Windows. Лаборатория LIGO использует GStreamer для моделирования и анализа данных о гравитационных волнах. Интерфейс GStreamer называется GstLAL.

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

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, реализованную в виде общих библиотек. Базовая функциональность GStreamer содержит функции для регистрации и загрузки плагинов, а также для предоставления основ всех классов в виде базовых классов. Библиотеки плагинов загружаются динамически для поддержки широкого спектра кодеков, форматов контейнеров, драйверов ввода/вывода и эффектов. Плагины могут устанавливаться полуавтоматически при первом обращении к ним. Для этого дистрибутивы могут регистрировать бэкенд, который сопоставляет описания возможностей с именами пакетов. Начиная с версии 0.9, плагины группируются в три набора (названные по мотивам фильма «Хороший, плохой, злой»).

Название набора плагинов | Описание
---|---
Good | Этот пакет содержит плагины GStreamer из набора "good" – набор высококачественных плагинов, распространяемых по лицензии LGPL.
Bad | Плагины GStreamer Bad представляют собой набор плагинов, которые не соответствуют общему уровню качества. Они могут быть близки к плагинам хорошего качества, но им чего-то не хватает: например, тщательного анализа кода, документации, набора тестов, активного сопровождающего или широкого использования.
Ugly | Этот пакет содержит плагины из набора "ugly" – набор плагинов хорошего качества, которые могут вызывать проблемы с распространением. Отдельные дистрибутивы могут дополнительно классифицировать эти плагины: например, Ubuntu объединяет наборы "bad" и "ugly" в компоненты "Universe" или "Multiverse".

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

Форматы носителей

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

Ранние годы

Эрик Уолтинсен основал проект GStreamer в 1999 году. Многие из основных идей дизайна пришли из исследовательского проекта в Орегонском институте. Вскоре после этого к проекту присоединился Вим Тайманс, который значительно расширил многие аспекты системы. С тех пор множество других разработчиков программного обеспечения внесли свой вклад. Первым крупным релизом был 0.1.0, анонсированный 11 января 2001 года. Вскоре после этого 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 года. С тех пор сохраняется совместимость API и ABI. Благодаря новому стабильному ядру, в 2006 году GStreamer приобрел популярность и стал использоваться в медиаплеерах, таких как Totem, Rhythmbox и Banshee, и многих других. Его также внедрили такие корпорации, как Nokia, Motorola, Texas Instruments, Freescale, Tandberg и Intel. В 2007 году большинство основных разработчиков GStreamer покинули Fluendo, включая сопровождающего GStreamer Вима Тайманса, который вместе с другими ветеранами GStreamer основал компанию Collabora Multimedia, а другие присоединились к Sun Microsystems, Oblong Industries и Songbird. В период с июня 2012 года по август 2014 года GStreamer 0.10 также распространялся Collabora и Fluendo в виде мультиплатформенного SDK на стороннем сайте gstreamer.com (вместо gstreamer.freedesktop.org для основного проекта сообщества). Целью было предоставить разработчикам приложений SDK, который был бы функционально идентичен на Windows, Mac OS X, iOS и Android. Эта инициатива SDK была направлена на стимулирование коммерческого внедрения проекта GStreamer, поскольку она предоставляла стандартизированную точку входа для разработки мультимедийных приложений с использованием GStreamer, без необходимости самостоятельной сборки всей платформы. Пользователи SDK также получали доступ к документации, учебным пособиям и инструкциям, специфичным для этого SDK.