GStreamer

{{#ifeq:||Un article de Ziki, l'encyclopédie libre.|Une page de Ziki, l'encyclopédie libre.}}
Révision datée du 1 octobre 2023 à 11:28 par >Mo5ul (Annulation de la modification de Yodavatar (d) N’apporte rien d’intéressant, et sport professionnel n’a aucun rapport.)
(diff) ← Version précédente | Voir la version actuelle (diff) | Version suivante → (diff)

Modèle:Admissibilité à vérifier

Modèle:Infobox V3/Début Modèle:Infobox V3/Image Wikidata Modèle:Infobox V3/Séparateur Modèle:Infobox V3/Image Wikidata

Modèle:Infobox V3/Tableau début

Modèle:Infobox V3/Tableau Ligne mixte Wikidata

{{#ifeq:Modèle:Wikidata|Modèle:Wikidata | | Modèle:Infobox V3/Tableau Ligne mixte Wikidata }}

Modèle:Infobox V3/Tableau Ligne mixte

Modèle:Infobox V3/Tableau Ligne mixte

Modèle:Infobox V3/Tableau Ligne mixte

Modèle:Infobox V3/Tableau Ligne mixte

Modèle:Infobox V3/Tableau Ligne mixte Wikidata

Modèle:Infobox V3/Tableau Ligne mixte Wikidata

Modèle:Infobox V3/Tableau Ligne mixte

Modèle:Infobox V3/Tableau Ligne mixte {{#invoke:Infobox/Fonctions/Logiciel|catByProgrammingLanguage}}

Modèle:Infobox V3/Tableau Ligne mixte

Modèle:Infobox V3/Tableau Ligne mixte

Modèle:Infobox V3/Tableau Ligne mixte Wikidata

Modèle:Infobox V3/Tableau Ligne mixte Wikidata

Modèle:Infobox V3/Tableau Ligne mixte Wikidata

Modèle:Infobox V3/Tableau Ligne mixte Wikidata

Modèle:Infobox V3/Tableau Ligne mixte Wikidata

Modèle:Infobox V3/Tableau Ligne mixte Wikidata

Modèle:Infobox V3/Tableau Ligne mixte

Modèle:Infobox V3/Tableau Ligne mixte

Modèle:Infobox V3/Tableau Ligne mixte Wikidata

Modèle:Infobox V3/Tableau Ligne mixte Wikidata

Modèle:Infobox V3/Tableau Ligne mixte Wikidata

Modèle:Infobox V3/Tableau fin

Modèle:Infobox V3/Titre Bloc Modèle:Infobox V3/Navigateur

Modèle:Infobox V3/Fin avec WikidataModèle:Rien{{#ifeq:|| {{#if:


| }}{{#if:

   | {{#if: 
       |
       |
     }}

}} }}

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<ref>{{#invoke:Langue|indicationDeLangue}} Modèle:Lien web (Wim Taymans, 26 octobre 2010, site officiel)</ref>, sa première version publique date du Modèle:Date.

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<ref name="Schaller2017">Modèle:Lien web</ref>.

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<ref>{{#invoke:Langue|indicationDeLangue}} Modèle:Lien web (site officiel)</ref>.

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

Distribution et adoption

GStreamer a été rapidement adoptée par le projet GNOME (dès la version 2.2 de ce dernier, sortie en Modèle:Date-) 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) <ref>{{#invoke:Langue|indicationDeLangue}} Modèle:Lien web (Kroc Camen, Modèle:1er janvier 2010, OSnews)</ref>.

WebOS y recourt également<ref>{{#invoke:Langue|indicationDeLangue}} Modèle:Lien web (Philip Withnall, 8 mai 2014, drboblog)</ref>.

Pour faciliter les usages commerciaux de GStreamer, Modèle:Lien et Modèle:Lien 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 Modèle:Date-<ref>{{#invoke:Langue|indicationDeLangue}} Modèle:Lien web (communiqué de Fluendo, 7 juin 2012, Thomson Reuters)</ref>, puis Android avec la version Brahmaputra sortie le Modèle:Date- et iOS avec la version Congo sortie le Modèle:Date-). Depuis, le SDK continue à être mis à jour parallèlement à GStreamer lui-même<ref>{{#invoke:Langue|indicationDeLangue}} Modèle:Lien web (GStreamer.com)</ref>.

Fonctionnement technique

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.

Exemples

Lecture d'un fichier audio

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 Modèle:Lien le fichier, « vorbisdec » de le décoder et « pulsesink » d'envoyer le résultat à PulseAudio) :

<syntaxhighlight lang="perl">gst-launch filesrc location=mon_son.ogg ! oggdemux ! vorbisdec ! pulsesink</syntaxhighlight>

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 » :

<syntaxhighlight lang="perl">gst-launch filesrc location=mon_son.ogg ! decodebin ! pulsesink</syntaxhighlight>

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

<syntaxhighlight lang="perl">gst-launch filesrc location=mon_son.ogg ! decodebin ! autoaudiosink</syntaxhighlight>

Lecture d'un fichier audio-vidéo

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) :

<syntaxhighlight lang="perl">gst-launch filesrc location=ma_vidéo.webm ! decodebin name=foo \ foo. ! queue ! autovideosink \ foo. ! queue ! autoaudiosink</syntaxhighlight>

Transcodage d'un fichier audio-vidéo

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) :

<syntaxhighlight lang="perl">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</syntaxhighlight>

Greffons

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<ref>{{#invoke:Langue|indicationDeLangue}} Release notes for GStreamer Base Plug-ins 0.10.0 "Mont-d'or" (site officiel)</ref> 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)<ref>{{#invoke:Langue|indicationDeLangue}} GStreamer 0.9 development series - Hung by a Thread (site officiel)</ref>.

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

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<ref>{{#invoke:Langue|indicationDeLangue}} Modèle:Lien web, Modèle:Lang</ref>.

Historique

Le projet débute comme une preuve de concept en Modèle:Date-, avec la publication de la version 0.0.1<ref name="LWN 411761">{{#invoke:Langue|indicationDeLangue}} Modèle:Lien web (Jake Edge, 26 octobre 2010, LWN.net)</ref>. Le Modèle:Date-, le projet publie sa première véritable version, la 0.1.0<ref>{{#invoke:Langue|indicationDeLangue}} Modèle:Lien web (Erik Walthinsen, Wim Taymans et Richard Boulton, 11 janvier 2001, liste de diffusion de GStreamer)</ref>.

En Modèle:Date- fut publiée la version 0.4.0, qui est également la première version à intégrer le projet GNOME<ref name="LWN 411761" />. Avec la version 0.6.0 publiée le Modèle:Date-, le projet considère que le support de l'audio est enfin pleinement fonctionnel<ref>{{#invoke:Langue|indicationDeLangue}} Modèle:Lien web (Modèle:Lang, 2 février 2003, liste de diffusion de GStreamer)</ref>.

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

La version 1.0, sortie le Modèle:Date-<ref>{{#invoke:Langue|indicationDeLangue}} Modèle:Lien web (site officiel, 24 septembre 2012)</ref>, 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 Modèle:Date-<ref>{{#invoke:Langue|indicationDeLangue}} RELEASE: GStreamer Core and Plugins 1.2.0 (Modèle:Lang, 24 septembre 2013, liste de diffusion de GStreamer)</ref>, 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)<ref>{{#invoke:Langue|indicationDeLangue}} GNOME Bugzilla – Bug 611032 – Modèle:Lang API (VA API) VaAPI (GNOME Bugzilla)</ref>.

La version 1.4, entre autres choses, corrige la prise en charge du format MPEG-TS<ref>{{#invoke:Langue|indicationDeLangue}} GNOME Bugzilla – Bug 675132 – Modèle:Lang (GNOME Bugzilla)</ref>.

À compter de la version 1.6, sortie le Modèle:Date-<ref>{{#invoke:Langue|indicationDeLangue}} Modèle:Lien web (site officiel)</ref>, 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<ref name="Schaller2017" />.

Logiciels utilisant GStreamer

Modèle:Colonnes

Référence

Modèle:Références

Annexes

Modèle:Autres projets

Articles connexes

Liens externes

Modèle:Palette Modèle:Portail