AW: GStreamer C Code to play video

Steve it at
Thu Aug 4 11:38:17 PDT 2011

OK, well, this seems not to be correct.  It seems I have compiled the
default program that comes with Code::Blocks.   

I'll get back to you when I've got the right program compiled.



-----Original Message-----
From: at
[ at] On
Behalf Of Steve
Sent: 04 August 2011 14:45
To: 'Discussion of the development of and with GStreamer'
Subject: RE: AW: GStreamer C Code to play video

Hi Durga,

Well I compiled your code with Code::Blocks and it compiled and ran first

I get a window with a pop-up box saying information or close.

But I don't yet have a video running.

I have two questions:

1 - What format of file name must I use?
2 - I'm not sure what container or codec I should be using. I am using a
'.ogg' video file. By maybe I need a specific codec?



-----Original Message-----
From: at
[ at] On
Behalf Of Durga
Sent: 04 August 2011 06:30
To: gstreamer-devel at
Subject: RE: AW: GStreamer C Code to play video


This is the working code!

#include <gst/gst.h>
#include <glib.h>
static gboolean
bus_call (GstBus *bus,
GstMessage *msg,
gpointer data)

GMainLoop *loop = (GMainLoop *) data;
switch (GST_MESSAGE_TYPE (msg)) {
g_print ("End of stream\n");
g_main_loop_quit (loop);
gchar *debug;
GError *error;
gst_message_parse_error (msg, &error, &debug);
g_free (debug);
g_printerr ("Error: %s\n", error->message);
g_error_free (error);
g_main_loop_quit (loop);
return TRUE;
static void
on_pad_added (GstElement *element,
GstPad *pad,
gpointer data)
GstPad *sinkpad;
GstElement *decoder = (GstElement *) data;
/* We can now link this pad with the vorbis-decoder sink pad */
g_print ("Dynamic pad created, linking demuxer/decoder\n");
sinkpad = gst_element_get_static_pad (decoder, "sink");
gst_pad_link (pad, sinkpad);
gst_object_unref (sinkpad);
main (int argc,
char *argv[])
GMainLoop *loop;
GstElement *pipeline, *source, *demuxer, *decoder, *conv, *sink;
GstBus *bus;
/* Initialisation */
gst_init (&argc, &argv);
loop = g_main_loop_new (NULL, FALSE);
/* Check input arguments */
if (argc != 2) {
g_printerr ("Usage: %s &lt;Ogg/Vorbis filename&gt;\n", argv[0]);
return -1;
/* Create gstreamer elements */
pipeline = gst_pipeline_new ("audio-player");
source = gst_element_factory_make ("filesrc", "file-source");
demuxer = gst_element_factory_make ("qtdemux", "demuxer");
decoder = gst_element_factory_make ("ffdec_mpeg4", "decoder");
sink = gst_element_factory_make ("autovideosink", "video-output");
if (!pipeline || !source || !demuxer || !decoder || !sink) {
g_printerr ("One element could not be created. Exiting.\n");
return -1;
/* Set up the pipeline */
/* we set the input filename to the source element */
g_object_set (G_OBJECT (source), "location", argv[1], NULL);
/* we add a message handler */
bus = gst_pipeline_get_bus (GST_PIPELINE (pipeline));
gst_bus_add_watch (bus, bus_call, loop);
gst_object_unref (bus);
/* we add all elements into the pipeline */
gst_bin_add_many (GST_BIN (pipeline),
source, demuxer, decoder, sink, NULL);
/* we link the elements together */
gst_element_link (source, demuxer);
gst_element_link_many (decoder, sink, NULL);
g_signal_connect (demuxer, "pad-added", G_CALLBACK (on_pad_added), decoder);
/* note that the demuxer will be linked to the decoder dynamically.
The reason is that Ogg may contain various streams (for example
audio and video). The source pad(s) will be created at run time,
by the demuxer when it detects the amount and nature of streams.
Therefore we connect a callback function which will be executed
when the "pad-added" is emitted.*/
/* Set the pipeline to "playing" state*/
g_print ("Now playing: %s\n", argv[1]);
gst_element_set_state (pipeline, GST_STATE_PLAYING);
/* Iterate */
g_print ("Running...\n");
g_main_loop_run (loop);
/* Out of the main loop, clean up nicely */
g_print ("Returned, stopping playback\n");
gst_element_set_state (pipeline, GST_STATE_NULL);
g_print ("Deleting pipeline\n");
gst_object_unref (GST_OBJECT (pipeline));
return 0;

View this message in context:
Sent from the GStreamer-devel mailing list archive at
gstreamer-devel mailing list
gstreamer-devel at

gstreamer-devel mailing list
gstreamer-devel at

More information about the gstreamer-devel mailing list