# GStreamer

GStreamer és un marc multimèdia basat en pipeline que enllaça una gran varietat de sistemes de processament multimèdia per completar fluxos de treball complexos. Per exemple, GStreamer es pot utilitzar per crear un sistema que llegeixi fitxers en un format, els processi i els exporti en un altre. Els formats i processos es poden canviar de manera plug and play.
GStreamer admet una gran varietat de components de gestió de mitjans, com ara la reproducció d'àudio senzilla, la reproducció d'àudio i vídeo, la gravació, la transmissió i l'edició. El disseny del pipeline serveix com a base per crear molts tipus d'aplicacions multimèdia com ara editors de vídeo, transcodificadors, emissores multimèdia en streaming i reproductors multimèdia.
Està dissenyat per funcionar en una varietat de sistemes operatius, per exemple, els BSD, OpenSolaris, Android, macOS, iOS, Windows, OS/400.
GStreamer és un programari gratuït i de codi obert subjecte als termes de la LGPL-2.1-o posterior i s'allotja a freedesktop.org.

## Distribució i adopció

L'entorn d'escriptori GNOME, un gran usuari de GStreamer, ha inclòs GStreamer des de la versió 2.2 de GNOME i anima les aplicacions GNOME i GTK a utilitzar-lo. Altres projectes també l'utilitzen o el donen suport, com ara el marc de mitjans Phonon i el reproductor de mitjans Songbird. També s'utilitza al motor del navegador WebKit.
GStreamer també funciona en dispositius incrustats com el Jolla Phone, el Palm Pre, Tizen i les tauletes d'Internet Nokia 770, N800, N810, N900 i N9 amb el sistema operatiu Maemo.
A més de les versions del codi font, el projecte GStreamer proporciona compilacions binaris per a Android, iOS, OSX i Windows.
El laboratori LIGO fa ús de GStreamer per simular i analitzar dades d'ones gravitatòries. La interfície de GStreamer s'anomena GstLAL.

## Arquitectura del programari

GStreamer està escrit en el llenguatge de programació C amb el sistema de tipus basat en GObject i el model d'objectes GLib 2.0.
Una biblioteca escrita en un llenguatge de programació es pot utilitzar en un altre llenguatge si s'escriuen enllaços ; GStreamer té una gamma d'enllaços per a diversos idiomes com ara Go, Python, Rust, Vala, C++, Perl, GNU Guile, C# i Ruby.
GStreamer processa els mitjans connectant una sèrie d' elements de processament en una canalització. Cada element ve proporcionat per un connector. Els elements es poden agrupar en bins, que es poden agregar més, formant així un gràfic jeràrquic. Aquest és un exemple de gràfic de filtre.
Els elements es comuniquen mitjançant coixinets. Un coixinet font d'un element es pot connectar a un coixinet d'aigüera d'un altre. Quan la canalització està en estat de reproducció, els buffers de dades flueixen des del coixinet d'origen al coixinet d'aigüera. Els coixinets negocien el tipus de dades que s'enviaran mitjançant les capacitats.
El diagrama de la dreta podria exemplificar la reproducció d'un fitxer MP3 amb GStreamer. La font del fitxer llegeix un fitxer MP3 des del disc dur d'un ordinador i l'envia al descodificador MP3. El descodificador descodifica les dades del fitxer i les converteix en mostres PCM que després passen al controlador de so. El controlador de so envia les mostres de so PCM als altaveus de l'ordinador.

## Referències

* ↑ Aisa, Brad. «A Comprehensive GStreamer Guide: Explaining What GStreamer Is and How To Set It Up for Windows» (en anglès americà), 20-04-2016. [Consulta: 11 desembre 2023].
* ↑ «Igalia Multimedia» (en anglès). Arxivat de l'original el 2021-09-01. [Consulta: 1r setembre 2021].
* ↑ «webOS and GStreamer» (en anglès). webOShelp. Arxivat de l'original el 22 març 2009. [Consulta: 25 juliol 2009].
* ↑ «GStreamer: Download» (en anglès). gstreamer.freedesktop.org. Arxivat de l'original el 2021-09-22. [Consulta: 15 maig 2015].
* ↑ «GstLAL Project Page» (en anglès). Wiki.ligo.org. Arxivat de l'original el 23 abril 2020. [Consulta: 6 maig 2019].