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 <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)) {
>
> 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