Integration
&GStreamer; tries to integrate closely with operating systems (such
as Linux and UNIX-like operating systems, OS X or Windows) and desktop
environments (such as GNOME or KDE). In this chapter, we'll mention
some specific techniques to integrate your application with your
operating system or desktop environment of choice.
Linux and UNIX-like operating systems
&GStreamer; provides a basic set of elements that are useful when
integrating with Linux or a UNIX-like operating system.
For audio input and output, &GStreamer; provides input and
output elements for several audio subsystems. Amongst others,
&GStreamer; includes elements for ALSA (alsasrc, alsamixer,
alsasink), OSS (osssrc, ossmixer, osssink) and Sun audio
(sunaudiosrc, sunaudiomixer, sunaudiosink).
For video input, &GStreamer; contains source elements for
Video4linux (v4lsrc, v4lmjpegsrc, v4lelement and v4lmjpegisnk)
and Video4linux2 (v4l2src, v4l2element).
For video output, &GStreamer; provides elements for output
to X-windows (ximagesink), Xv-windows (xvimagesink; for
hardware-accelerated video), direct-framebuffer (dfbimagesink)
and openGL image contexts (glsink).
GNOME desktop
&GStreamer; has been the media backend of the GNOME desktop since GNOME-2.2
onwards. Nowadays, a whole bunch of GNOME applications make use of
&GStreamer; for media-processing, including (but not limited to)
Rhythmbox,
Totem
and Sound
Juicer.
Most of these GNOME applications make use of some specific techniques
to integrate as closely as possible with the GNOME desktop:
GNOME applications call gnome_program_init ()
to parse command-line options and initialize the necessary gnome
modules. &GStreamer; applications would normally call
gst_init () to do the same for GStreamer.
This would mean that only one of the two can parse command-line
options. To work around this issue, &GStreamer; can provide a
GLib GOptionGroup which can be passed to
gnome_program_init (). The following
example requires Gnome-2.14 or newer (previous libgnome versions
do not support command line parsing via GOption yet but use the
now deprecated popt)
#include <gnome.h>
#include <gst/gst.h>
static gchar **cmd_filenames = NULL;
static GOptionEntries cmd_options[] = {
/* here you can add command line options for your application. Check
* the GOption section in the GLib API reference for a more elaborate
* example of how to add your own command line options here */
/* at the end we have a special option that collects all remaining
* command line arguments (like filenames) for us. If you don'
* need this, you can safely remove it */
{ G_OPTION_REMAINING, 0, 0, G_OPTION_ARG_FILENAME_ARRAY, &cmd_filenames,
"Special option that collects any remaining arguments for us" },
/* mark the end of the options array with a NULL option */
{ NULL, }
};
/* this should usually be defined in your config.h */
#define VERSION "0.0.1"
gint
main (gint argc, gchar **argv)
{
GOptionContext *context;
GOptionGroup *gstreamer_group;
GnomeProgram *program;
context = g_option_context_new ("gnome-demo-app");
/* get command line options from GStreamer and add them to the group */
gstreamer_group = gst_init_get_option_group ();
g_option_context_add_group (context, gstreamer_group);
/* add our own options. If you are using gettext for translation of your
* strings, use GETTEXT_PACKAGE here instead of NULL */
g_option_context_add_main_entries (context, cmd_options, NULL);
program = gnome_program_init ("gnome-demo-app", VERSION
LIBGNOMEUI_MODULE, argc, argv,
GNOME_PARAM_HUMAN_READABLE_NAME, "Gnome Demo",
GNOME_PARAM_GOPTION_CONTEXT, context,
NULL);
/* any filenames we got passed on the command line? parse them! */
if (cmd_filenames != NULL) {
guint i, num;
num = g_strv_length (cmd_filenames);
for (i = 0; i < num; ++i) {
/* do something with the filename ... */
g_print ("Adding to play queue: %s\n", cmd_filenames[i]);
}
g_strfreev (cmd_filenames);
cmd_filenames = NULL;
}
[..]
}
GNOME stores the default video and audio sources and sinks in GConf.
&GStreamer; provides a number of elements that create audio and
video sources and sinks directly based on those GConf settings.
Those elements are: gconfaudiosink, gconfvideosink, gconfaudiosrc
and gconfvideosrc. You can create them with
gst_element_factory_make () and use them
directly just like you would use any other source or sink element.
All GNOME applications are recommended to use those elements.
&GStreamer; provides data input/output elements for use with the
GNOME-VFS system. These elements are called gnomevfssrc
and gnomevfssink
.
KDE desktop
&GStreamer; has been proposed for inclusion in KDE-4.0. Currently,
&GStreamer; is included as an optional component, and it's used by
several KDE applications, including AmaroK, JuK,
KMPlayer and
Kaffeine.
Although not yet as complete as the GNOME integration bits, there
are already some KDE integration specifics available. This list will
probably grow as &GStreamer; starts to be used in KDE-4.0:
AmaroK contains a kiosrc element, which is a source element that
integrates with the KDE VFS subsystem KIO.
OS X
&GStreamer; provides native video and audio output elements for OS X.
It builds using the standard development tools for OS X.
Windows
&GStreamer; builds using Microsoft Visual C .NET 2003 and using Cygwin.