Païou : Mandriva Linux depuis 2002. Aujourd'hui, c'est Mageia Linux
On se lasse de tout, sauf de comprendre.
Attribué à Virgile.
15 mars 2013 : Reprise de la page de l'ancien site de Païou et actualisation.
Pour : linuxien averti.
Gstreamer est un moteur multimedia (ou bibliothèque ou framework).
C'est la partie invisible de beaucoup de lecteurs multimédia : Parole, Exaile, Rhythmbox, Sound Juicer, Totem, Amarok ...
C'est le coeur du lecteur multimédia et il lui permet de traiter le son, de lire des vidéos, de recevoir les flux audio ou vidéo depuis internet ...
Son architecture est modulaire, basée sur des greffons. Elle vous permet de façonner le lecteur en fonction de vos besoins, sans l'alourdir de fonctions inutiles.
En dehors de l'aspect "moteur", servant à d'autres applications, Gstreamer peut également être utilisé directement, en ligne de commande. C'est ce que cette page essaie de vous faire découvrir.
Si l'utilisation en ligne de commande ne vous intéresse pas, cette autre page,
voudrait résumer les éléments les plus importants de Gstreamer : le choix et l'installation des greffons qui vous seront utiles.
Des codages et des formats de fichier, il y en a une foule. Heureusement, seuls quelques uns sont couramment utilisés, mais cela dépend également de vos habitudes.
La page déjà indiquée ci-dessus,
, vous familiarise un peu avec les fichiers les plus courants. Elle vous indiquera également quels sont les greffons à utiliser pour pouvoir lire le contenu d'un fichier multimédia (type de fichier, codage du son, codage de la vidéo). Revenez ici, après.
Même en faisant une installation minimale (serveur graphique avec bureau IceWM-minimal), quelques paquetages de gstreamer sont déjà installés.
C'est drakxtools, par l'intermédiaire de ses dépendances, qui demande :
drakxtools -> perl-Gtk2-WebKit -> libwebkitgtk1.0_0 -> libgstreamer-plugins-base0.10 -> libgst-gir0.10 -> libgstreamer0.10_0 -> gstreamer0.10-tools
L'outil en ligne de commande (gstreamer0.10-tools) est dons déjà installé.
Si votre lecteur audio ou votre lecteur multimédia fait appel à Gstreamer, votre lecteur a déjà installé certains greffons.
Il vous reste, éventuellement, à installer des greffons supplémentaires, afin de compléter le nombre des formats audio et vidéo qui pourront être lus.
L'outil graphique d'installation d'un paquetage vous propose d'installer automatiquement les dépendances de ce paquetage, c'est-à-dire les paquetages qui sont indispensables au bon fonctionnement. Mais il installe souvent des paquetages suggérés, sans vous demander si vous en voulez.
C'est pour ceci que je préfère l'installation en ligne de commande, avec urpmi --no-suggest
Le paquetage gstreamer0.10-tools (déjà installé par défaut) comprend 6 commandes différentes :
Comme d'habitude, man la_commande vous donne les renseignements complets (en anglais).
Gstreamer est une boîte à outils, permettant de traiter des données multimédia (son et vidéo) de bout en bout : de l'acquisition de la source (fichier, flux réseau, webcam, micro...) au traitement (effet vidéo, audio, encodage) et à la diffusion (sur l'écran, dans un fichier, sur le réseau).
Un pipeline permet de décrire toutes les opérations nécessaires à la lecture correcte de la source, au traitement des informations et à leur diffusion.
La sortie d'un élément du pipeline constitue l'entrée de l'élément suivant.
La figure ci-contre représente un petit pipeline :
Un pipeline est constitué de :
Deux exemples d'écriture d'un pipeline, très simples (sans filtre), pour tester la chaîne audio et la chaîne vidéo. Ces exemples supposent que les greffons adéquats sont installés, ici, gstreamer0.10-plugins-base.
(Voir le chapitre "Les greffons" de la page
).
Vous remarquerez le point d'exclamation qui sépare les différents éléments du pipeline.
Selon votre configuration, la sortie "alsasink" peut être remplacée par un autre greffon de sortie, "esdsink", "osssink", "osxaudiosink", "pulsesink", ou "artsdsink"
De même, "xvimagesink" pourra être remplacé par "ximagesink", "sdlvideosink", "osxvideosink", "aasink" ou "cacasink".
Certains éléments vont avoir plusieurs sorties ou plusieurs entrées. C'est le cas, par exemple, d'un démultiplexeur.
Gardez en mémoire que les différentes sorties n'acceptent pas forcément les mêmes formats et qu'une sortie donnée accepte des formats différents en fonction de la machine sur laquelle vous travaillez.
Ainsi, vous pouvez être amenés à ajouter des convertisseurs tels que "audioconvert" et "audioresample" (pour l'audio) ou "ffmpegcolorspace" (pour la video), juste avant la sortie, pour que le pipeline fonctionne.
En général, le signal émis par la source est codé (à part "audiotestsrc"). Il faut alors utiliser un décodeur approprié, par exemple "vorbisdec".
Si, en plus, votre source est un fichier ou un flux conteneur, il faut d'abord démêler l'audio, la vidéo et les sous-titres. Il faut un démultiplexeur tel que "oggdemux".
Vous avez certainement retenu que Gstreamer est un système modulaire. Vous pourrez donc l'adapter à vos besoins, en installant uniquement les greffons qui vous intéressent.
Les exemples ci-dessous supposent toujours que les greffons utilisés soient installés.
D'une façon générale, pour écrire un pipeline, il faut savoir décomposer les différentes actions à réaliser.
L'exemple ci-dessus pourrait s'écrire :
lire ! extraire ! décoder ! convertir ! écouter
Ce qui donne le pipeline suivant, pour lire un fichier .ogg :
gst-launch-0.10 filesrc location=fichier.ogg ! oggdemux ! vorbisdec ! audioconvert ! alsasink
Il faut lire le fichier, décoder, convertir, geler (pour avoir le temps de voir l'image), visionner
gst-launch-0.10 filesrc location=chemin/image.png ! pngdec ! ffmpegcolorspace ! freeze ! xvvideosink

Pour un fichier .mp3, extraire et décoder se font simultanément. Le pipeline devient :
gst-launch-0.10 filesrc location=fichier.mp3 ! mad ! audioconvert ! autoaudiosink
Vous voulez transcoder un fichier .mp3 dans un format libre, .ogg
Les actions deviennent :
ouvrir ! extraire/décoder ! convertir/encoder ! multiplexer ! enregistrer
Ce qui donne le pipeline suivant :
gst-launch-0.10 filesrc location=fichier.mp3 ! mad ! audioconvert ! vorbisenc ! oggmux ! filesink location=fichier.ogg
Vorbis permet d'encoder avec différents facteurs de qualité, -1, 0, 1, 2 ... 10. Pour Gstreamer, il faut indiquer entre 0 et 1 par pas de 0.1
Exemple ! vorbisenc quality=0.6 !
Les fichiers audio peuvent contenir des meta-data
gst-launch-0.10 filesrc location=fichier.mp3 ! id3demux ! fakesink -t
Vous voulez voir les images d'une vidéo au format .ogg
Les actions deviennent :
ouvrir ! extraire ! décoder la vidéo ! convertir ! visionner
Ce qui donne le pipeline suivant, pour lire un fichier .ogg :
gst-launch-0.10 filesrc location=fichier.ogg ! oggdemux ! theoradec ! ffmpegcolorspace ! autovideosink
Le démultiplexeur permet d'extraire les différents éléments contenus dans le conteneur : le son, l'image, éventuellement les sous-titres.
Sa sortie doit donc servir plusieurs fois.
Les actions à réaliser deviennent : (remarquez l'écriture sur plusieurs lignes, juste dans un but de clarification. Le caractère \ attache les lignes)
ouvrir le fichier ! extraire \
sortie_demux ! décoder l'image ! convertir ! afficher \
sortie_demux ! décoder le son ! convertir ! écouter
Dans la création du pipeline, un nouvel élément intervient, ici : oggdemux0. C'est la sortie de l'élément oggdemux.
Par défaut, le nom de la sortie correspond au nom de l'élément qui génère la sortie, complété par un indice (0).
Cet élément sortie, suivi d'un point, sert en tant que départ d'un nouveau pipeline. Il est associé à un élément queue. Ce dernier permet de réaliser la simultanéité des flux audio et vidéo.
Le pipeline devient :
gst-launch-0.10 filesrc location=fichier.ogg ! oggdemux \
oggdemux0. ! queue ! theoradec ! ffmpegcolorspace ! autovideosink \
oggdemux0. ! queue ! vorbisdec ! audioconvert ! autoaudiosink
Il est possible d'incruster du texte dans une vidéo. Cela peut être un texte fixe avec textoverlay, le temps écoulé avec timeoverlay, ou l'horloge avec clockoverlay. Des paramètres sont possibles.
gst-launch-0.10 -v videotestsrc ! video/x-raw-yuv, framerate=25/1, width=640, height=360 ! \
timeoverlay halign=left valign=bottom text="Temps écoulé :" shaded-background=true ! \
xvimagesink
L'élément decodebin regroupe le démultiplexeur et le décodeur adaptés automatiquement au type de flux traité.
L'exemple vidéo avec son devient :
gst-launch-0.10 filesrc location=fichier.ogg ! decodebin \
decodebin0. ! queue ! ffmpegcolorspace ! autovideosink \
decodebin0. ! queue ! audioconvert ! autoaudiosink
Il faut décoder l'image et envoyer simultanément image et son. Voici un exemple :
gst-launch-0.10 filesrc location=fichier.audio ! decodebin ! audioconvert ! autoaudiosink \
filesrc location=image.png ! pngdec ! ffmpegcolorspace ! autovideosink
Des éléments tels que demux, mux, decodebin ... sont utilisés plusieurs fois dans un pipeline.
Il est intéressant de leur donner un nom très court, pour simplifier encore l'écriture.
L'exemple précédent devient :
gst-launch-0.10 filesrc location=fichier.ogg ! decodebin name=d \
d. ! queue ! ffmpegcolorspace ! autovideosink \
d. ! queue ! audioconvert ! autoaudiosink
Le processus peut s'écrire :
ouvrir le fichier ! extraire \
sortie_demux ! traitement de l'image \
sortie_demux ! traitement du son \
multiplexage ! enregistrement
Le pipeline correspondant s'écrit :
gst-launch-0.10 filesrc location=fichier.wav ! decodebin name=d \
d. ! queue ! ffmpegcolorspace ! theoraenc quality=32 ! m. \
d. ! queue ! audioconvert ! vorbisenc quality=0.6 ! m. \
oggmux name=m ! filesink location=fichier.ogg
