Hello, I am using the following code in my browser plugin to set position in video:
void OVIMediaPlayer::set_position(float percents) { gint64 position, length; GstFormat format = GST_FORMAT_TIME; gst_element_query_duration (pipeline, &format, &length); position = static_cast<gint64>(length * (percents * 0.01)); GstState state; gst_element_get_state(pipeline, &state, NULL, GST_CLOCK_TIME_NONE); gst_element_set_state(pipeline, GST_STATE_PAUSED); gst_element_seek(bin, 1.0, format, GST_SEEK_FLAG_FLUSH, GST_SEEK_TYPE_SET, position, GST_SEEK_TYPE_NONE, GST_CLOCK_TIME_NONE); gst_element_set_state(pipeline, state); return; } My pipeline contains playbin2 with directdraw video sink and plays video from http server. Server supports HTTP Range Headers. My function gets percents argument in range [0; 100] to set position of video. But after each call video begins from begging. _______________________________________________ gstreamer-devel mailing list [hidden email] http://lists.freedesktop.org/mailman/listinfo/gstreamer-devel |
On 19 May 2012 09:58, Kyrylo V Polezhaiev <[hidden email]> wrote:
> Hello, I am using the following code in my browser plugin to set position in video: > > void OVIMediaPlayer::set_position(float percents) > { > gint64 position, length; > GstFormat format = GST_FORMAT_TIME; > gst_element_query_duration (pipeline, &format, &length); > position = static_cast<gint64>(length * (percents * 0.01)); > GstState state; > gst_element_get_state(pipeline, &state, NULL, GST_CLOCK_TIME_NONE); > gst_element_set_state(pipeline, GST_STATE_PAUSED); > gst_element_seek(bin, 1.0, format, GST_SEEK_FLAG_FLUSH, GST_SEEK_TYPE_SET, position, GST_SEEK_TYPE_NONE, GST_CLOCK_TIME_NONE); > gst_element_set_state(pipeline, state); > return; > } > > My pipeline contains playbin2 with directdraw video sink and plays video from http server. Server supports HTTP Range Headers. My function gets percents argument in range [0; 100] to set position of video. But after each call video begins from begging. > May I ask why you are changing the state to paused and then setting it back again? The rest looks OK, so I'm puzzled by this. _______________________________________________ gstreamer-devel mailing list [hidden email] http://lists.freedesktop.org/mailman/listinfo/gstreamer-devel |
On 19 May 2012 11:53, Luis de Bethencourt <[hidden email]> wrote:
> On 19 May 2012 09:58, Kyrylo V Polezhaiev <[hidden email]> wrote: >> Hello, I am using the following code in my browser plugin to set position in video: >> >> void OVIMediaPlayer::set_position(float percents) >> { >> gint64 position, length; >> GstFormat format = GST_FORMAT_TIME; >> gst_element_query_duration (pipeline, &format, &length); >> position = static_cast<gint64>(length * (percents * 0.01)); >> GstState state; >> gst_element_get_state(pipeline, &state, NULL, GST_CLOCK_TIME_NONE); >> gst_element_set_state(pipeline, GST_STATE_PAUSED); >> gst_element_seek(bin, 1.0, format, GST_SEEK_FLAG_FLUSH, GST_SEEK_TYPE_SET, position, GST_SEEK_TYPE_NONE, GST_CLOCK_TIME_NONE); >> gst_element_set_state(pipeline, state); >> return; >> } >> >> My pipeline contains playbin2 with directdraw video sink and plays video from http server. Server supports HTTP Range Headers. My function gets percents argument in range [0; 100] to set position of video. But after each call video begins from begging. >> > > May I ask why you are changing the state to paused and then setting it > back again? > The rest looks OK, so I'm puzzled by this. Why is the GstElement 'pipeline' passed to all functions, except for the seek that is 'bin'? Can you check that you are really passing a [0-100] percent value? Considering you are passing that value as a float it might be [0-1] somewhere else. _______________________________________________ gstreamer-devel mailing list [hidden email] http://lists.freedesktop.org/mailman/listinfo/gstreamer-devel |
Thanks, Luis.
> Why is the GstElement 'pipeline' passed to all functions, except for > the seek that is 'bin'? I use pipeline as the first argument instead of playbin2 now. > May I ask why you are changing the state to paused and then setting it > back again? Okay, now I am removed this part. So now I have: gint64 position, length; GstFormat format = GST_FORMAT_TIME; gst_element_query_duration (pipeline, &format, &length); position = static_cast<gint64>(length * (percents * 0.01)); if (!gst_element_seek(pipeline, 1.0, format, GST_SEEK_FLAG_FLUSH, GST_SEEK_TYPE_SET, position, GST_SEEK_TYPE_NONE, GST_CLOCK_TIME_NONE)) { MessageBoxA(0, "gst_element_seek failed", "Error", 0); } Just before gst_element_seek I have following values: length = 187623000000 position = 73124858969 percents = 38.974358 format = GST_FORMAT_TIME But now video still begins from start instead of from 73124858969. > On 19 May 2012 11:53, Luis de Bethencourt <[hidden email]> wrote: > > On 19 May 2012 09:58, Kyrylo V Polezhaiev <[hidden email]> wrote: > >> Hello, I am using the following code in my browser plugin to set position in video: > >> > >> void OVIMediaPlayer::set_position(float percents) > >> { > >> gint64 position, length; > >> GstFormat format = GST_FORMAT_TIME; > >> gst_element_query_duration (pipeline, &format, &length); > >> position = static_cast<gint64>(length * (percents * 0.01)); > >> GstState state; > >> gst_element_get_state(pipeline, &state, NULL, GST_CLOCK_TIME_NONE); > >> gst_element_set_state(pipeline, GST_STATE_PAUSED); > >> gst_element_seek(bin, 1.0, format, GST_SEEK_FLAG_FLUSH, GST_SEEK_TYPE_SET, position, GST_SEEK_TYPE_NONE, GST_CLOCK_TIME_NONE); > >> gst_element_set_state(pipeline, state); > >> return; > >> } > >> > >> My pipeline contains playbin2 with directdraw video sink and plays video from http server. Server supports HTTP Range Headers. My function gets percents argument in range [0; 100] to set position of video. But after each call video begins from begging. > >> > > > > May I ask why you are changing the state to paused and then setting it > > back again? > > The rest looks OK, so I'm puzzled by this. > > Why is the GstElement 'pipeline' passed to all functions, except for > the seek that is 'bin'? > Can you check that you are really passing a [0-100] percent value? > Considering you are passing > that value as a float it might be [0-1] somewhere else. > _______________________________________________ > gstreamer-devel mailing list > [hidden email] > http://lists.freedesktop.org/mailman/listinfo/gstreamer-devel gstreamer-devel mailing list [hidden email] http://lists.freedesktop.org/mailman/listinfo/gstreamer-devel |
On 19 May 2012 13:49, Kyrylo V Polezhaiev <[hidden email]> wrote:
> Thanks, Luis. >> Why is the GstElement 'pipeline' passed to all functions, except for >> the seek that is 'bin'? > I use pipeline as the first argument instead of playbin2 now. >> May I ask why you are changing the state to paused and then setting it >> back again? > Okay, now I am removed this part. So now I have: > > gint64 position, length; > GstFormat format = GST_FORMAT_TIME; > gst_element_query_duration (pipeline, &format, &length); > position = static_cast<gint64>(length * (percents * 0.01)); > if (!gst_element_seek(pipeline, 1.0, format, GST_SEEK_FLAG_FLUSH, GST_SEEK_TYPE_SET, position, GST_SEEK_TYPE_NONE, GST_CLOCK_TIME_NONE)) > { > MessageBoxA(0, "gst_element_seek failed", "Error", 0); > } > > Just before gst_element_seek I have following values: > length = 187623000000 > position = 73124858969 > percents = 38.974358 > format = GST_FORMAT_TIME > > But now video still begins from start instead of from 73124858969. > > That is very strange, it should work. Can you get a GST_DEBUG log and paste it in pastebin? I'm intrigued. Thanks, Luis > >> On 19 May 2012 11:53, Luis de Bethencourt <[hidden email]> wrote: >> > On 19 May 2012 09:58, Kyrylo V Polezhaiev <[hidden email]> wrote: >> >> Hello, I am using the following code in my browser plugin to set position in video: >> >> >> >> void OVIMediaPlayer::set_position(float percents) >> >> { >> >> gint64 position, length; >> >> GstFormat format = GST_FORMAT_TIME; >> >> gst_element_query_duration (pipeline, &format, &length); >> >> position = static_cast<gint64>(length * (percents * 0.01)); >> >> GstState state; >> >> gst_element_get_state(pipeline, &state, NULL, GST_CLOCK_TIME_NONE); >> >> gst_element_set_state(pipeline, GST_STATE_PAUSED); >> >> gst_element_seek(bin, 1.0, format, GST_SEEK_FLAG_FLUSH, GST_SEEK_TYPE_SET, position, GST_SEEK_TYPE_NONE, GST_CLOCK_TIME_NONE); >> >> gst_element_set_state(pipeline, state); >> >> return; >> >> } >> >> >> >> My pipeline contains playbin2 with directdraw video sink and plays video from http server. Server supports HTTP Range Headers. My function gets percents argument in range [0; 100] to set position of video. But after each call video begins from begging. >> >> >> > >> > May I ask why you are changing the state to paused and then setting it >> > back again? >> > The rest looks OK, so I'm puzzled by this. >> >> Why is the GstElement 'pipeline' passed to all functions, except for >> the seek that is 'bin'? >> Can you check that you are really passing a [0-100] percent value? >> Considering you are passing >> that value as a float it might be [0-1] somewhere else. >> _______________________________________________ >> gstreamer-devel mailing list >> [hidden email] >> http://lists.freedesktop.org/mailman/listinfo/gstreamer-devel > _______________________________________________ > gstreamer-devel mailing list > [hidden email] > http://lists.freedesktop.org/mailman/listinfo/gstreamer-devel gstreamer-devel mailing list [hidden email] http://lists.freedesktop.org/mailman/listinfo/gstreamer-devel |
I found the following warning from FLV demuxer: "failed to find an index, seeking back to beginning."
http://pastebin.com/DwGbp58W GSTOVIDEMUX is just renamed GstFlvDemux. > On 19 May 2012 13:49, Kyrylo V Polezhaiev <[hidden email]> wrote: > > Thanks, Luis. > >> Why is the GstElement 'pipeline' passed to all functions, except for > >> the seek that is 'bin'? > > I use pipeline as the first argument instead of playbin2 now. > >> May I ask why you are changing the state to paused and then setting it > >> back again? > > Okay, now I am removed this part. So now I have: > > > > gint64 position, length; > > GstFormat format = GST_FORMAT_TIME; > > gst_element_query_duration (pipeline, &format, &length); > > position = static_cast<gint64>(length * (percents * 0.01)); > > if (!gst_element_seek(pipeline, 1.0, format, GST_SEEK_FLAG_FLUSH, GST_SEEK_TYPE_SET, position, GST_SEEK_TYPE_NONE, GST_CLOCK_TIME_NONE)) > > { > > MessageBoxA(0, "gst_element_seek failed", "Error", 0); > > } > > > > Just before gst_element_seek I have following values: > > length = 187623000000 > > position = 73124858969 > > percents = 38.974358 > > format = GST_FORMAT_TIME > > > > But now video still begins from start instead of from 73124858969. > > > > > > That is very strange, it should work. > Can you get a GST_DEBUG log and paste it in pastebin? > I'm intrigued. > > Thanks, > Luis > > > > >> On 19 May 2012 11:53, Luis de Bethencourt <[hidden email]> wrote: > >> > On 19 May 2012 09:58, Kyrylo V Polezhaiev <[hidden email]> wrote: > >> >> Hello, I am using the following code in my browser plugin to set position in video: > >> >> > >> >> void OVIMediaPlayer::set_position(float percents) > >> >> { > >> >> gint64 position, length; > >> >> GstFormat format = GST_FORMAT_TIME; > >> >> gst_element_query_duration (pipeline, &format, &length); > >> >> position = static_cast<gint64>(length * (percents * 0.01)); > >> >> GstState state; > >> >> gst_element_get_state(pipeline, &state, NULL, GST_CLOCK_TIME_NONE); > >> >> gst_element_set_state(pipeline, GST_STATE_PAUSED); > >> >> gst_element_seek(bin, 1.0, format, GST_SEEK_FLAG_FLUSH, GST_SEEK_TYPE_SET, position, GST_SEEK_TYPE_NONE, GST_CLOCK_TIME_NONE); > >> >> gst_element_set_state(pipeline, state); > >> >> return; > >> >> } > >> >> > >> >> My pipeline contains playbin2 with directdraw video sink and plays video from http server. Server supports HTTP Range Headers. My function gets percents argument in range [0; 100] to set position of video. But after each call video begins from begging. > >> >> > >> > > >> > May I ask why you are changing the state to paused and then setting it > >> > back again? > >> > The rest looks OK, so I'm puzzled by this. > >> > >> Why is the GstElement 'pipeline' passed to all functions, except for > >> the seek that is 'bin'? > >> Can you check that you are really passing a [0-100] percent value? > >> Considering you are passing > >> that value as a float it might be [0-1] somewhere else. > >> _______________________________________________ > >> gstreamer-devel mailing list > >> [hidden email] > >> http://lists.freedesktop.org/mailman/listinfo/gstreamer-devel > > _______________________________________________ > > gstreamer-devel mailing list > > [hidden email] > > http://lists.freedesktop.org/mailman/listinfo/gstreamer-devel > _______________________________________________ > gstreamer-devel mailing list > [hidden email] > http://lists.freedesktop.org/mailman/listinfo/gstreamer-devel gstreamer-devel mailing list [hidden email] http://lists.freedesktop.org/mailman/listinfo/gstreamer-devel |
Free forum by Nabble | Edit this page |