Aller au contenu

GStreamer

Un article de Wikipédia, l'encyclopédie libre.
Gstreamer
Description de l'image Gstreamer-logo.svg.
Description de l'image GStreamer example pipeline.svg.
Informations
Développé par Freedesktop.org
Première version [1]Voir et modifier les données sur Wikidata
Dernière version 1.24.9 ()[2]Voir et modifier les données sur Wikidata
Dépôt gitlab.freedesktop.org/gstreamer/gstreamer.gitVoir et modifier les données sur Wikidata
État du projet En développement
Écrit en C
Système d'exploitation MultiplateformeVoir et modifier les données sur Wikidata
Formats lus Advanced Systems Format, Audio Video Interleave, 3GPP (d), Format de fichier Quicktime (en), FLV (d), MPEG Transport Stream, Matroska, WebM, Material Exchange Format et OggVoir et modifier les données sur Wikidata
Langues Multilingue
Type Framework multimédia
Politique de distribution Gratuit
Licence Licence publique générale limitée GNU version 2.0 ou ultérieure (d)Voir et modifier les données sur Wikidata
Documentation gstreamer.freedesktop.org/documentation/index.htmlVoir et modifier les données sur Wikidata
Site web gstreamer.freedesktop.orgVoir et modifier les données sur Wikidata

GStreamer est une bibliothèque logicielle de manipulation de sons et d'images (appelée aussi framework multimédia) écrite en C et distribuée sous licence libre.

Initialement développée pour proposer une solution capable de concurrencer QuickTime et DirectShow sur GNU/Linux[3], sa première version publique date du .

Le travail sur la synchronisation vidéo et audio de son auteur, lui a permis d'implémenter cette partie dans PipeWire, un gestionnaire de flux multimédias pour Linux, qui va permettre d'unifier les API des gestionnaires audio avec JACK, faible latence, orienté audio professionnel, et PulseAudio davantage orienté bureau, ainsi que les flux vidéos. Ces apports permettent en contrepartie d'alléger la gestion de synchronisation de Gstreamer[4].

Elle a été portée depuis sur une grande variété de systèmes d'exploitation autres que GNU/Linux, tels que BSD, OpenSolaris, Android, OS X, iOS, Windows, OS/400[5].

C'est un projet maintenu au sein de Freedesktop.org.

Distribution et adoption

[modifier | modifier le code]

GStreamer a été rapidement adoptée par le projet GNOME (dès la version 2.2 de ce dernier, sortie en ) dont elle est devenue un pilier (Totem, Rhythmbox, Epiphany et Pitivi, par exemple, en tirent largement parti).

Elle est également utilisé par Phonon, la couche d'abstraction multimédia de KDE4.

Elle a ensuite commencé à être utilisée sous Windows et MacOS : c'est ainsi que Songbird se basait dessus pour proposer des versions fonctionnant sous ces différentes plateformes, de même qu'Opera a reposé dessus pour afficher l'élément vidéo de HTML5 sous Windows, GNU/Linux et FreeBSD (à partir de sa version 10.5 et, semble-t-il, jusqu'à l'abandon du moteur de rendu de pages Web maison Presto au profit de Blink) [6].

WebOS y recourt également[7].

Pour faciliter les usages commerciaux de GStreamer, Fluendo (en) et Collabora (en) ont œuvré ensemble à la création d'un SDK multiplateforme (GNU/Linux, Windows et Mac OS X pour la première version nommée Amazon qui est sortie le [8], puis Android avec la version Brahmaputra sortie le et iOS avec la version Congo sortie le ). Depuis, le SDK continue à être mis à jour parallèlement à GStreamer lui-même[9].

Fonctionnement technique

[modifier | modifier le code]

GStreamer repose sur un fonctionnement en pipeline qui rappelle les tubes sous Unix : les éléments sont connectés entre eux via des tubes. Mais avec GStreamer, le type d’un flux passant par un tube est connu des éléments (le format de sortie et d’entrée n’a pas à être spécifié au niveau de chaque élément). On peut également dupliquer un flux avec la commande tee.

Lecture d'un fichier audio

[modifier | modifier le code]

Voici un pipeline qui va permettre la lecture du fichier audio « mon_son.ogg » – consistant en un son compressé avec le codec Vorbis et présenté dans un format conteneur Ogg – en faisant appel au serveur de sons PulseAudio (dans cet exemple, le greffon « filesrc » permet de déclarer le fichier source, « oggdemux » permet de démultiplexer (en) le fichier, « vorbisdec » de le décoder et « pulsesink » d'envoyer le résultat à PulseAudio) :

gst-launch filesrc location=mon_son.ogg ! oggdemux ! vorbisdec ! pulsesink

L'exemple précédent peut être simplifié en laissant GStreamer détecter lui-même la nature du conteneur et du codec, au moyen du greffon « decodebin » :

gst-launch filesrc location=mon_son.ogg ! decodebin ! pulsesink

Il est même possible de laisser GStreamer détecter lui-même le serveur de sons en utilisant le greffon « autoaudiosink » :

gst-launch filesrc location=mon_son.ogg ! decodebin ! autoaudiosink

Lecture d'un fichier audio-vidéo

[modifier | modifier le code]

Voici un pipeline qui va permettre la lecture du fichier audio-vidéo WebM « ma_vidéo.webm » (dans cet exemple, le greffon « decodebin » est affublé d'un nom quelconque – ici « foo » – pour pouvoir être réutilisé par chaque pipe – un pour traiter le flux vidéo, l'autre pour traiter le flux audio – qui est mis en attente à l'aide du greffon « queue » pour que les deux parties soient jouées en même temps) :

gst-launch filesrc location=ma_vidéo.webm ! decodebin name=foo \
foo. ! queue ! autovideosink \
foo. ! queue ! autoaudiosink

Transcodage d'un fichier audio-vidéo

[modifier | modifier le code]

Voici un pipeline qui va permettre le transcodage d'un fichier MP4 (contenant généralement une partie vidéo compressée avec le codec H.264 et une partie audio compressée avec le codec AAC, mais c'est sans importance dans cet exemple où nous laissons le greffon « decodebin » s'occuper de tout ça comme nous l'avons vu précédemment) en fichier ogv associant les codecs Vorbis et Theora respectivement pour l'audio et la vidéo (le greffon « decodebin » est de nouveau affublé d'un nom, « foo », pour pouvoir être réutilisé dans chacun des pipes audio et vidéo, de même ici que le greffon « oggmux » qui est nommé pour l'occasion « bar » et qui va permettre de multiplexer les parties audio et vidéo) :

gst-launch filesrc location=ma_vidéo.mp4 ! decodebin name=foo \
foo. ! queue ! vorbisenc ! oggmux name=bar \
foo. ! queue ! theoraenc ! bar. \
bar. ! filesink location=ma_vidéo.ogv

GStreamer adopte un système de greffons regroupés sous les appellations « Good », « Bad » et « Ugly » selon le support qui leur est accordé, support qui est défini[10] en fonction de la qualité du greffon lui-même, sa licence et d’autres choses :

  • les greffons « Good » sont de bonne qualité et très bien supportés,
  • les greffons « Bad » sont ceux dont la qualité n’est pas assurée parce qu’ils sont soit peu utilisés, soit peu testés, soit peu maintenus ou tout simplement parce que leur support n’est pas prioritaire,
  • les greffons « Ugly » sont des greffons de bonne qualité mais dont la redistribution est problématique.

Pour l’anecdote, ce nommage en « Good », « Bad », et « Ugly » est inspiré du titre anglais d’un célèbre film de Sergio Leone : Le Bon, la Brute et le Truand (The Good, the Bad and the Ugly)[11].

GStreamer Editing Services (GES) et Non-Linear Engine (NLE)

[modifier | modifier le code]

La bibliothèque GStreamer Editing Services a été développée par-dessus GStreamer pour offrir une interface de programmation simplifiée pour des opérations d'édition multimédia, et en particulier l'édition non-linéaire dont l'édition vidéo non-linéaire.

Pour être précis, GStreamer Editing Services s'appuie sur Non-Linear Engine (le successeur de GNonLin) qui s'appuie lui-même sur GStreamer à cet effet.

Non-Linear Engine est média-agnostique et ne possède aucune notion d'édition vidéo. Non-Linear Engine est essentiellement composée de quelques greffons thread-safe pour GStreamer qui permettent des opérations de composition et de mixage et aussi de convertir dynamiquement la piste de montage d'un projet en un pipeline pour GStreamer.

À compter de sa version 0.91, l'éditeur video non-linéaire Pitivi repose sur GES[12].

Le projet débute comme une preuve de concept en , avec la publication de la version 0.0.1[13]. Le , le projet publie sa première véritable version, la 0.1.0[14].

En fut publiée la version 0.4.0, qui est également la première version à intégrer le projet GNOME[13]. Avec la version 0.6.0 publiée le , le projet considère que le support de l'audio est enfin pleinement fonctionnel[15].

La série 0.8 a été lancée en , rapidement suivie par la série 0.10, lancée en , qui signe véritablement la maturité du framework.

La version 1.0, sortie le [16], succède finalement à la version 0.10. Cette version est conçue pour pouvoir coexister avec la précédente sur un même système afin de faciliter la transition.

La version 1.2, sortie le [17], prend notamment en charge l'accélération matérielle par le processeur graphique du décodage voire du codage vidéo pour certains codecs et processeurs (via la bibliothèque gstreamer-vaapi)[18].

La version 1.4, entre autres choses, corrige la prise en charge du format MPEG-TS[19].

À compter de la version 1.6, sortie le [20], Non-Linear Engine (NLE) remplace GNonLin.

En 2017, commence l'intégration de Gstreamer, Alsa, PulseAudio et JACK au sein d'un ensemble unifié appelé Pipewire[4].

Logiciels utilisant GStreamer

[modifier | modifier le code]

Références

[modifier | modifier le code]
  1. « http://lwn.net/Articles/411761/ »
  2. (en) « GStreamer 1.24.9 stable bug-fix release », (consulté le )
  3. (en) « GStreamer Past – Present - Future » (Wim Taymans, 26 octobre 2010, site officiel)
  4. a et b (en) Christian F.K. Schaller, « Launching Pipewire! », sur Christian F.K. Schaller,
  5. (en) « Features » (site officiel)
  6. (en) « (Re-)Introducing HTML5 Video » (Kroc Camen, 1er janvier 2010, OSnews)
  7. (en) « How widely is the GNOME stack used? » (Philip Withnall, 8 mai 2014, drboblog)
  8. (en) « Collabora and Fluendo Launch GStreamer SDK for Multimedia App Development » (communiqué de Fluendo, 7 juin 2012, Thomson Reuters)
  9. (en) « GStreamer.com SDK » (GStreamer.com)
  10. (en) Release notes for GStreamer Base Plug-ins 0.10.0 "Mont-d'or" (site officiel)
  11. (en) GStreamer 0.9 development series - Hung by a Thread (site officiel)
  12. (en) « 0.91 Release "Charming Defects" », The Pitivi Wiki
  13. a et b (en) « GStreamer: Past, present, and future » (Jake Edge, 26 octobre 2010, LWN.net)
  14. (en) « GStreamer "Slipstream" 0.1.0 released! » (Erik Walthinsen, Wim Taymans et Richard Boulton, 11 janvier 2001, liste de diffusion de GStreamer)
  15. (en) « GStreamer "Hottest Pick" 0.6.0 released » (The GStreamer team, 2 février 2003, liste de diffusion de GStreamer)
  16. (en) « GStreamer 1.0 released » (site officiel, 24 septembre 2012)
  17. (en) RELEASE: GStreamer Core and Plugins 1.2.0 (The GStreamer team, 24 septembre 2013, liste de diffusion de GStreamer)
  18. (en) GNOME Bugzilla – Bug 611032 – Support for Video Acceleration API (VA API) VaAPI (GNOME Bugzilla)
  19. (en) GNOME Bugzilla – Bug 675132 – tsdemux: implement proper seeking with binary search and keyframe detection (GNOME Bugzilla)
  20. (en) « GStreamer 1.6 Release Notes » (site officiel)

Sur les autres projets Wikimedia :

Articles connexes

[modifier | modifier le code]

Liens externes

[modifier | modifier le code]