URL: https://linuxfr.org/news/gstreamer-degaine-la-version-1-2 Title: GStreamer dégaine la version 1.2 Authors: Thomas Debesse antistress, Nils Ratusznik, palm123 et patrick_g Date: 2013年09月24日T21:24:18+02:00 License: CC By-SA Tags: freedesktop, firefox, mplayer, gstreamer et gst Score: 69 Le [[framework]] multimédia GStreamer est sorti ce mardi 24 septembre 2013 en version 1.2, tout juste un an après la version 1.0 ! Comme on peut le lire sur Wikipédia, [[GStreamer]] est une bibliothèque logicielle de manipulation de sons et d’images (et plus encore) écrite en C, initialement développée pour proposer une solution capable de concurrencer [[QuickTime]] et [[DirectShow]] sur GNU/Linux. Sa première version publique date du 31 octobre 1999. C’est un projet [[freedesktop.org]].  GStreamer est utilisé dans de nombreux projets, notamment les logiciels du bureau [[GNOME]], du bureau [[KDE]] via [Phonon](https://fr.wikipedia.org/wiki/Phonon_%28KDE%29), ainsi que [[Mozilla Firefox]] et [[Opera]]. Les applications les plus courantes sont des logiciels de lecture multimédia, des juke-box numériques, des interfaces de montage non linéaire, de outils de transcodage, des navigateur web ou bien des logiciels de visioconférence ou de téléphonie. La version 1.2 est la seconde version majeure de la branche 1.x, et est compatible avec la version 1.0 sur le plan des API et des ABI. Cette montée de version est justifiée par la présence de nombreuses modifications qui sont trop importantes pour être considérées comme de simple corrections de bug. La branche 1.x est une branche stable et n’est pas compatible avec la branche 0.10, mais ces deux branches du framework peuvent être installées en parallèle sur un même système, et c’est ce que font ordinairement les distributions pour permettre une transition des paquets en douceur. Les liens vers les sources sont fournis dans la note de parution, des binaires précompilés pour Windows, Mac OS X et Android seront bientôt livrés. Pour GNU/Linux, voyez avec les mainteneurs de votre distribution préférée, comme d’habitude ! NDA : merci à antistress< pour sa consciencieuse relecture, ses pertinentes suggestions, et pour ses contributions aux articles Wikipédia qui ont nourri cette dépêche. :) ---- [RELEASE: GStreamer Core and Plugins 1.2.0](http://lists.freedesktop.org/archives/gstreamer-devel/2013-September/043124.html) [GStreamer: open source multimedia framework](http://gstreamer.freedesktop.org) [La dernière dépêche LinuxFr à ce sujet : « GStreamer : bientôt la version 1.0 »](http://linuxfr.org/news/gstreamer%C2%A0-bient%C3%B4t-la-version%C2%A010) ---- # Quand je pense au nombre de fois où je t’ai sauvé la vie _GStreamer par l’exemple_ GStreamer est particulièrement apprécié pour son fonctionnement en pipeline qui rappellera à chacun les [tubes](https://fr.wikipedia.org/wiki/Tube_%28informatique%29) sous Unix : on connecte des éléments entre eux via des tubes. Mais avec GStreamer, il y a en plus la particularité que 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ée au niveau de chaque élément). On peut également dupliquer un flux avec un élément ``tee``. Comme rien ne vaut un bon exemple, voici deux pipelines qui, s’ils sont tous deux exécutés sur deux hôtes d’un même réseau réalisent un duplex audio stéréo codé en [Opus](http://www.opus-codec.org/) et [transporté](http://tools.ietf.org/html/draft-spittka-payload-rtp-opus-03) par [RTP](https://fr.wikipedia.org/wiki/Real-time_Transport_Protocol) : ```bash gst-launch autoaudiosrc ! audioconvert ! audioresample ! capsfilter caps='audio/x-raw, format=S16LE, rate=48000, channels=2' ! opusenc bitrate=128000 ! rtpopuspay ! udpsink host=distant-hostname port=5004 gst-launch udpsrc uri=udp://local-hostname:5004 ! capsfilter caps='application/x-rtp, media=(string)audio, clock-rate=(int)48000, payload=(int)96, caps=(string)"audio/x-opus"' ! rtpjitterbuffer latency=60 drop-on-latency=true ! rtpopusdepay ! opusdec ! audioconvert ! audioresample ! autoaudiosink ``` # Je ne les oublie pas les copains, surtout quand les amis viennent de si loin et qu’ils ont tant de choses à me raconter _Fonctionnalités nouvelles apportées par GStreamer 1.2_ On remarquera principalement l’arrivée de greffons prenant en charge des formats dont on parle parfois sur DLFP et qui enflamment souvent les débats. * [[WebP]], un format d’image concurrent du [[JPEG]] et [proposé par Google](http://linuxfr.org/news/webp-le-format-dimage-libre-de-google) et dont l’usage se destine principalement au web. WebP utilise la même technique de compression que celle qui est utilisée pour les images clés du codec vidéo [[VP8]], dans un conteneur dérivé des spécifications [RIFF](http://fr.wikipedia.org/wiki/Resource_Interchange_File_Format) qui autorise les métadonnées. Pour le moment seul le décodage est fonctionnel et le codage sera implémenté plus tard. Le greffon s’appelle ``webp``. * [[JPEG 2000]], un autre format d’image concurrent du [[JPEG]] et plus ancien que WebP mais très performant et dont la norme est commune à l’[ISO](http://fr.wikipedia.org/wiki/Organisation_internationale_de_normalisation), l’[IEC](https://fr.wikipedia.org/wiki/Commission_%C3%A9lectrotechnique_internationale) et à l’[UIT-T](https://fr.wikipedia.org/wiki/Union_internationale_des_t%C3%A9l%C3%A9communications) et notamment utilisé dans l’industrie du cinéma. Le support de ce format repose sur la bibliothèque [OpenJPEG](http://www.openjpeg.org/). Le greffon s’appelle donc ``openjpeg``. * [[VP9]], un codec vidéo expérimental en cours de développement par Google et attendu comme le successeur du [[VP8]] et prévu pour concurrencer [H.265/HEVC](http://fr.wikipedia.org/wiki/H.265/HEVC). Le greffon pour décoder ou coder en VP9 est le même que pour le VP8 : ``vpx``. * [[Daala]], un autre codec vidéo en cours de développement par la [fondation Xiph.Org](http://fr.wikipedia.org/wiki/Xiph.org) et la [[Fondation Mozilla]] et également attendu pour concurrencer [H.265/HEVC](http://fr.wikipedia.org/wiki/H.265/HEVC). Attention, comme indiqué sur la [page du projet](http://wiki.xiph.org/Daala), le nom Daala n’est pas définitif. Un autre nom plus pertinent pourrait être _PatentCake_, mais on ne pourrait plus faire la blague _« Daala, ton univers impitoyaable »_. Le greffon s’appelle donc ``daala``. Les musiciens remarqueront l’arrivée de deux nouveaux greffons pour la prise en charge du [MIDI](http://fr.wikipedia.org/wiki/Musical_Instrument_Digital_Interface) : * [``fluidsynth``](http://sourceforge.net/apps/trac/fluidsynth/) : ce greffon qui permet de générer des sons à l’aide d’informations MIDI et d’une [[SoundFont]]. * ``midiparse`` : c’est un greffon rendu nécessaire par le greffon ``fluidynth``. On peut donner comme exemple de pipeline utilisant ces deux modules le pipeline suivant : ``"filesrc location=song.mid ! midiparse ! fluidsynth ! autoaudiosink"``. Il existait déjà un greffon ``timidity``, mais ces deux nouveaux greffons permettent justement de se passer de [TiMidity++](http://timidity.sourceforge.net/) et de contrôler divers paramètres depuis GStreamer lui-même et d’avoir un pipeline plus modulaire. Il n’est pas impossible qu’à l’avenir un greffon autre que ``fluisynth`` puisse être connecté à la sortie de ``midiparse``. Deux nouveaux greffons pour la capture vidéo via [[Video4Linux]] arrivent : * ``mfc`` : un greffon pour prendre en charge le Multi Format Codec, un format de compression utilisé par certains [SoC](http://fr.wikipedia.org/wiki/Syst%C3%A8me_sur_une_puce) comme les Samsung Exynos ou les Freescale IMX. * [``ivtv``](http://ivtvdriver.org/index.php/Main_Page) : pour prendre en charge l’[IVTV](http://en.wikipedia.org/wiki/IVTV), un format de compression utilisé par certaines interfaces de capture vidéo Connexant. Pour le _[[streaming]]_, GStreamer 1.2 apporte deux greffons de format et un de transport : * ``mssdemux`` : prise en charge du format [Microsoft Smooth Streaming](https://en.wikipedia.org/wiki/Adaptive_bitrate_streaming#Microsoft_Smooth_Streaming) ; * ``dashdemux`` : prise en charge du format [Dynamic Adaptive Streaming over HTTP](https://en.wikipedia.org/wiki/Dynamic_Adaptive_Streaming_over_HTTP) ; * [``srtp``](http//fr.wikipedia.org/wiki/Secure_Real-time_Transport_Protocol) : une couche de chiffrement pour le protocole de transport multimédia temps-réel [RTP](http://fr.wikipedia.org/wiki/Real-time_Transport_Protocol). On citera également pêle-mêle le greffon [``bluez``](http://www.bluez.org/) pour interagir avec des appareils [[Bluetooth]] ainsi que le greffon ``sbc`` pour gérer le codec audio et vidéo [Subband Codec](http://fr.wikipedia.org/wiki/Low_Complexity_Subband_Codec) habituellement utilisé sur du Bluetooth, le filtre de désentrelacement vidéo [``yadif``](http://avisynth.org.ru/yadif/yadif.html), le greffon [``accuraterip``](http://www.accuraterip.com/) pour [ripper](http://fr.wikipedia.org/wiki/Rip_%28informatique%29) des [CD audios](https://fr.wikipedia.org/wiki/Red_Book_%28norme_CD_audio%29), et pour terminer le greffon ``audiofxbad`` qui permet via l’élément ``audiochannelmix`` de reconstruire un son multicanal de manière à ce que les canaux soient identiques malgré que la source ne fournisse du son que sur un seul des canaux. # Si on ne veut pas mourir de faim, il faut faire ou le moine ou le bandit _Les tribulations de gstreamer-vaapi_ L’un des objectifs de la série 1.x est de permettre d’utiliser l’accélération matérielle pour le (dé)codage vidéo et proposée par les processeurs graphiques ([VA-API](http://fr.wikipedia.org/wiki/Video_Acceleration_API), [VDPAU](http://fr.wikipedia.org/wiki/VDPAU) et [XvBA](http://en.wikipedia.org/wiki/X-Video_Bitstream_Acceleration)). Cette fonctionnalité permettrait à toute application basée sur GStreamer de bénéficier de cette accélération pour le décodage ou éventuellement le codage vidéo. Comme logiciel qui pourrait en bénéficier, citons les logiciels Totem (lecture vidéo), Pitivi (montage vidéo) ou bien encore Epiphany dont le moteur WebKitGTK+ utilise GStreamer pour afficher la vidéo nativement dans le navigateur. Finalement cette fonctionnalité a été externalisée en une bibliothèque, [gstreamer-vaapi](https://gitorious.org/vaapi/gstreamer-vaapi/source/d262d36623546b07a73c156462a1b3b4b920986a), un ensemble de greffons dédiés à cette tâche développé par Gwenolé Beauchesne (gbeauche<) à qui l’on doit déjà l’[implémentation VA API de Gnash](http://linuxfr.org/users/gbeauche/journaux/gnash-d%C3%A9codage-fluide-de-vid%C3%A9os-flash-hd-h264) et [celle de Mplayer](http://linuxfr.org/users/gbeauche/journaux/support-va-api-pour-mplayer). Évidemment, ce travail a nécessité de nombreuses modifications dans le code de GStreamer lui-même et les deux équipes travaillent conjointement. Comme l’[a écrit](https://bugzilla.gnome.org/show_bug.cgi?id=611032#c17) Tim-Philipp Müller, un développeur GStreamer, _« Ce sont des pièces de puzzle, nous faisons notre partie dans GStreamer 1.2, il faut voir avec les gens de gstreamer-vaapi pour leur partie. :) »_. Il semble donc que la présente version 1.2 ait les fondations requises. Il reste à présent à la bibliothèque externe gstreamer-vaapi à se [synchroniser](https://gitorious.org/vaapi/vj-gstreamer-vaapi/commits/c468d29a2aae19b921c79909ae4f952709ec8866) avec cette version pour tenir compte des derniers changements (notamment dans l’API _GstContext_). Alors les logiciels cités précédemment en tireront directement profit ! # L’ennui c’est que moi, je finis toujours le travail _Bonification, dénonciation_ De nombreux bugs sont évidemment corrigés, nous invitons le lecteur à consulter la [note de parution](http://lists.freedesktop.org/archives/gstreamer-devel/2013-September/043124.html). Si vous constatez que des bugs ont été introduits, le Bugzilla du projet vous [ouvre grand ses portes](https://bugzilla.gnome.org/browse.cgi?product=GStreamer), n’attendez pas ! Il faudra remercier tout spécialement le projet [Pitivi](http://www.pitivi.org/) (anciennement PiTiVi) pour leur débogage consciencieux. En effet, le logiciel de montage vidéo Pitivi exploite largement GStreamer, et ils ont corrigé de nombreux bugs de GStreamer en prévision de la très prochaine sortie de la version 1.0 de Pitivi. La saine politique de Pitivi est de tout corriger en amont plutôt que de mettre en place des solutions de contournement au niveau de l’application. Cela peut retarder le développement de l’application elle-même car il faut attendre que la résolution soit intégrée en amont, mais cela bénéficie à la qualité de l’écosystème tout entier. Dans son billet « [Corrigez-le trois fois](http://jeff.ecchi.ca/blog/2013/09/04/fix-it-thrice/) », le développeur Jean-François Fortin Tam rappelle qu’ils ont récemment apporté _« 250 changements à Pitivi, 180 à [GES](http://wiki.pitivi.org/wiki/GES), et je ne sais pas combien de centaines dans GStreamer »_. Je profite de cette dépêche pour encourager chacun à la même exigence ! Je me suis moi-même retrouvé dans une situation similaire : refusant de me satisfaire d’un contournement j’ai [levé un bug aussi vieux que GStreamer](https://bugzilla.gnome.org/show_bug.cgi?id=692953) mais dont personne ne s’était vraiment rendu compte puisque le contournement était répété de bouche à oreille comme la bonne manière de faire (et cru comme tel), sans remise en cause. Soyez exigeant, ne contournez jamais un problème, dénoncez-le ! De nouvelles API ont également été ajoutées. Puisque l’API est stabilisée ce ne sont pas des changements de l’existant mais de nouvelles fonctionnalités. # Je vais dormir tranquille, parce que je sais maintenant que mon pire ennemi veille sur moi _Support amélioré pour plusieurs greffons_ Les greffons ``dtmf``, ``vp8rtp``, ``scaletempo`` et ``rtpmux`` font désormais partie de l’ensemble « Good », ce qui signifie qu’ils font désormais partie des greffons les mieux supportés : * Le [[code DTMF]] est un système utilisée dans la téléphonie pour coder les fréquences de touches (numérotation, serveur vocal), ce greffon rejoint l’ensemble « Good » pour permettre à [Empathy](https://wiki.gnome.org/Empathy) de ne [pas dépendre de « Bad »](](https://bugzilla.gnome.org/show_bug.cgi?id=687416)) et ses très nombreuses dépendances ; * [ScaleTempo](http://scaletempo.sourceforge.net) permet de varier la vitesse de lecture d’un média ; * les greffons ``vp8rtp`` et ``rtpmux`` sont, comme leur nom le laissent deviner, des greffons liés à la transmission multimédia sur RTP, le premier traite de la transmission de flux VP8, le second permet de multiplexer plusieurs streams RTP en un seul. # Le monde se divise en deux catégories : ceux qui ont un pistolet chargé et ceux qui creusent _Toi, tu creuses_ Pour ceux qui se demandent ce que signifient ces ensembles nommés _« Good »_, _« Bad »_ et _« Ugly »_ : en fait dans le projet GStreamer, les greffons sont regroupés selon le support qui leur est accordé, support qui est défini en fonction de la qualité du greffon lui-même, sa licence et d’autre détails et parfois des raisons politiques comme on vient de le voir. 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. Quand aux greffons _« Ugly »_, ce 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](http://fr.wikipedia.org/wiki/Le_Bon,_la_Brute_et_le_Truand) _(The Good, the Bad and the Ugly)_. Cette dépêche rappellera aux lecteurs que les trolls sur le [JPEG 2000 et la norme DCI](http://linuxfr.org/users/gabu/journaux/une-autre-structure-pour-la-diffusion-des-films-appel-a-contribution#comment-1376053) commencent à se faire dangereusement oublier et que la dernière des [dépêches cinéma](http://linuxfr.org/tags/cin%C3%A9ma/public) date sérieusement ! Et si, non contente de chatouiller le troll qui veille, cette dépêche réveillait chez certains d’entre-vous l’ivresse de l’odeur de la poudre, sachez que d’ici la sortie de GStreamer 1.4 vous pouvez rejoindre une partie de [Smokin’Guns](http://www.smokin-guns.org/), un autre logiciel qui n’a pas d’autres rapport avec GStreamer que celui d’être libre et d’aimer le Western quand il est [spaghetti](https://fr.wikipedia.org/wiki/Western_spaghetti).