| <chapter id="cha-motivation"> |
| <title>Motivation</title> |
| <para> |
| Linux has historically lagged behind other operating systems in the multimedia |
| arena. Microsoft's Windows[tm] and Apple's MacOS[tm] both have strong support |
| for multimedia devices, multimedia content creation, |
| playback, and realtime processing. Linux, on the other hand, has a poorly integrated |
| collection of multimedia utilities and applications available, which can hardly compete |
| with the professional level of software available for MS Windows and MacOS. |
| </para> |
| |
| <sect1 id="sec-motivation-problems"> |
| <title>Current problems</title> |
| <para> |
| We descibe the typical problems in todays media handling on Linux. |
| </para> |
| <sect2 id="sec-motivation-duplicate"> |
| <title>Multitude of duplicate code</title> |
| <para> |
| The Linux user who wishes to hear a sound file must hunt through their collection of |
| sound file players in order to play the tens of sound file formats in wide use today. |
| Most of these players basically reimplement the same code over and over again. |
| </para> |
| <para> |
| The Linux developer who wishes to embed a video clip in their application must use |
| crude hacks to run an external video player. There is no library available that a |
| developer can use to create a custom media player. |
| </para> |
| |
| </sect2> |
| <sect2 id="sec-motivation-goal"> |
| <title>'One goal' media players/libraries</title> |
| <para> |
| Your typical MPEG player was designed to play MPEG video and audio. Most of |
| these players have implemented a complete infrastructure focused on |
| achieving their only goal: playback. No provisions were made to add |
| filters or special effects to the video or audio data. |
| </para> |
| <para> |
| If I wanted to convert an MPEG2 video stream into an AVI file, my best |
| option would be to take all of the MPEG2 decoding algorithms out |
| of the player and duplicate them into my own AVI encoder. These |
| algorithms cannot easily be shared accross applications. |
| </para> |
| <para> |
| Attempts have been made to create libraries for handling various media types. |
| Because they focus on a very specific media type (avifile, libmpeg2, ...), |
| significant work is needed to integrate them due to a lack of a common API. |
| GStreamer allows you to wrap these libraries with a common API, which |
| significantly simplifies integration and reuse. |
| </para> |
| </sect2> |
| |
| <sect2 id="sec-motivation-plugin"> |
| <title>Non unified plugin mechanisms</title> |
| <para> |
| Your typical media player might have a plugin for different media |
| types. Two media players will typically implement their own plugin |
| mechanism so that the codecs cannot be easily exchanged. |
| </para> |
| <para> |
| The lack of a unified plugin mechanism also seriously hinders the |
| creation of binary only codecs. No company is willing to port their |
| code to all the different plugin mechanisms. |
| </para> |
| <para> |
| While GStreamer also uses it own plugin system it offers a very rich |
| framework for the plugin developper and ensures the plugin can be used |
| in a wide range of applications, transparently interacting with other |
| plugins. |
| </para> |
| </sect2> |
| |
| <sect2 id="sec-motivation-network"> |
| <title>Provision for network transparency</title> |
| <para> |
| No infrastructure is present to allow network transparent media |
| handling. A distributed MPEG encoder will typically duplicate the |
| same encoder algorithms found in a non-distributed encoder. |
| </para> |
| <para> |
| No provisions have been made for emerging technologies such as |
| the GNOME object embedding using Bonobo. |
| </para> |
| <para> |
| While the GStreamer core does not use network transparent technologies |
| at the lowest level, it shouldn't be hard to create a wrapper around the |
| core components. |
| </para> |
| </sect2> |
| |
| <sect2 id="sec-motivation-catchup"> |
| <title>Catch up with the Windows(tm) world</title> |
| <para> |
| We need solid media handling if we want to see Linux succeed on |
| the desktop. |
| </para> |
| <para> |
| We must clear the road for commercially backed codecs and multimedia |
| applications so that Linux can become an option for doing multimedia. |
| </para> |
| </sect2> |
| </sect1> |
| </chapter> |