| <chapter id="chapter-intgration"> |
| <title>Integration</title> |
| <para> |
| &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. |
| </para> |
| |
| <!-- ####################################################################### --> |
| <!-- ####################################################################### --> |
| <!-- ####################################################################### --> |
| |
| <sect1 id="section-integration-nix"> |
| <title>Linux and UNIX-like operating systems</title> |
| <para> |
| &GStreamer; provides a basic set of elements that are useful when |
| integrating with Linux or a UNIX-like operating system. |
| </para> |
| <itemizedlist> |
| <listitem> |
| <para> |
| For audio input and output, &GStreamer; provides input and |
| output elements for several audio subsystems. Amongst others, |
| &GStreamer; includes elements for ALSA (alsasrc, |
| alsasink), OSS (osssrc, osssink) Pulesaudio (pulsesrc, pulsesink) |
| and Sun audio (sunaudiosrc, sunaudiomixer, sunaudiosink). |
| </para> |
| </listitem> |
| <listitem> |
| <para> |
| For video input, &GStreamer; contains source elements for |
| Video4linux2 (v4l2src, v4l2element, v4l2sink). |
| </para> |
| </listitem> |
| <listitem> |
| <para> |
| 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). |
| </para> |
| </listitem> |
| </itemizedlist> |
| </sect1> |
| |
| <!-- ####################################################################### --> |
| <!-- ####################################################################### --> |
| <!-- ####################################################################### --> |
| |
| <sect1 id="section-integration-gnome"> |
| <title>GNOME desktop</title> |
| <para> |
| &GStreamer; has been the media backend of the <ulink type="http" |
| url="http://www.gnome.org/">GNOME</ulink> 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) |
| <ulink type="http" url="http://www.rhythmbox.org/">Rhythmbox</ulink>, |
| <ulink type="http" url="https://wiki.gnome.org/Apps/Videos">Videos</ulink> |
| and <ulink type="http" |
| url="https://wiki.gnome.org/Apps/SoundJuicer">Sound |
| Juicer</ulink>. |
| </para> |
| <para> |
| Most of these GNOME applications make use of some specific techniques |
| to integrate as closely as possible with the GNOME desktop: |
| </para> |
| <itemizedlist> |
| <listitem> |
| <para> |
| GNOME applications usually call <function>gtk_init ()</function> |
| to parse command-line options and initialize GTK. &GStreamer; |
| applications would normally call <function>gst_init ()</function> |
| 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 <classname>GOptionGroup</classname> which can be passed to |
| <function>gnome_program_init ()</function>. The following |
| example requires GTK 2.6 or newer (previous GTK versions |
| do not support command line parsing via GOption yet) |
| </para> |
| <programlisting><!-- example-begin gnome.c a --> |
| #include <gtk/gtk.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't |
| * 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, *gtk_group; |
| GError *err = NULL; |
| |
| context = g_option_context_new ("gtk-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); |
| gtk_group = gtk_get_option_group (TRUE); |
| g_option_context_add_group (context, gtk_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); |
| |
| /* now parse the commandline options, note that this already |
| * calls gtk_init() and gst_init() */ |
| if (!g_option_context_parse (ctx, &argc, &argv, &err)) { |
| g_print ("Error initializing: %s\n", err->message); |
| g_clear_error (&err); |
| g_option_context_free (ctx); |
| exit (1); |
| } |
| g_option_context_free (ctx); |
| |
| /* 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; |
| } |
| <!-- example-end gnome.c a --> |
| [..]<!-- example-begin gnome.c b --><!-- |
| return 0; |
| --><!-- example-end gnome.c b --> |
| <!-- example-begin gnome.c c --> |
| } |
| <!-- example-end gnome.c c --></programlisting> |
| </listitem> |
| <listitem> |
| <para> |
| GNOME uses Pulseaudio for audio, use the pulsesrc and |
| pulsesink elements to have access to all the features. |
| </para> |
| </listitem> |
| <listitem> |
| <para> |
| &GStreamer; provides data input/output elements for use with the |
| GIO VFS system. These elements are called <quote>giosrc</quote> |
| and <quote>giosink</quote>. |
| The deprecated GNOME-VFS system is supported too but shouldn't be |
| used for any new applications. |
| </para> |
| </listitem> |
| </itemizedlist> |
| </sect1> |
| |
| <!-- ####################################################################### --> |
| <!-- ####################################################################### --> |
| <!-- ####################################################################### --> |
| |
| |
| |
| <sect1 id="section-integration-kde"> |
| <title>KDE desktop</title> |
| <para> |
| &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 <ulink type="http" |
| url="http://amarok.kde.org/">AmaroK</ulink>, |
| <ulink type="http" |
| url="http://www.xs4all.nl/~jjvrieze/kmplayer.html">KMPlayer</ulink> and |
| <ulink type="http" |
| url="http://kaffeine.sourceforge.net/">Kaffeine</ulink>. |
| </para> |
| <para> |
| 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: |
| </para> |
| <itemizedlist> |
| <listitem> |
| <para> |
| AmaroK contains a kiosrc element, which is a source element that |
| integrates with the KDE VFS subsystem KIO. |
| </para> |
| </listitem> |
| </itemizedlist> |
| </sect1> |
| |
| <!-- ####################################################################### --> |
| <!-- ####################################################################### --> |
| <!-- ####################################################################### --> |
| |
| <sect1 id="section-integration-osx"> |
| <title>OS X</title> |
| <para> |
| &GStreamer; provides native video and audio output elements for OS X. |
| It builds using the standard development tools for OS X. |
| </para> |
| </sect1> |
| |
| <!-- ####################################################################### --> |
| <!-- ####################################################################### --> |
| <!-- ####################################################################### --> |
| |
| <sect1 id="section-integration-win32"> |
| <title>Windows</title> |
| |
| <warning> |
| <para> |
| Note: this section is out of date. GStreamer-1.0 has much better |
| support for win32 than previous versions though and should usually compile |
| and work out-of-the-box both using MSYS/MinGW or Microsoft compilers. The |
| <ulink url="http://gstreamer.freedesktop.org">GStreamer web site</ulink> and the |
| <ulink url="http://news.gmane.org/gmane.comp.video.gstreamer.devel">mailing list |
| archives</ulink> are a good place to check the latest win32-related news. |
| </para> |
| </warning> |
| |
| |
| <para> |
| &GStreamer; builds using Microsoft Visual C .NET 2003 and using Cygwin. |
| </para> |
| |
| <sect2 id="section-win32-build"> |
| <title>Building <application>GStreamer</application> under Win32</title> |
| |
| <para>There are different makefiles that can be used to build GStreamer with the usual Microsoft |
| compiling tools.</para> |
| |
| <para>The Makefile is meant to be used with the GNU make program and the free |
| version of the Microsoft compiler (<ulink url="http://msdn.microsoft.com/visualc/vctoolkit2003/">http://msdn.microsoft.com/visualc/vctoolkit2003/</ulink>). You also |
| have to modify your system environment variables to use it from the command-line. You will also |
| need a working Platform SDK for Windows that is available for free from Microsoft.</para> |
| |
| <para>The projects/makefiles will generate automatically some source files needed to compile |
| GStreamer. That requires that you have installed on your system some GNU tools and that they are |
| available in your system PATH.</para> |
| |
| <para>The GStreamer project depends on other libraries, namely :</para> |
| <itemizedlist> |
| <listitem><para>GLib</para></listitem> |
| <listitem><para>libxml2</para></listitem> |
| <listitem><para>libintl</para></listitem> |
| <listitem><para>libiconv</para></listitem> |
| </itemizedlist> |
| |
| <para>Work is being done to provide pre-compiled GStreamer-1.0 libraries as |
| a packages for win32. Check the <ulink url="http://gstreamer.freedesktop.org"> |
| GStreamer web site</ulink> and check our |
| <ulink url="http://news.gmane.org/gmane.comp.video.gstreamer.devel">mailing list |
| </ulink> for the latest developments in this respect.</para> |
| |
| <note> |
| <title>Notes</title> |
| |
| <para>GNU tools needed that you can find on <ulink url="http://gnuwin32.sourceforge.net/">http://gnuwin32.sourceforge.net/</ulink></para> |
| <itemizedlist> |
| <listitem><para>GNU flex (tested with 2.5.4)</para></listitem> |
| <listitem><para>GNU bison (tested with 1.35)</para></listitem> |
| </itemizedlist> |
| |
| <para>and <ulink url="http://www.mingw.org/">http://www.mingw.org/</ulink></para> |
| <itemizedlist> |
| <listitem><para>GNU make (tested with 3.80)</para></listitem> |
| </itemizedlist> |
| |
| <para>the generated files from the -auto makefiles will be available soon separately on the net |
| for convenience (people who don't want to install GNU tools).</para> |
| </note> |
| </sect2> |
| |
| <sect2 id="section-win32-install"> |
| <title>Installation on the system</title> |
| |
| <para>FIXME: This section needs be updated for GStreamer-1.0.</para> |
| |
| <!-- |
| <para>By default, GStreamer needs a registry. You have to generate it using "gst-register.exe". It will create |
| the file in c:\gstreamer\registry.xml that will hold all the plugins you can use.</para> |
| |
| <para>You should install the GStreamer core in c:\gstreamer\bin and the plugins in c:\gstreamer\plugins. Both |
| directories should be added to your system PATH. The library dependencies should be installed in c:\usr</para> |
| |
| <para>For example, my current setup is :</para> |
| |
| <itemizedlist> |
| <listitem><para><filename>c:\gstreamer\registry.xml</filename></para></listitem> |
| <listitem><para><filename>c:\gstreamer\bin\gst-inspect.exe</filename></para></listitem> |
| <listitem><para><filename>c:\gstreamer\bin\gst-launch.exe</filename></para></listitem> |
| <listitem><para><filename>c:\gstreamer\bin\gst-register.exe</filename></para></listitem> |
| <listitem><para><filename>c:\gstreamer\bin\gstbytestream.dll</filename></para></listitem> |
| <listitem><para><filename>c:\gstreamer\bin\gstelements.dll</filename></para></listitem> |
| <listitem><para><filename>c:\gstreamer\bin\gstoptimalscheduler.dll</filename></para></listitem> |
| <listitem><para><filename>c:\gstreamer\bin\gstspider.dll</filename></para></listitem> |
| <listitem><para><filename>c:\gstreamer\bin\libgtreamer-0.8.dll</filename></para></listitem> |
| <listitem><para><filename>c:\gstreamer\plugins\gst-libs.dll</filename></para></listitem> |
| <listitem><para><filename>c:\gstreamer\plugins\gstmatroska.dll</filename></para></listitem> |
| <listitem><para><filename>c:\usr\bin\iconv.dll</filename></para></listitem> |
| <listitem><para><filename>c:\usr\bin\intl.dll</filename></para></listitem> |
| <listitem><para><filename>c:\usr\bin\libglib-2.0-0.dll</filename></para></listitem> |
| <listitem><para><filename>c:\usr\bin\libgmodule-2.0-0.dll</filename></para></listitem> |
| <listitem><para><filename>c:\usr\bin\libgobject-2.0-0.dll</filename></para></listitem> |
| <listitem><para><filename>c:\usr\bin\libgthread-2.0-0.dll</filename></para></listitem> |
| <listitem><para><filename>c:\usr\bin\libxml2.dll</filename></para></listitem> |
| </itemizedlist> |
| --> |
| |
| </sect2> |
| |
| </sect1> |
| |
| </chapter> |