Hello, my pipeline is very straightforward, a playbin2 for playing avi video files.
I need it to do a seek at the start of the 'player'. This is the code, according to the message, the seek is done, but not in the place it should be. I want it to start at 15 seconds from its begining. (I converted 15 seconds to nanoseconds and it didn't work either) gst_element_set_state (play, GST_STATE_PLAYING); gst_element_set_state (play, GST_STATE_PAUSED); if (!gst_element_seek (GST_ELEMENT(play), 1.0, GST_FORMAT_TIME, GST_SEEK_FLAG_FLUSH, GST_SEEK_TYPE_SET, 15*GST_SECOND, GST_SEEK_TYPE_NONE, GST_CLOCK_TIME_NONE)) { g_print ("Seek failed!\n");} else g_print ("Seek OK!\n"); // it seems it does the seek, but it doesn't it plays the video from the begining. What is wrong?, I see these line in many examples. Thanks Rossana _______________________________________________ gstreamer-devel mailing list [hidden email] http://lists.freedesktop.org/mailman/listinfo/gstreamer-devel |
On Sat, 2012-02-25 at 05:08 -0200, Rossana Guerra wrote:
> I need it to do a seek at the start of the 'player'. > This is the code, according to the message, the seek is done, but not > in the place it should be. I want it to start at 15 seconds from its > begining > > .... > g_print ("Seek OK!\n"); // it seems it does the seek, but it > doesn't it plays the video from the begining. > > What is wrong?, I see these line in many examples. What is it that actually happens insteaad then? It's not quite clear to me how it fails. Cheers -Tim _______________________________________________ gstreamer-devel mailing list [hidden email] http://lists.freedesktop.org/mailman/listinfo/gstreamer-devel |
Hi Tim, the seeking is not working, according to the code it is expected it reaches the position that corresponds to the 15 seconds of video and it doesn't. It begins to play from the begining as if no seeking wasn't applied.
According to this code, the seeking it's done (it prints "seek OK") // gst int and so on //here I create the pipeline and I attach the callback event gst_element_set_state (play, GST_STATE_PLAYING); gst_element_set_state (play, GST_STATE_PAUSED); if (!gst_element_seek (GST_ELEMENT(play), 1.0, GST_FORMAT_TIME, GST_SEEK_FLAG_FLUSH, GST_SEEK_TYPE_SET, 15*GST_SECOND, GST_SEEK_TYPE_NONE, GST_CLOCK_TIME_NONE)) { g_print ("Seek failed!\n");} else g_print ("Seek OK!\n") Thanks, cheers Rossana 2012/2/25 Tim-Philipp Müller <[hidden email]>
_______________________________________________ gstreamer-devel mailing list [hidden email] http://lists.freedesktop.org/mailman/listinfo/gstreamer-devel |
Hi Tim and everyone, I read in the mailing list that before seeeking is necessary for waiting for the pipeline to preroll, since the pipeline changes its state asynchronically.
I use the "get_bus_timed_pop_filtered" function before doing the event seeking as the code below shows. Now it works as expected. Is there a better manner to do this? In the seeking examples I saw this function is barely mentioned, of the contrary seeking event is almost a fashion template procedure. I appreciate any concepts to clarify this issue. Thanks so much. Rossana // handler error routine EOS, ERROR, etc // global variable definitions gint main (gint argc, char *argv[]) { GMainLoop *loop = 0; GstBus *bus = 0; /* set up */ gst_init (&argc, &argv); loop = g_main_loop_new (NULL, FALSE); play = gst_element_factory_make ("playbin2", "play"); bus = gst_pipeline_get_bus (GST_PIPELINE (play)); gst_bus_add_watch (bus, bus_call, loop); gst_object_unref (bus); g_object_set (G_OBJECT (play), "uri",playlist[0], NULL); g_object_set (G_OBJECT (play), "suburi",playsubt[0], NULL); gst_element_set_state (play, GST_STATE_PLAYING); GstMessage *msg2 = 0; msg2 = gst_bus_timed_pop_filtered (GST_ELEMENT_BUS (play), GST_CLOCK_TIME_NONE, GST_MESSAGE_ASYNC_DONE); if (GST_MESSAGE_TYPE (msg2) == GST_MESSAGE_ERROR) { return 0; } gst_message_unref (msg2); if (!gst_element_seek (GST_ELEMENT(play), 1.0, GST_FORMAT_TIME, GST_SEEK_FLAG_FLUSH, GST_SEEK_TYPE_SET, 15*GST_SECOND, GST_SEEK_TYPE_NONE, GST_CLOCK_TIME_NONE)) { g_print ("Seek failed!\n");} else g_print ("Seek OK!\n"); /* now run */ g_main_loop_run (loop); /* also clean up */ gst_element_set_state (play, GST_STATE_NULL); gst_object_unref (GST_OBJECT (play)); return 0; } 2012/2/25 Rossana Guerra <[hidden email]> Hi Tim, the seeking is not working, according to the code it is expected it reaches the position that corresponds to the 15 seconds of video and it doesn't. It begins to play from the begining as if no seeking wasn't applied. _______________________________________________ gstreamer-devel mailing list [hidden email] http://lists.freedesktop.org/mailman/listinfo/gstreamer-devel |
Free forum by Nabble | Edit this page |