Mic*_*per 5 c++ qt qmediaplayer qtmultimedia
我正在编写一个应用程序,允许用户浏览打开的视频。使用 Qt 5.3 在 Windows 7/8 上进行开发,我一直在使用QMediaPlayer并QVideoWidget遵循qvideowidget示例项目。结果非常好,除了似乎QVideoWidget只在空闲时间更新。尽管如此,这仍然是一个良好的开始并且可用。
然而,当我在 Mac OS 10.10(同样使用 Qt 5.3)上构建时,擦洗的行为就好像视频中每秒只有一帧一样。当我拖动“位置”滑块时,视频会从一帧跳到一秒后的帧,然后再跳一秒,即使我QMediaPlayer::setPosition多次调用这两帧之间的位置。
可以使用videowidgetQt 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?有没有更好的方法来实现视频中的平滑擦洗?
感谢您的帮助!
万一其他人也有类似的问题...
\n\n我最好的猜测是,该问题源于 所使用的编解码器的限制QMediaPlayer,因为这似乎是两个平台之间的主要区别。我没有直接处理编解码器问题,而是寻找其他选择。
MLT( http://www.mltframework.org/ ) 看起来很有希望,但编译起来很痛苦,而且主要作者似乎已经决定只向商业用户提供 SDK 支持。
libVLC(https://wiki.videolan.org/LibVLC/)看起来好多了。特别是,我\xe2\x80\x99一直在使用vlc-qt(https://github.com/ntadej/vlc-qt)。QMediaPlayer后者的界面对于和的用户来说看起来非常熟悉QVideoWidget。在我自己的应用程序中,这是一个简单的替换,结果是 Windows 和 Mac 上的视频擦除更加流畅。
希望这对其他人有帮助!
\n