我正在尝试停止QML视频,并在播放完成后显示其最后一帧.有人知道怎么做这个吗?(对不起,这似乎并不像听起来那么微不足道......)
目前,我的问题是视频元素在播放完成后变得不可见/隐藏.(onVisibleChanged从未被称为.)
当我onStatusChanged在我的代码中使用hack时,视频会在结束后消失一段时间,然后显示视频结束.
我正在做的只是:
Video {
anchors.fill: parent
fillMode: VideoOutput.PreserveAspectFit;
source: "path/to/file"
autoPlay: true
onStatusChanged: {
console.warn("StatusChanged:"+status+"|"+MediaPlayer.Loaded)
if (status == MediaPlayer.EndOfMedia)
{
// seek a bit before the end of the video since the last frames
// are the same here, anyway
seek(metaData.duration-200)
play()
pause()
}
}
onVisibleChanged:
{
console.log(visible)
}
}
Run Code Online (Sandbox Code Playgroud)
我可能遗漏了一些东西,但我在文档中找不到关于这个主题的任何内容.另外,使用单独MediaPlayer并且VideoOutput不会改变行为.
为了记录,我在Windows上使用最新的Qt 5.2(msvc2010 + OpenGL-build).
我仍在寻找更好的解决方案。我想出的是在视频结束前暂停一秒钟:
MediaPlayer {
autoLoad: true
id: video
onPositionChanged: {
if (video.position > 1000 && video.duration - video.position < 1000) {
video.pause();
}
}
}
Run Code Online (Sandbox Code Playgroud)
为什么是一秒钟?在我的机器上,如果您尝试在结束前大约 500 毫秒暂停视频,视频会设法完成并从视图中消失,甚至无需注册呼叫pause()。因此 1 秒对我来说是一个很好的安全值。
坦率地说,我希望有一种更明确的方式来告诉 MediaPlayer 在视频结束时要做什么。我知道,Qt 在 Linux 和 Mac 上使用的 GStreamer 会在视频即将结束时通知您,以便您可以决定下一步做什么 - 例如暂停视频或无缝循环播放。
| 归档时间: |
|
| 查看次数: |
1737 次 |
| 最近记录: |