Difference between revisions of "GStreamer"

From air
Jump to navigation Jump to search
 
(20 intermediate revisions by 2 users not shown)
Line 5: Line 5:
   
 
==Introduction==
 
==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.
+
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.0 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.
  +
  +
GStreamer works on all major operating systems such as Linux, Android, Windows, Max OS X, iOS, as well as most BSDs, commercial Unixes, Solaris, and Symbian. It has been ported to a wide range of operating systems, processors and compilers. It runs on all major hardware architectures including x86, ARM, MIPS, SPARC and PowerPC, on 32-bit as well as 64-bit, and little endian or big endian.
   
 
==Fonctionnalité==
 
==Fonctionnalité==
Line 15: Line 17:
 
** 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 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.
 
** 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.
 
 
   
 
<center>[[File:Exemple de pipeline.jpeg]]</center>
 
<center>[[File:Exemple de pipeline.jpeg]]</center>
Line 22: Line 22:
 
<center>Exemple de pipeline avec différents Eléments</center>
 
<center>Exemple de pipeline avec différents Eléments</center>
   
 
*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
*Traitements possibles:
 
 
**Diffusion IP en UDP, TCP…
**Streaming: GStreamer propose les briques suivantes pour gérer le streaming:
 
 
**Il est également possible de récupérer des flux venant de serveur HTTP et de WebCam IP
***Encapsultation RTP
 
 
*Encodage:
***Gestion fine de streaming RTP avec gstrtpsession
 
 
**Le nombre (et les propriétés) des codecs disponibles dépendent des systèmes d'exploitation.(87 encodeurs et 226 decodeurs pour linux)
***Gestion des protocoles de controles RTSP et RTCP
 
 
**Présence des codecs standards comme innovants. (MPEG1/2/3/4FLV,H.264, Speex, Theora, Vorbis...)
***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==
 
==API==
Line 50: Line 45:
   
 
==Installation==
 
==Installation==
 
[http://cgit.freedesktop.org/gstreamer/gstreamer Code source du framework]
 
   
 
===Linux/Ubuntu===
 
===Linux/Ubuntu===
  +
  +
Le paquet existe dans les dépôts courants, il suffit donc de l'installer avec ''apt-get'' :
  +
 
<pre>
 
<pre>
 
# 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
 
# 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
 
# gst-inspect
 
 
</pre>
 
</pre>
   
Line 76: Line 70:
 
==Outils==
 
==Outils==
   
[http://colocsbar.blogspot.fr/2014/01/gstreamer-et-serveur-de-streaming-rtsp.html Explication de l'API]
+
*[http://colocsbar.blogspot.fr/2014/01/gstreamer-et-serveur-de-streaming-rtsp.html Explication de l'API]
  +
*[http://blog.nicolargo.com/2009/11/encodage-de-video-avec-gstreamer.html Utilisation filtres]
 
*[http://cgit.freedesktop.org/gstreamer/gstreamer Code source du framework]
  +
*[http://gstreamer.freedesktop.org/bindings/ Languages available]
   
 
===gst-inspect===
 
===gst-inspect===
Line 84: Line 81:
 
# gst-inspect audiotestsrc
 
# gst-inspect audiotestsrc
 
</pre>
 
</pre>
  +
  +
  +
  +
== A savoir ==
  +
Avec Gstreamer on utilisera non pas “|” mais “!” pour ne pas interférer avec le shell.
   
   
Line 185: Line 187:
 
==gst-launch sur MacOS==
 
==gst-launch sur MacOS==
   
  +
Pour ne pas avoir de problèmes de compatibilités, il faut faire des alias pour certaine commandes.
 
<pre>
 
<pre>
alias gst-launch='/Library/Frameworks/GStreamer.framework/Commands/gst-launch-0.10'
+
alias gst-launch='/Library/Frameworks/GStreamer.framework/Commands/gst-launch-1.0'
alias gst-inspect='/Library/Frameworks/GStreamer.framework/Commands/gst-inspect-0.10'
+
alias gst-inspect='/Library/Frameworks/GStreamer.framework/Commands/gst-inspect-1.0'
  +
</pre>
   
 
Generally I suggest to check which elements are installed on your machine when you are looking for a a specific functionality, e.g.:
  +
<pre>
 
gst-inspect | more
 
gst-inspect | more
  +
</pre>
   
  +
La recherche d'une source passe par un ''inspect'' :
gst-inspect | grep -i video |grep -i source
 
  +
<pre>
 
 
gst-inspect | grep -i source
  +
</pre>
  +
La première comande à lancer pour savoir si GStreamer est bien installé :
  +
<pre>
 
gst-launch videotestsrc ! autovideosink
 
gst-launch videotestsrc ! autovideosink
  +
</pre>
 
  +
Si elle ne marche pas vous pouvez changer la sortie pour spécifier que vous voulez l'écran :
  +
<pre>
 
gst-launch videotestsrc ! osxvideosink
 
gst-launch videotestsrc ! osxvideosink
  +
</pre>
 
  +
Pour accéder à la caméra :
gst-launch wrappercamerabinsrc mode=2 ! video/x-raw, width=320, height=240 ! osxvideosink
 
  +
<pre>
 
 
gst-launch wrappercamerabinsrc mode=2 ! video/x-raw, width=320, height=240 ! osxvideosink sync=false
  +
</pre>
  +
Pour lancer une vidéo à partir d'une URL
  +
<pre>
  +
gst-launch-1.0 playbin \
  +
uri=http://docs.gstreamer.com/media/sintel_trailer-480p.webm
 
</pre>
 
</pre>
   
Catch flow form desktop : [http://stackoverflow.com/questions/35155112/gstreamer-flow-for-os-x-desktop/35166500#35166500 StackOverFlow]
+
Catch flow form desktop : [http://stackoverflow.com/questions/35155112/gstreamer-flow-for-os-x-desktop/35166500#35166500 StackOverFlow]. For other OS :
  +
* Ubuntu/linux : v4l2src means "video-for-linux (ver.2) source"
 
  +
* Windows : dx9screencapsrc
v4l2src means "video-for-linux (ver.2) source". since you are not running "linux", it is not so surprising that you cannot use "v4l2".
 
 
generally i suggest to check which elements are installed on your machine when you are looking for a a specific functionality, e.g.:
 
 
==Liens==
 
* http://wiki.xiph.org/GST_cookbook
 
   
 
==Liens==
 
==Liens==
Line 214: Line 228:
 
* http://blog.nicolargo.com/2009/01/introduction-a-gstreamer-le-framework-multimedia.html
 
* http://blog.nicolargo.com/2009/01/introduction-a-gstreamer-le-framework-multimedia.html
 
* http://www.cin.ufpe.br/~cinlug/wiki/index.php/Introducing_GStreamer
 
* http://www.cin.ufpe.br/~cinlug/wiki/index.php/Introducing_GStreamer
 
* http://wiki.xiph.org/GST_cookbook
  +
* http://fr.slideshare.net/nicolashennion/introduction-gstreamer-39024572
  +
* http://www.einarsundgren.se/gstreamer-basic-real-time-streaming-tutorial/

Latest revision as of 16:55, 14 March 2016

Streaming webcam avec GStreamer sur Raspberry Pi

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.0 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.

GStreamer works on all major operating systems such as Linux, Android, Windows, Max OS X, iOS, as well as most BSDs, commercial Unixes, Solaris, and Symbian. It has been ported to a wide range of operating systems, processors and compilers. It runs on all major hardware architectures including x86, ARM, MIPS, SPARC and PowerPC, on 32-bit as well as 64-bit, and little endian or big endian.

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.jpeg
Exemple de pipeline avec différents Eléments
  • 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

Liste des fonctions : Full 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

Installation

Linux/Ubuntu

Le paquet existe dans les dépôts courants, il suffit donc de l'installer avec apt-get :

# 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

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'

Outils

gst-inspect

print info about a GStreamer plugin or element

# gst-inspect audiotestsrc


A savoir

Avec Gstreamer on utilisera non pas “|” mais “!” pour ne pas interférer avec le shell.


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

# gst-launch filesrc location=./videos/big_buck_bunny_1080p_stereo.ogg ! oggdemux ! theoradec ! xvimagesink


TODO commentaire

# gst-launch filesrc location=./videos/big_buck_bunny_1080p_stereo.ogg ! oggdemux ! theoradec ! xvimagesink


TODO commentaire

# gst-launch filesrc location=./videos/big_buck_bunny_1080p_stereo.ogg ! oggdemux ! theoradec ! xvimagesink


TODO commentaire

# gst-inspect filesrc

# gst-launch filesrc location=./videos/big_buck_bunny_1080p_stereo.ogg ! oggdemux ! theoradec ! xvimagesink


TODO commentaire

# gst-launch filesrc location=./videos/big_buck_bunny_1080p_stereo.ogg ! oggdemux ! theoradec ! xvimagesink


TODO commentaire

# gst-launch filesrc location=./videos/myvideo_480p_stereo.ogg ! oggdemux ! theoradec ! xvimagesink


TODO commentaire

# 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

# gst-launch ???

Pour le récepteur

# gst-launch ???

gst-inspect

GstEditor

éditeur graphique

File:GstEditor.png

gst-launch sur MacOS

Pour ne pas avoir de problèmes de compatibilités, il faut faire des alias pour certaine commandes.

alias gst-launch='/Library/Frameworks/GStreamer.framework/Commands/gst-launch-1.0'
alias gst-inspect='/Library/Frameworks/GStreamer.framework/Commands/gst-inspect-1.0'

Generally I suggest to check which elements are installed on your machine when you are looking for a a specific functionality, e.g.:

gst-inspect | more

La recherche d'une source passe par un inspect :

gst-inspect | grep -i source

La première comande à lancer pour savoir si GStreamer est bien installé :

gst-launch videotestsrc ! autovideosink 

Si elle ne marche pas vous pouvez changer la sortie pour spécifier que vous voulez l'écran :

gst-launch videotestsrc ! osxvideosink 

Pour accéder à la caméra :

gst-launch wrappercamerabinsrc mode=2  ! video/x-raw, width=320, height=240 !  osxvideosink sync=false

Pour lancer une vidéo à partir d'une URL

gst-launch-1.0 playbin \
    uri=http://docs.gstreamer.com/media/sintel_trailer-480p.webm

Catch flow form desktop : StackOverFlow. For other OS :

  • Ubuntu/linux : v4l2src means "video-for-linux (ver.2) source"
  • Windows : dx9screencapsrc

Liens