Кіріспе

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 объектілік моделіне негізделген күйінде жазылған.

Тілдік байланыстар

Бір бағдарламалау тілінде жазылған кітапхана, егер оған байланыстар (bindings) жасалса, басқа тілде де қолданылуы мүмкін; GStreamer Go, Python, Rust, Vala, C++, Perl, GNU Guile, C# және Ruby сияқты түрлі тілдер үшін байланыстарды ұсынады.

Шолу

GStreamer медианы бірнеше өңдеу элементтерін құбырға (pipeline) қосу арқылы өңдейді. Әрбір элемент плагинмен (plugin) қамтамасыз етіледі. Элементтер контейнерлерге (bins) топтастырылуы мүмкін, олар одан әрі біріктіріліп, иерархиялық графты құрайды. Бұл сүзгі графтық моделінің (filter graph) мысалы. Элементтер жастықшалар (pads) арқылы байланысады. Бір элементтегі бастапқы жастықша (source pad) екінші элементтегі қабылдағыш жастықшаға (sink pad) қосылуы мүмкін. Құбыр ойнату күйінде болғанда, дерек буферлері бастапқы жастықшадан қабылдағыш жастықшаға өтеді. Жастықшалар мүмкіндіктерді (capabilities) пайдаланып, қандай деректер жіберілетіні туралы келіседі. Оң жақтағы схема GStreamer арқылы MP3 файлының ойнатылуын көрсетеді. Файл көзі компьютердің қатаң дискісінен MP3 файлын оқып, оны MP3 декодеріне жібереді. Декодер файл деректерін декодтап, оны PCM үлгілеріне (samples) айналдырады, содан кейін оларды дыбыс драйверіне жібереді. Дыбыс драйвері PCM дыбыс үлгілерін компьютердің динамиктеріне жібереді.

Тіркемелер

GStreamer ортақ кітапханалар түрінде жүзеге асырылған мүмкіндіктерін толық пайдаланатын плагиндік архитектураны қолданады. GStreamer-дің негізгі мүмкіндіктері плагиндерді тіркеу және жүктеу функцияларын, сондай-ақ барлық сыныптардың негіздерін негізгі сыныптар түрінде ұсынады. Плагиндік кітапханалар кодектердің, контейнер форматтарының, кіріс/шығыс драйверлерінің және эффектілердің кең спектрін қолдау үшін динамикалық түрде жүктеледі. Плагиндер алғаш рет қажет болғанда жартылай автоматты түрде орнатылуы мүмкін. Осы мақсатта дистрибутивтер мүмкіндік сипаттамаларын пакет атауларымен байланыстыратын бэкендті тіркей алады. 0.9 нұсқасынан бастап плагиндер үш жиынтыққа топтастырылған (фильмнің атымен – «Жақсылар», «Жамандар» және «Ұсақ-түйектер»).

Плагин жиынтығының атауы
Жақсылар Бұл пакет LGPL лицензиясы бойынша жоғары сапалы плагиндер жиынтығын қамтитын «жақсылар» жиынтығының GStreamer плагиндерін қамтиды.
Жамандар GStreamer Bad Plug ins – қалғандарымен салыстырғанда сапасы төмен плагиндер жиынтығы. Олар жақсы сапалы плагиндерге жақын болуы мүмкін, бірақ оларға бір нәрсе жетіспейді: мысалы, кодты жақсы қарап шығу, құжаттама, сынақтар жиынтығы, техникалық қолдау көрсететін адам немесе кең қолданылу.
Ұсақ-түйектер Бұл пакет «ұсақ-түйектер» жиынтығының плагиндерін қамтиды, бұл жақсы сапалы плагиндер жиынтығы, олар тарату мәселелерін тудыруы мүмкін. Жеке дистрибутивтер осы плагиндерді қосымша жіктеуі мүмкін: мысалы, Ubuntu «жаман» және «ұсақ-түйектер» жиынтықтарын «Universe» немесе «Multiverse» компоненттеріне біріктіреді. Сонымен қатар, қолдау көрсетілетін медиа форматтарының санын кеңейтетін GStreamer FFmpeg плагині (тарихи себептерге байланысты gst-libav деп аталады) бар.

Медиа форматтары

Жоғарыда аталған «Жақсы, жаман және сұм» GStreamer плагиндері түрлі өңдеу элементтері/сүзгілерімен қатар, кең ауқымды файл форматтарын, протоколдарды және мультимедиа кодектерін қолдайды. Бұдан өзге, жүзден астам сығылу форматтарына (MPEG 1, MPEG 2, MPEG 4, H.261, H.263, H.264, RealVideo, MP3, WMV және т.б. сияқты) қолдау gst-libav плагині арқылы көрінбейтін түрде қамтамасыз етіледі.

Алғашқы жылдары

Эрик Валтинсен 1999 жылы GStreamer жобасын құрды. Оның негізгі дизайн идеяларының көбі Орегон жоғары оқу орнындағы зерттеу жобасынан туындаған. Көп ұзамай Вим Тайманс жобаға қосылып, жүйенің көптеген аспектілерін кеңейтті. Содан бері көптеген бағдарламалық жасақтаманы дамытушылар үлес қосты. Бірінші маңызды релиз – 2001 жылдың 11 қаңтарында жарияланған 0.1.0 нұсқасы болды. Көп ұзамай 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 жылы GStreamer-ді Flumotion ағынды серверін жазу және GStreamer үшін мультимедиялық шешімдер ұсыну мақсатымен Fluendo деген жаңа компания құрылды. Осы кезеңде Fluendo Вим Тайманс сияқты негізгі әзірлеушілердің көп бөлігін жұмысқа алды және GStreamer-ді кәсіби деңгейге көтеру және қоғамдық қолдауын арттыру үшін Nokia және Intel сияқты компаниялардың қолдауын қамтыды. Вим Тайманс қайтадан жетекшілік еткеннен кейін GStreamer-дің негізгі бөлігі жаңадан құрылды, ол қазіргі 0.10.x сериясына айналды, ал оның алғашқы нұсқасы (0.10.0) 2005 жылдың желтоқсанында жарық көрді. Одан бері API және ABI үйлесімділігі сақталып келеді. Жаңа, тұрақты негіз пайда болғаннан кейін GStreamer 2006 жылы танымал болды, 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 компаниялары тарапынан gstreamer.com үшінші тарап сайтында көп платформалы SDK ретінде таратылды (upstream қоғамдық жобасы gstreamer.freedesktop.org емес). Мақсаты – қолданба әзірлеушілеріне Windows, Mac OS X, iOS және Android жүйелерінде функционалдық тұрғыдан бірдей болатын SDK ұсыну. SDK бастамасы GStreamer жобасының коммерциялық қолдануын жеңілдетуге бағытталған, себебі ол GStreamer-мен мультимедиялық қолданбаларды әзірлеуге стандартталған кіру нүктесін ұсынды, соның арқасында бүкіл платформаны дербес құру қажеттігі болмады. SDK пайдаланушылары осы SDK-ға арналған құжаттама, оқулықтар мен нұсқаулықтардан да пайдаланды.