Détaillons un peu cette ligne:
# gst-launch filesrc location=./Vidéos/big_buck_bunny_480p_stereo.ogg ! oggdemux ! theoradec ! xvimagesink
La commande gst-launch permet de tester un framework en ligne de commande.
# gst-launch filesrc location=./Vidéos/big_buck_bunny_480p_stereo.ogg ! oggdemux ! theoradec ! xvimagesink
Nous appelons en premier le plugin filesrc qui est un plugin qui prend en entrée un fichier multimédia (dont le nom est passé par le paramètre location).
Pour avoir une documentation précise du plugin (et des ses paramètres), vous pouvez utilsier la commande suivante:
# gst-inspect filesrc
# gst-launch filesrc location=./Vidéos/big_buck_bunny_480p_stereo.ogg ! oggdemux ! theoradec ! xvimagesink
Le deuxième plugin utilisé (il faut utiliser le ! entre deux plugins, c’est un peu l’équivalent d’un | pour les commandes Unix) est oggdemux, qui prend en entrée un flux vidéo OGG (fourni dans notre cas par filesrc) et qui de décode.
# gst-launch filesrc location=./Vidéos/big_buck_bunny_480p_stereo.ogg ! oggdemux ! theoradec ! xvimagesink
Ensuite on utilise le plugin theoradec pour décoder la vidéo dont le format est Theora.
# gst-launch filesrc location=./Vidéos/big_buck_bunny_480p_stereo.ogg ! oggdemux ! theoradec ! xvimagesink
Ce dernier plugin (xvimagesink) prend en entrée un flux video décodé (format RAW) et l’affiche sur l’écran en utilisant Xv (XFree86 Video).
Comme on peut le voir, cette logique d’enchaînement de tâches est très intuitive.
Ainsi, si l’on souhaite que notre lecteur vidéo redimmensionne l’image avant de l’afficher, il suffit d’ajouter les plugins suivants (videoscale):
# gst-launch filesrc location=../Vidéos/big_buck_bunny_480p_stereo.ogg ! oggdemux ! theoradec ! videoscale ! video/x-raw-yuv,height=240 ! xvimagesink
Simple non 🙂 ?
D’autres exemples…
Récupération d’un flux venant d’une caméra (sur /dev/video0), redimensionnement en 240 lignes et affichage sur l’écran:
# gst-launch v4l2src ! videoscale ! video/x-raw-yuv,height=240 ! xvimagesink
Récupération d’un flux venant d’une caméra (sur /dev/video0), redimensionnement en 240 lignes, application d’un filtre EffectTV (quarktv qui rend flou les objets en mouvement) et affichage sur l’écran:
# gst-launch v4l2src ! videoscale ! video/x-raw-yuv,height=240 ! ffmpegcolorspace ! quarktv ! ffmpegcolorspace ! xvimagesink
Dans nos premiers exemples, nous avons traités notre flux de manière séquentielle. Si nous voulons, par exemple, ajouter l’audio à notre lecteur multimédia il faut que GStreamer gére la vidéo et le son en parallèle. On va utiliser le plugin queue qui a pour fonction de créer un nouveau « thread » GStreamer.

Notre lecteur multimédia devient donc:
# gst-launch filesrc location=./Vidéos/big_buck_bunny_480p_stereo.ogg ! oggdemux name=demux \
demux. ! queue ! vorbisdec ! audioconvert ! audioresample ! osssink \
demux. ! queue ! theoradec ! xvimagesink
On peut améliorer le lecteur en laissant GStreamer sélectionner lui même les sorties audio et vidéo (autodetect):
# gst-launch filesrc location=./Vidéos/big_buck_bunny_480p_stereo.ogg ! oggdemux name=demux \
demux. ! queue ! vorbisdec ! audioconvert ! audioresample ! autoaudiosink \
demux. ! queue ! theoradec ! autovideosink
Je m’arrête là pour ce premier article sur GStreamer. Nous reviendrons bientôt sur ce passionnant sujet notamment en abordant l’encodage audio et vidéo et le streaming sur le réseau.Je vous laisse consulter la longue liste des plugins pour trouver votre bonheur. N’hésitez pas à proposer vos framework GStreamer en ligne de commande dans les commentaires 😉