GStreamer



''GStreamer is a library for constructing graphs of media-handling components. The applications it supports range from simple Ogg/Vorbis playback, audio/video streaming to complex audio (mixing) and video (non-linear editing) processing''

Introduction
GStreamer est un Framework multimédia avec une license GNU LGPL. Il permet la manipulation de flux audio et vidéos. Cette biblothèque logcielle est développé en C, depuis plus de 10 ans. Avec une première version sortie le 31 octobre 1999, la version 1.O de GStreamer est attendue pour fin 2011. Fonctionnant complètement sous UNIX, ce framework est également utilisable sous windows et macOS mais de façon limitée.

Fonctionnalité
Principe


 * Manipulation de flux audio, vidéo,via des pipelines. Ces pipelines sont composés d’éléments ayant une fonction qui leur est propre. Il existe trois types d'éléments:
 * les éléments sources ("source element"). Ils produisent des données. Par exemple une webcam qui enregistre une vidéo ou un micro avec un flux audio.
 * les éléments de sorties ("sink element"). Ils ne produisent pas de donnée. Ils sont donc souvent en bout de pipeline. Par exemple, l'affichage sur une écran, ou la diffusion d'un son avec des hauts parleurs.
 * les éléments de filtrage ("filter element"). Ils ont une ou plusieurs entrées et une ou plusieurs sorties. Ils effectuent des traitements sur les données et les réinjecte dans le pipeline. Par exemple, convertir un flux pour qu'il soit lisible par la sortie, ou effectuer une déformation de l'image.



Exemple de pipeline avec différents Eléments


 * Traitements possibles:
 * Streaming: GStreamer propose les briques suivantes pour gérer le streaming:
 * Encapsultation RTP
 * Gestion fine de streaming RTP avec gstrtpsession
 * Gestion des protocoles de controles RTSP et RTCP
 * Diffusion IP en UDP, TCP…
 * Il est également possible de récupérer des flux venant de serveur HTTP et de WebCam IP


 * Encodage
 * Le nombre (et les propriétés) des codecs disponibles dépendent des systèmes d'exploitation.(87 encodeurs et 226 decodeurs pour linux)
 * Présence des codecs standards comme innovants. (MPEG1/2/3/4FLV,H.264, Speex, Theora, Vorbis...)

API

 * Java: librairie gstreamer-java
 * Python: librairie gst-python
 * Android

Plus d'information: http://gstreamer.freedesktop.org/bindings/

Un premier coup d'oeil avec l'exemple "HelloWorld" de l'AI Gtreamer http://gstreamer.freedesktop.org/data/doc/gstreamer/head/manual/html/chapter-helloworld.html#section-hello-img

Linux/Ubuntu

 * 1) sudo apt-get install gstreamer0.10-tools gstreamer0.10-plugins-base gstreamer0.10-plugins-good gstreamer0.10-plugins-ugly gstreamer0.10-plugins-bad gstreamer0.10-ffmpeg


 * 1) gst-inspect

MacOS X
Téléchargez et installez le package .pkg, de la version la plus récent : Toutes les versions.

Les sources et les exécutables sont dans : /Library/Frameworks/GStreamer.framework

Pour avoir les exécutables directement en ligne de commandes, ajouter à votre PATH : /Library/Frameworks/GStreamer.framework/Commands

La version 1.0 donne des commandes différentes entre MacOS et Ubuntu, il faut donc ajouter des aliases pour compenser.

Exemples:
 * alias gst-launch='gst-launch-1.0'
 * alias gst-inspect='gst-inspect-1.0'

gst-inspect
print info about a GStreamer plugin or element


 * 1) gst-inspect audiotestsrc

gst-launch
assemblage des pipelines en ligne de commande

Exemple

Récupérez premièrement la vidéo gratuite Big Buck Bunny sur http://www.bigbuckbunny.org/index.php/download/

TODO commentaire
 * 1) gst-launch filesrc location=./videos/big_buck_bunny_1080p_stereo.ogg ! oggdemux ! theoradec ! xvimagesink

TODO commentaire
 * 1) gst-launch filesrc location=./videos/big_buck_bunny_1080p_stereo.ogg ! oggdemux ! theoradec ! xvimagesink

TODO commentaire
 * 1) gst-launch filesrc location=./videos/big_buck_bunny_1080p_stereo.ogg ! oggdemux ! theoradec ! xvimagesink

TODO commentaire
 * 1) gst-inspect filesrc


 * 1) gst-launch filesrc location=./videos/big_buck_bunny_1080p_stereo.ogg ! oggdemux ! theoradec ! xvimagesink

TODO commentaire
 * 1) gst-launch filesrc location=./videos/big_buck_bunny_1080p_stereo.ogg ! oggdemux ! theoradec ! xvimagesink

TODO commentaire
 * 1) gst-launch filesrc location=./videos/myvideo_480p_stereo.ogg ! oggdemux ! theoradec ! xvimagesink

TODO commentaire
 * 1) gst-launch filesrc location=../videos/big_buck_bunny_1080p_stereo.ogg ! oggdemux ! theoradec ! videoscale ! video/x-raw-yuv,height=240 ! xvimagesink

gst-launch v4l2src ! videoscale ! video/x-raw-yuv,height=240 ! xvimagesink Remarque : v4l2src signifie "video-for-linux (ver.2) source".

gst-launch v4l2src ! videoscale ! video/x-raw-yuv,height=240 ! ffmpegcolorspace ! quarktv ! ffmpegcolorspace ! xvimagesink

gst-launch filesrc location=./videos/big_buck_bunny_1080p_stereo.ogg ! oggdemux name=demux demux. ! queue ! vorbisdec ! audioconvert ! audioresample ! osssink demux. ! queue ! theoradec ! xvimagesink

gst-launch filesrc location=./videos/big_buck_bunny_1080p_stereo.ogg ! oggdemux name=demux demux. ! queue ! vorbisdec ! audioconvert ! audioresample ! autoaudiosink demux. ! queue ! theoradec ! autovideosink

Gst-launch en réseau (multicast) TODO commentaire Pour le serveur
 * 1) gst-launch ???

Pour le récepteur
 * 1) gst-launch ???

GstEditor
éditeur graphique



gst-launch sur MacOS
alias gst-launch='/Library/Frameworks/GStreamer.framework/Commands/gst-launch-0.10' alias gst-inspect='/Library/Frameworks/GStreamer.framework/Commands/gst-inspect-0.10'

gst-inspect | more

gst-inspect | grep -i video |grep -i source

gst-launch videotestsrc ! autovideosink

gst-launch videotestsrc ! osxvideosink

Liens

 * http://wiki.xiph.org/GST_cookbook

Liens

 * http://gstreamer.freedesktop.org
 * http://blog.nicolargo.com/2009/01/introduction-a-gstreamer-le-framework-multimedia.html
 * http://www.cin.ufpe.br/~cinlug/wiki/index.php/Introducing_GStreamer