gstreamer video playback , cannot play

Stefan Sauer ensonic at hora-obscura.de
Mon Mar 11 03:13:21 PDT 2013


On 10.03.2013 20:29, aero wrote:
> Hi,
>
> I just started with the gstreamer,  i have gone through the example they
> gave in application programmers reference manual, , its for playing audio
> and its works well.
>
> I have done some study and tried to do the same with video/audio with
> following code , but it does not work. and i am getting the following error.
> Can someone point out mistake please.
> I just dont know how to connect audio/Video pipeline.
1.) check return codes (e.g. in gst_pad_link())
2.) you don't link the video part, unless your songs/nob.ogg has a video
track.
3.) either feed the 'right' kind of files to your app, use playbin that
handles the complexity or implement that yourself (only add
autovideosink if you need it).

Stefan
>
> Now playing: ../Songs/nob.ogg
> Running...
> Dynamic pad created, linking demuxer/decoder
> Error: Internal data stream error.
> Returned, stopping playback
> Deleting pipeline
>
> #include <gst/gst.h>
> #include <glib.h>
>
> static void on_pad_added (GstElement *element,GstPad *pad,gpointer data)
> {
>         GstPad *sinkpad;
>         GstElement *decoder = (GstElement *) data;
>         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);
> }
>
> static gboolean cb_print_position (GstElement *pipeline)
> {
>         GstFormat fmt = GST_FORMAT_TIME;
>         gint64 pos, len;
>         if (gst_element_query_position (pipeline, &fmt, &pos)
>                 && gst_element_query_duration (pipeline, &fmt, &len)) {
>                 g_print ("Time: %" GST_TIME_FORMAT " / %" GST_TIME_FORMAT
> "\r",
>                         GST_TIME_ARGS (pos), GST_TIME_ARGS (len));
>         }
>         /* call me again */
>         return TRUE;
> }
>
> 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, *source, *demuxer, *decoder, *conv, *sink;
>         GstBus *bus;
>         gst_init (&argc, &argv);
>
>         loop = g_main_loop_new (NULL, FALSE);
>         if (argc != 2) {
>                 g_printerr ("Usage: %s <Ogg/Vorbis filename>\n", argv[0]);
>                 return -1;
>         }
>         pipeline = gst_pipeline_new ("video-player");
>         source = gst_element_factory_make ("filesrc", "file-source");
>         demuxer = gst_element_factory_make ("oggdemux", "ogg-demuxer");
>         decoder = gst_element_factory_make ("vorbisdec", "vorbis-decoder");
>         conv = gst_element_factory_make ("autovideoconvert", "converter");
>         sink = gst_element_factory_make ("autovideosink", "video-output");
>         if (!pipeline || !source || !demuxer || !decoder || !conv || !sink)
> {
>                 g_printerr ("One element could not be created. Exiting.\n");
>                 return -1;
>         }
>         g_object_set (G_OBJECT (source), "location", argv[1], NULL);
>         bus = gst_pipeline_get_bus (GST_PIPELINE (pipeline));
>         gst_bus_add_watch (bus, bus_call, loop);
>         gst_object_unref (bus);
>         gst_bin_add_many (GST_BIN (pipeline),source, demuxer, decoder, conv,
> sink, NULL);
>         gst_element_link (source, demuxer);
>         gst_element_link_many (decoder, conv, sink, NULL);
>         g_signal_connect (demuxer, "pad-added", G_CALLBACK (on_pad_added),
> decoder);
>         g_print ("Now playing: %s\n", argv[1]);
>
>         gst_element_set_state (pipeline, GST_STATE_PLAYING);
>         g_print ("Running...\n");
>         g_timeout_add (200, (GSourceFunc) cb_print_position, pipeline);
>         g_main_loop_run (loop);
>         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: http://gstreamer-devel.966125.n4.nabble.com/gstreamer-video-playback-cannot-play-tp4659024.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



More information about the gstreamer-devel mailing list