GStreamer如何获取当前帧的数量?

时间:2017-09-11 07:15:05

标签: python-3.x gstreamer

我正在使用此代码: 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 转换时间)?

2 个答案:

答案 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)

https://valadoc.org/gstreamer-1.0/Gst.Format.DEFAULT.html