mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-09-08 13:18:52 +00:00
MIME-type -> media types Fix up the manual in various places with the 1.0 way of doing things such as probes, static elements, scheduling, ... Add porting from 0.10 to 1.0 chapter. Add probe example to build. Remove some docs for remove components such as GstMixer and GstPropertyProbe, XML...
340 lines
14 KiB
XML
340 lines
14 KiB
XML
<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="http://www.hadess.net/totem.php3">Totem</ulink>
|
|
and <ulink type="http"
|
|
url="http://www.burtonini.com/blog/computers/sound-juicer">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;
|
|
|
|
/* we must initialise the threading system before using any
|
|
* other GLib funtion, such as g_option_context_new() */
|
|
if (!g_thread_supported ())
|
|
g_thread_init (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);
|
|
exit (1);
|
|
}
|
|
|
|
/* 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 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
|
|
<function>gst_element_factory_make ()</function> and use them
|
|
directly just like you would use any other source or sink element.
|
|
All GNOME applications are recommended to use those elements.
|
|
</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://developer.kde.org/~wheeler/juk.html">JuK</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-0.10 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-0.10 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-0.10.</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>
|