The Full Wiki

GStreamer: Wikis


Note: Many of our articles have direct quotes from sources you can cite, within the Wikipedia article! This article doesn't yet, but we're working on it! See more info or our list of citable articles.


From Wikipedia, the free encyclopedia

Stable release 0.10.28 / March 9, 2010; 8 day(s) ago (2010-03-09)
Written in C
Operating system Cross-platform
Type Multimedia framework
License GNU Lesser General Public License

GStreamer is a pipeline-based multimedia framework written in the C programming language with the type system based on GObject.

GStreamer allows a programmer to create a variety of media-handling components, including simple audio playback, audio and video playback, recording, streaming and editing. The pipeline design serves as a base to create many types of multimedia applications such as video editors, streaming media broadcasters, and media players.

Designed to be cross-platform, it is known to work on Linux (x86, PowerPC and ARM), Solaris (Intel and SPARC) and OpenSolaris, FreeBSD, OpenBSD, NetBSD, Mac OS X, Microsoft Windows and OS/400. GStreamer has bindings for programming-languages like Python, C++, Perl, GNU Guile and Ruby. GStreamer is free software, licensed under the GNU Lesser General Public License.



The GNOME desktop environment, the primary user of GStreamer technology, has included GStreamer since GNOME version 2.2 and encourages GNOME and GTK+ applications to use it. Other projects also use or support it, such as the Chameleo media platform, the Phonon media framework and the Songbird media player.

GStreamer also operates in embedded devices like the Palm Pre[1], and the Nokia 770, N800, N810 and N900 Internet Tablets running the Maemo operating system.

History and development

Erik Walthinsen founded the GStreamer project in 1999. Many of its core design ideas came from a research project at the Oregon Graduate Institute. Wim Taymans joined the project soon thereafter and greatly expanded on many aspects of the system. Many others around the world have contributed to various degrees since then.

The first major release was 0.1.0 which was announced on 11 January 2001. Not long after, GStreamer picked up its first commercial backer, an embedded Linux company called RidgeRun. Towards the end of January 2001, they hired Erik Walthinsen to develop methods for embedding GStreamer in smaller (cell phone-class) devices. Another RidgeRun employee, Brock A. Frazier, designed the GStreamer logo. RidgeRun later ran into financial trouble and had to let its staff, including Erik Walthinsen go, but GStreamer progressed mostly unaffected.

The project released a series of major releases with 0.2.0 coming out in July 2001, 0.4.0 in September 2002 and 0.8.0 in March 2004. During that period the project also changed its versioning strategy and while the first releases were simply new versions, later on the middle number started signifying release series. This meant the project did release a string of 0.6.x and 0.8.x releases which was meant to stay binary compatible within those release series. Erik Walthinsen more or less left GStreamer development behind during this time as he went on to focus on other ventures.

During the 0.8.x release series the project was struggling a bit. The 0.8.x series was not very popular in the Linux community mostly because of stability issues and a serious lack of features compared to competing projects like Xine, MPlayer or VLC. The project also suffered a bit in terms of lack of leadership as Wim Taymans, who had been the project lead since Erik Walthinsen had left, had also mostly ceased active participation.

In 2004, a new company was founded, Fluendo, which wanted to use GStreamer to write a streaming server Flumotion and also provide multimedia solutions for GStreamer. During this time Fluendo hired most of the core developers including Wim Taymans and attracted the support of companies such as Nokia and Intel to bring GStreamer to a professional level and drive community adoption. With Wim Taymans back at the helm, the core of GStreamer was redesigned and became what is the current 0.10.x series, which had its first release in December 2005.

With a new stable core in place GStreamer gained in popularity in 2006, being used by media players including Totem, Rhythmbox and Banshee with many more to follow.

In 2007, most of the core GStreamer developers left Fluendo, including GStreamer maintainer Wim Taymans who went on to co-found Collabora Multimedia together with other GStreamer veterans, while others joined Sun Microsystems, Oblong and SongBird.

GStreamer has also continued seeing both open source and commercial success and adoption by many different corporations (Nokia, Motorola, Texas Instruments, Freescale, and many more) and has become a very powerful cross platform multimedia framework. hosts the GStreamer project, which accordingly aims to improve interoperability and to share technology between free desktops. Since 2005 Wim Taymans has maintained GStreamer.

The stable release series began with the 0.10.0 release in December 2005.[2] It has maintained API and ABI compatibility since.

The GStreamer community is currently deciding on when to fork for a new development series and aim to release GStreamer 1.0.[3]

Technical overview

GStreamer Technical Overview.svg

GStreamer processes media by connecting a number of processing elements into a pipeline. Each element is provided by a plugin. Elements can be grouped into bins, which can be further aggregated, thus forming a hierarchical graph. This is an example of a filter graph.

Elements communicate by means of pads. A source pad on one element can be connected to a sink pad on another. When the pipeline is in the playing state, data buffers flow from the source pad to the sink pad. Pads negotiate the kind of data that will be sent using capabilities.

The diagram to the right could exemplify playing an MP3 file using GStreamer. The file source reads an MP3 file from a computer's hard-drive and sends it to the MP3 decoder. The decoder decodes the file data and converts it into PCM samples which then pass to the ALSA sound-driver. The ALSA sound-driver sends the PCM sound samples to the computer's speakers.



GStreamer uses a plugin architecture which makes the most of GStreamer's functionality implemented as shared libraries. GStreamer's base functionality contains functions for registering and loading plugins and for providing the fundamentals of all classes in the form of base classes. Plugin libraries get dynamically loaded to support a wide spectrum of codecs, container formats, input/output drivers and effects.

Plugins can be installed semi-automatically when they are first needed. For that purpose distributions can register a backend that resolves feature-descriptions to package-names.

Since version 0.10 the plugins come grouped into three sets (named after the film The Good, the Bad and the Ugly),

Plugin set name Description
Good This package contains the GStreamer plugins from the "good" set, a set of high quality plug-ins under the LGPL license [4] or according to Gstreamer, "contains a set of well-supported plug-ins under our preferred license".[5]
Bad GStreamer Bad Plug-ins comprises a set of plug-ins not up-to-par compared to the rest. They might closely approach good-quality plugins, but they lack something: perhaps a good code review, some documentation, a set of tests, a real live maintainer, or some actual wide use.[6]
Ugly This package contains plugins from the "ugly" set, a set of good-quality plug-ins that might pose distribution problems.[7]

Individual distributions may further sub-classify these plugins: for example Ubuntu groups the "bad" and "ugly" sets into the "Universe" or the "Multiverse" components.

There's also a separate GStreamer FFmpeg plug-in, which is a FFmpeg-based plug-in that supports many media formats such as mpeg1, mpeg2, mpeg4, h261, h263, h264, realvideo, mp3, WMV, FLV, etc.[8][9] It was first released in 2004-02-26, with version number 0.7.1.[10][11] The latest release was in 2009-10-05, version 0.10.9.[10][12]

GStreamer FFmpeg plug-in
Developer(s) GStreamer Team
Initial release 2004-02-26[10]
Stable release 0.10.6 / 2008-11-27
Written in C
Operating system Cross-platform
Platform GStreamer
Development status active
Type Multimedia framework plug-in
License LGPL

See also


  1. ^ "webOS and GStreamer". webOShelp. Retrieved 25 July 2009. 
  2. ^ Release Note - Announcement of first release in 0.10 stable series
  3. ^ "Planning GStreamer 1.0 development". Retrieved 25 July 2009. 
  4. ^ gstreamer0.10-plugins-good package description (Ubuntu 8.04)
  5. ^ GStreamer release notes base plugins 0.10.0
  6. ^ gstreamer0.10-plugins-bad package description (Ubuntu 8.04)
  7. ^ gstreamer0.10-plugins-ugly package description (Ubuntu 8.04)
  8. ^ GStreamer FFmpeg plug-in
  9. ^ ext/ffmpeg/gstffmpegcodecmap.c
  10. ^ a b c GStreamer: news
  11. ^ Release notes for GStreamer FFmpeg plugin 0.7.1 "True Colors"
  12. ^ Release notes for GStreamer FFmpeg Plug-ins 0.10.9 "Shooting the moon"

External links


Up to date as of January 23, 2010

From Wikibooks, the open-content textbooks collection

Gstreamer is a powerful program and library for media processing. Its power lies in the fact that media data streams between elements performing many functions. Elements can be added by means of plugins. Here is an example of a command to convert a FLAC format song to MP3 format:

gst-launch filesrc location = "02 - Duel of the Fates.flac" ! flacdec ! lame ! filesink location = "Duel of the Fates.mp3"

Some of its most popular uses include:

  • Playing music and video (from command line or a program using the library)
  • Format conversion
  • Recording directly to a certain format.

This book will provide an introduction and in-depth tutorial to GStreamer.


Obtaining GStreamer
Quick Examples
Programs Using GStreamer


Got something to say? Make a comment.
Your name
Your email address