GStreamer C Code to play video

Ashwini Sharma ak.ashwini at gmail.com
Wed Aug 3 04:15:34 PDT 2011


Hi,

You need to check the return status of gst_element_link_many (videosrc,
muxer, videoenc, sink,
     NULL); it may be a failure.

You may be required to do dynamic linking between mux and decoder.

-Ashwini



On Wed, Aug 3, 2011 at 4:25 PM, Durga <durgas1987 at gmail.com> wrote:

> Hi,
>
> I have identified the below pipleine to play the video.
>
> gst-launch-0.10 -v filesrc location=/home/administrator/Desktop/Test.mp4 !
> qtdemux ! ffdec_mpeg4 ! autovideosink
>
> With gst-launch i am able to play the video.
>
> I converted the pipeline to a C Code and tried to play the video but it
> displays the error:GStreamer General Stream Error.
>
> This is code i am using for testing.
>
> Code:
>
> #include &lt;gst/gst.h&gt;
> #include <glib.h>
>
> static gboolean
> bus_call (GstBus *bus, GstMessage *msg, gpointer data)
> {
>  GMainLoop *loop = (GMainLoop *) data;
>
>  switch (GST_MESSAGE_TYPE (msg)) {
>
>    case GST_MESSAGE_EOS:
>      g_print ("End of stream\n");
>      g_main_loop_quit (loop);
>      break;
>
>    case GST_MESSAGE_ERROR: {
>      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);
>      break;
>    }
>    default:
>      break;
>  }
>
>  return TRUE;
> }
>
> int
> main (int argc, char *argv[])
> {
>  GMainLoop *loop;
>
>  GstElement *pipeline, *videosrc, *colorspace, *videoenc,
>    *videoq, *audiosrc, *conv, *audioenc, *audioq, *muxer, *sink;
>
>  GstBus *bus;
>
>  /* Initialisation */
>  gst_init ((NULL, NULL);
>
>  loop = g_main_loop_new (NULL, FALSE);
>
>  /* Create gstreamer elements */
>  pipeline = gst_pipeline_new ("audio-player");
>  videosrc = gst_element_factory_make ("filesrc", "videosrc");
>  muxer = gst_element_factory_make ("qtdemux", "mux");
>  videoenc = gst_element_factory_make ("ffdec_mpeg4", "videoenc");
>  sink = gst_element_factory_make ("autovideosink", "sink");
>
>  if (!pipeline || !videosrc || !muxer || !videoenc
>       || !sink) {
>    g_printerr ("One element could not be created. Exiting.\n");
>    return -1;
>  }
>
>  /* Set up the pipeline */
>  g_print ("Elements are created\n");
>
>  /* set the properties of other elements */
>  g_object_set (G_OBJECT (videosrc), "location",
> "/home/administrator/Desktop/Test.mp4", 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),
>    videosrc, muxer, videoenc,
>    sink, NULL);
>
>  g_print ("Added all the Elements into the pipeline\n");
>
>  /* we link the elements together */
>  gst_element_link_many (videosrc, muxer, videoenc, sink,
>      NULL);
>
>  g_print ("Linked all the Elements together\n");
>  /* Set the pipeline to "playing" state*/
>  g_print ("Playing the video\n");
>  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;
> }
>
> Please let me know if  there is any error in the code.
>
> Thanks in advance.
>
> --
> View this message in context:
> http://gstreamer-devel.966125.n4.nabble.com/GStreamer-C-Code-to-play-video-tp3715064p3715064.html
> Sent from the GStreamer-devel mailing list archive at Nabble.com.
> _______________________________________________
> gstreamer-devel mailing list
> gstreamer-devel at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/gstreamer-devel
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.freedesktop.org/archives/gstreamer-devel/attachments/20110803/bdec932e/attachment.html>


More information about the gstreamer-devel mailing list