<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <HTML ><HEAD ><TITLE >XML in GStreamer</TITLE ><META NAME="GENERATOR" CONTENT="Modular DocBook HTML Stylesheet Version 1.7"><LINK REL="HOME" TITLE="GStreamer Application Development Manual" HREF="index.html"><LINK REL="UP" TITLE="XML in GStreamer" HREF="part-xml-gstreamer.html"><LINK REL="PREVIOUS" TITLE="XML in GStreamer" HREF="part-xml-gstreamer.html"><LINK REL="NEXT" TITLE="Loading a GstElement from an XML file" HREF="section-xml-load.html"></HEAD ><BODY CLASS="chapter" BGCOLOR="#FFFFFF" TEXT="#000000" LINK="#0000FF" VLINK="#840084" ALINK="#0000FF" ><DIV CLASS="NAVHEADER" ><TABLE SUMMARY="Header navigation table" WIDTH="100%" BORDER="0" CELLPADDING="0" CELLSPACING="0" ><TR ><TH COLSPAN="3" ALIGN="center" ><SPAN CLASS="application" >GStreamer</SPAN > Application Development Manual</TH ></TR ><TR ><TD WIDTH="10%" ALIGN="left" VALIGN="bottom" ><A HREF="part-xml-gstreamer.html" ACCESSKEY="P" >Prev</A ></TD ><TD WIDTH="80%" ALIGN="center" VALIGN="bottom" ></TD ><TD WIDTH="10%" ALIGN="right" VALIGN="bottom" ><A HREF="section-xml-load.html" ACCESSKEY="N" >Next</A ></TD ></TR ></TABLE ><HR ALIGN="LEFT" WIDTH="100%"></DIV ><DIV CLASS="chapter" ><H1 ><A NAME="chapter-xml" ></A >Chapter 31. XML in <SPAN CLASS="application" >GStreamer</SPAN ></H1 ><P > <SPAN CLASS="application" >GStreamer</SPAN > uses XML to store and load its pipeline definitions. XML is also used internally to manage the plugin registry. The plugin registry is a file that contains the definition of all the plugins <SPAN CLASS="application" >GStreamer</SPAN > knows about to have quick access to the specifics of the plugins. </P ><P > We will show you how you can save a pipeline to XML and how you can reload that XML file again for later use. </P ><DIV CLASS="sect1" ><H1 CLASS="sect1" ><A NAME="section-xml-write" >31.1. Turning GstElements into XML</A ></H1 ><P > We create a simple pipeline and write it to stdout with gst_xml_write_file (). The following code constructs an MP3 player pipeline with two threads and then writes out the XML both to stdout and to a file. Use this program with one argument: the MP3 file on disk. </P ><PRE CLASS="programlisting" > /* example-begin xml-mp3.c */ #include <stdlib.h> #include <gst/gst.h> gboolean playing; int main (int argc, char *argv[]) { GstElement *filesrc, *osssink, *queue, *queue2, *decode; GstElement *bin; GstElement *thread, *thread2; gst_init (&argc,&argv); if (argc != 2) { g_print ("usage: %s <mp3 filename>\n", argv[0]); exit (-1); } /* create a new thread to hold the elements */ thread = gst_element_factory_make ("thread", "thread"); g_assert (thread != NULL); thread2 = gst_element_factory_make ("thread", "thread2"); g_assert (thread2 != NULL); /* create a new bin to hold the elements */ bin = gst_bin_new ("bin"); g_assert (bin != NULL); /* create a disk reader */ filesrc = gst_element_factory_make ("filesrc", "disk_source"); g_assert (filesrc != NULL); g_object_set (G_OBJECT (filesrc), "location", argv[1], NULL); queue = gst_element_factory_make ("queue", "queue"); queue2 = gst_element_factory_make ("queue", "queue2"); /* and an audio sink */ osssink = gst_element_factory_make ("osssink", "play_audio"); g_assert (osssink != NULL); decode = gst_element_factory_make ("mad", "decode"); g_assert (decode != NULL); /* add objects to the main bin */ gst_bin_add_many (GST_BIN (bin), filesrc, queue, NULL); gst_bin_add_many (GST_BIN (thread), decode, queue2, NULL); gst_bin_add (GST_BIN (thread2), osssink); gst_element_link_many (filesrc, queue, decode, queue2, osssink, NULL); gst_bin_add_many (GST_BIN (bin), thread, thread2, NULL); /* write the bin to stdout */ gst_xml_write_file (GST_ELEMENT (bin), stdout); /* write the bin to a file */ gst_xml_write_file (GST_ELEMENT (bin), fopen ("xmlTest.gst", "w")); exit (0); } /* example-end xml-mp3.c */ </PRE ><P > The most important line is: </P ><PRE CLASS="programlisting" > gst_xml_write_file (GST_ELEMENT (bin), stdout); </PRE ><P > gst_xml_write_file () will turn the given element into an xmlDocPtr that is then formatted and saved to a file. To save to disk, pass the result of a fopen(2) as the second argument. </P ><P > The complete element hierarchy will be saved along with the inter element pad links and the element parameters. Future <SPAN CLASS="application" >GStreamer</SPAN > versions will also allow you to store the signals in the XML file. </P ></DIV ></DIV ><DIV CLASS="NAVFOOTER" ><HR ALIGN="LEFT" WIDTH="100%"><TABLE SUMMARY="Footer navigation table" WIDTH="100%" BORDER="0" CELLPADDING="0" CELLSPACING="0" ><TR ><TD WIDTH="33%" ALIGN="left" VALIGN="top" ><A HREF="part-xml-gstreamer.html" ACCESSKEY="P" >Prev</A ></TD ><TD WIDTH="34%" ALIGN="center" VALIGN="top" ><A HREF="index.html" ACCESSKEY="H" >Home</A ></TD ><TD WIDTH="33%" ALIGN="right" VALIGN="top" ><A HREF="section-xml-load.html" ACCESSKEY="N" >Next</A ></TD ></TR ><TR ><TD WIDTH="33%" ALIGN="left" VALIGN="top" >XML in <SPAN CLASS="application" >GStreamer</SPAN ></TD ><TD WIDTH="34%" ALIGN="center" VALIGN="top" ><A HREF="part-xml-gstreamer.html" ACCESSKEY="U" >Up</A ></TD ><TD WIDTH="33%" ALIGN="right" VALIGN="top" >Loading a GstElement from an XML file</TD ></TR ></TABLE ></DIV ></BODY ></HTML >