按pygtk按钮,将gst视频切换到另一个视频点

2024-05-19 00:42:45 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试播放一段视频,并有一个按钮可以将视频切换到一个新的视频,在某个点开始新的视频。我没有写过很多用户界面或视频相关的代码。在

我有以下那种作品(非常精巧):

class Main(gobject.GObject):
  def __init__(self):
    self.player = gst.element_factory_make('playbin', 'VideoPlayer')
    #.. pygtk UI/Button code

  def next_video(self):
    self.player.set_state(gst.STATE_NULL)
    self.player.set_property('uri', 'next_video_path')
    self.player.set_state(gst.STATE_PAUSED)
    end = time.time() + 1
    while time.time() < end:
      pass
    self.player.seek_simple(gst.FORMAT_TIME, gst.SEEK_FLAG_FLUSH, 100000000000)
    self.player.set_state(gst.STATE_PLAYING)

if __name__ == "__main__":
  Main(sys.argv)
  gtk.main()

几点:

  • 我使用GObject是因为我希望能够使用gobject.timeout_添加,因为我需要一些定期发生的事情。如果有别的办法,我就不会嫁给它。在
  • 没有那1秒的等待,它就不起作用了。使用时间。睡觉()导致seg故障。在
  • 我有时确实会看到视频开头的一点,有时只是从开头开始。在
  • 有人建议我有一个背景游戏箱和'热交换'他们。这没关系-我只是不知道怎么做。在

很明显,我想要一个更干净、更可靠的方法。在

TL;DR:如何在pygtk窗口中从视频切换到视频,从视频中的任意点开始?


Tags: self视频timemaindefvideopygtknext
1条回答
网友
1楼 · 发布于 2024-05-19 00:42:45

不要等待一秒钟,而是使用类似于self.player.get_state(timeout=3*gst.SECOND)的方法等待gst.STATE_PAUSED的切换完成。在

使用超时是因为如果发生错误,而GStreamer无法成功地更改管道状态,那么没有超时的get_state将永远处于等待状态。在

相关问题 更多 >

    热门问题