GStreamer Application Development Manual | ||
---|---|---|
<<< Previous | Next >>> |
GStreamer 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 GStreamer knows about to have quick access to the specifics of the plugins.
We will show you how you can save a pipeline to XML and how you can reload that XML file again for later use.
We create a simple pipeline and save it to disk with gst_xml_write (). The following code constructs an mp3 player pipeline with two threads and finaly writes it to disk. use this program with one argument: the mp3 file on disk.
#include <stdlib.h> #include <gst/gst.h> gboolean playing; int main (int argc, char *argv[]) { GstElement *disksrc, *audiosink, *queue, *queue2, *parse, *decode; GstElement *bin; GstElement *thread, *thread2; gst_init (&argc,&argv); if (argc != 2) { g_print ("usage: %s <filename>\n", argv[0]); exit (-1); } /* create a new thread to hold the elements */ thread = gst_elementfactory_make ("thread", "thread"); g_assert (thread != NULL); thread2 = gst_elementfactory_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 */ disksrc = gst_elementfactory_make ("disksrc", "disk_source"); g_assert (disksrc != NULL); gtk_object_set (GTK_OBJECT (disksrc), "location", argv[1], NULL); queue = gst_elementfactory_make ("queue", "queue"); queue2 = gst_elementfactory_make ("queue", "queue2"); /* and an audio sink */ audiosink = gst_elementfactory_make ("audiosink", "play_audio"); g_assert (audiosink != NULL); parse = gst_elementfactory_make ("mp3parse", "parse"); decode = gst_elementfactory_make ("mpg123", "decode"); /* add objects to the main bin */ gst_bin_add (GST_BIN (bin), disksrc); gst_bin_add (GST_BIN (bin), queue); gst_bin_add (GST_BIN (thread), parse); gst_bin_add (GST_BIN (thread), decode); gst_bin_add (GST_BIN (thread), queue2); gst_bin_add (GST_BIN (thread2), audiosink); gst_pad_connect (gst_element_get_pad (disksrc,"src"), gst_element_get_pad (queue,"sink")); gst_pad_connect (gst_element_get_pad (queue,"src"), gst_element_get_pad (parse,"sink")); gst_pad_connect (gst_element_get_pad (parse,"src"), gst_element_get_pad (decode,"sink")); gst_pad_connect (gst_element_get_pad (decode,"src"), gst_element_get_pad (queue2,"sink")); gst_pad_connect (gst_element_get_pad (queue2,"src"), gst_element_get_pad (audiosink,"sink")); gst_bin_add (GST_BIN (bin), thread); gst_bin_add (GST_BIN (bin), thread2); // write the bin to disk xmlSaveFile ("xmlTest.gst", gst_xml_write (GST_ELEMENT (bin))); exit (0); } |
The most important line is:
xmlSaveFile ("xmlTest.gst", gst_xml_write (GST_ELEMENT (bin))); |
gst_xml_write () will turn the given element into and xmlDocPtr that can be saved with the xmlSaveFile () function found in the gnome-xml package. The result is an XML file named xmlTest.gst.
The complete element hierarchy will be saved along with the inter element pad connections and the element parameters. Future GStreamer versions will also allow you to store the signals in the XML file.
<<< Previous | Home | Next >>> |
XML in GStreamer | Up | Loading a GstElement from an XML file |