我使用 Python VLC 在 pyqt 中构建自定义播放应用程序。我画了一个漂亮的自定义滑块来跟踪视频,但遇到了一些恼人的问题。
无论我多久告诉我的滑块更新一次,它都会出现故障(每 1/4 秒左右跳跃一次)并且看起来不稳定(只是时间线,而不是视频)。
深入研究后我了解到
media_player.get_position()
投票率相当低。它经常返回相同的值,然后在下次给出新值时跳跃很大。
所以现在我运行了一些测试指标,发现它往往每 0.25-0.3 秒更新一次。所以现在我有一个系统,它基本上存储新值进入的最后一个值和最后一个系统时间,以及返回值中的最后一个跳跃距离,并用这些东西做一些基本的数学运算,以伪造轮询之间正确的线性时间线数据,以生成非常流畅的时间线滑块。
问题是假设我每 0.25-0.3 秒的值在机器、硬件、视频帧速率等方面是一致的。
有谁知道更好的修复方法吗?
也许有一种方法可以提高 VLC 的轮询率,以便为我提供更好的数据 - 或者一些更好的数学来处理平滑?
Thanks
Using get_position()
返回 0.0 到 1.0 之间的值,本质上是当前位置相对于总运行时间的百分比。
相反,你可以使用get_time()
它以千分之一秒返回当前位置。
i.e.
print (self.player.get_time()/1000)
将在几秒钟内打印当前位置。
您还可以为 vlc 注册回调event
EventType.MediaPlayerTimeChanged
,正如 @mtz 给出的另一个答案中提到的
IE。
在哪里self.player
定义为:
self.Instance = vlc.Instance()
self.player = self.Instance.media_player_new()
Then:
self.vlc_event_manager = self.player.event_manager()
self.vlc_event_manager.event_attach(vlc.EventType.MediaPlayerTimeChanged, self.media_time_changed)
def media_time_changed(self,event):
print (event.u.new_time/1000)
print (self.player.get_time()/1000)
print (self.player.get_position())
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)