我正在编写一个应用程序,它允许用户浏览打开的视频。使用 Qt 5.3 在 Windows 7/8 上进行开发,我一直在使用QMediaPlayer
并QVideoWidget
关注qvideowidget
示例项目。结果非常好,除了QVideoWidget
似乎只在空闲时间更新。不过,这是一个好的开始,而且它是可用的。
但是,当我在 Mac OS 10.10(再次使用 Qt 5.3)上构建时,擦洗的行为就像视频中每秒只有一帧一样。当我拖动“位置”滑块时,视频会在一秒钟后从一帧跳到另一帧,然后再过一秒钟,即使我QMediaPlayer::setPosition
多次调用这两个帧之间的位置。
可以使用videowidget
Qt 5.3 附带的示例在此处重现该问题:Qt\Examples\Qt-5.3\multimediawidgets\videowidget
. 在 Windows 机器上拖动滑块时,QVideoWidget
会在相距很近的帧之间移动。当在 Mac 上(至少在我的)上拖动滑块时,QVideoWidget
帧之间的跳跃间隔大约一秒钟。无论我等待“中间”帧渲染多长时间,除非我点击“播放”按钮,否则它不会发生。
我试过一个接一个地调用QMediaPlayer::play()
来QMediaPlayer::pause()
强制更新,但这似乎不起作用——QMediaPlayer
异步工作,所以更新没有时间生效。
如果我检查 的值QMediaPlayer::position
,我发现它在这些跳转之间实际上并没有改变。看来,当我调用时QMediaPlayer::setPosition
,它实际上是在 Mac 上将位置四舍五入到一秒增量,而在 Windows 机器上将位置四舍五入。
理想情况下,我想跳到视频中的特定位置并立即在QVideoWidget
. 有什么方法可以强制QMediaPlayer
准确设置位置并更新相关的QVideoWidget
?有没有更好的方法在视频中实现平滑擦洗?
谢谢你的帮助!