我正在使用此代码: http://bazaar.launchpad.net/~jderose/+junk/gst-examples/view/head:/video-player-1.0 显示视频,以及使用代码暂停和恢复的一些按钮:
def pauseb(self):
#code that checks if playing
self.player.set_state(Gst.State.PAUSED)
def playb(self):
#code that checks if video is valid and is paused or stoped
self.player.set_state(Gst.State.PLAYING)
当处于暂停模式时,我可以使用以下方式获取时间位置:
success, position = self.videoplayer.player.query_position(Gst.Format.TIME)
将时间转换为帧并不总是准确的。有没有办法找到当前显示的帧数( NOT 转换时间)?
答案 0 :(得分:0)
GStreamer管道不一定是同步或线性的。他们可以使用queue
元素在多个线程和tee
元素中运行以分支到多个接收器。因此,当前帧可能在管道的不同部分中处于不同的值。
您可能拥有一个相对简单的管道,并希望知道相对于最终输出的当前帧。在那种情况下,我建议在接收器之前添加一个标识元素:
... ! identity name=frame_count ! ximagesink
每次调用回调时增加值,然后在需要时读取它。我为C道歉,但代码的要点是:
GstElement* frame_count = gst_bin_get_by_name(GST_BIN(your_bin), "frame_count");
g_signal_connect(G_OBJECT(frame_count), "handoff",
G_CALLBACK(frame_count_callback),
some_object_to_accumulate_the_frame_count_in);
答案 1 :(得分:0)
你可以试试这个:
success, frameNumber = self.videoplayer.player.query_position(Gst.Format.DEFAULT)