| <chapter id="chapter-gstreamer"> |
| <title>What is &GStreamer;?</title> |
| |
| <!-- ############ sect1 ############# --> |
| |
| <!-- <sect1 id="section-intro-what"> --><!-- synchronize with PWG --> |
| <para> |
| &GStreamer; is a framework for creating streaming media applications. |
| The fundamental design comes from the video pipeline at Oregon Graduate |
| Institute, as well as some ideas from DirectShow. |
| </para> |
| |
| <para> |
| &GStreamer;'s development framework makes it possible to write any |
| type of streaming multimedia application. The &GStreamer; framework |
| is designed to make it easy to write applications that handle audio |
| or video or both. It isn't restricted to audio and video, and can |
| process any kind of data flow. |
| The pipeline design is made to have little overhead above what the |
| applied filters induce. This makes &GStreamer; a good framework for |
| designing even high-end audio applications which put high demands on |
| latency. |
| </para> |
| |
| <para> |
| One of the most obvious uses of &GStreamer; is using it to build |
| a media player. &GStreamer; already includes components for building a |
| media player that can support a very wide variety of formats, including |
| MP3, Ogg/Vorbis, MPEG-1/2, AVI, Quicktime, mod, and more. &GStreamer;, |
| however, is much more than just another media player. Its main advantages |
| are that the pluggable components can be mixed and matched into arbitrary |
| pipelines so that it's possible to write a full-fledged video or audio |
| editing application. |
| </para> |
| |
| <para> |
| The framework is based on plugins that will provide the various codec |
| and other functionality. The plugins can be linked and arranged in |
| a pipeline. This pipeline defines the flow of the data. Pipelines can |
| also be edited with a GUI editor and saved as XML so that pipeline |
| libraries can be made with a minimum of effort. |
| </para> |
| |
| <para> |
| The &GStreamer; core function is to provide a framework for plugins, |
| data flow and media type handling/negotiation. It also provides an |
| API to write applications using the various plugins. |
| </para> |
| |
| |
| <para> |
| Specifically, &GStreamer; provides |
| <itemizedlist> |
| <listitem><para>an API for multimedia applications</para></listitem> |
| <listitem><para>a plugin architecture</para></listitem> |
| <listitem><para>a pipeline architecture</para></listitem> |
| <listitem><para>a mechanism for media type handling/negotiation</para></listitem> |
| <listitem><para>a mechanism for synchronization</para></listitem> |
| <listitem><para>over 250 plug-ins providing more than 1000 elements</para></listitem> |
| <listitem><para>a set of tools</para></listitem> |
| </itemizedlist> |
| </para> |
| |
| <para> |
| &GStreamer; plug-ins could be classified into |
| <itemizedlist> |
| <listitem><para>protocols handling</para></listitem> |
| <listitem><para>sources: for audio and video (involves protocol plugins)</para></listitem> |
| <listitem><para>formats: parsers, formaters, muxers, demuxers, metadata, subtitles</para></listitem> |
| <listitem><para>codecs: coders and decoders</para></listitem> |
| <listitem><para>filters: converters, mixers, effects, ...</para></listitem> |
| <listitem><para>sinks: for audio and video (involves protocol plugins)</para></listitem> |
| </itemizedlist> |
| </para> |
| |
| <figure float="1" id="section-gstreamer-img"> |
| <title>Gstreamer overview</title> |
| <mediaobject> |
| <imageobject> |
| <imagedata scale="75" fileref="images/gstreamer-overview.ℑ" format="&IMAGE;" /> |
| </imageobject> |
| </mediaobject> |
| </figure> |
| |
| <para> |
| &GStreamer; is packaged into |
| <itemizedlist> |
| <listitem><para>gstreamer: the core package</para></listitem> |
| <listitem><para>gst-plugins-base: an essential exemplary set of elements</para></listitem> |
| <listitem><para>gst-plugins-good: a set of good-quality plug-ins under LGPL</para></listitem> |
| <listitem><para>gst-plugins-ugly: a set of good-quality plug-ins that might pose distribution problems</para></listitem> |
| <listitem><para>gst-plugins-bad: a set of plug-ins that need more quality</para></listitem> |
| <listitem><para>gst-libav: a set of plug-ins that wrap libav for decoding and encoding</para></listitem> |
| <listitem><para>a few others packages</para></listitem> |
| </itemizedlist> |
| </para> |
| |
| |
| </chapter> |