gpt4 book ai didi

qt - 如何在 QML 的最后一帧暂停视频?

转载 作者:行者123 更新时间:2023-11-28 21:39:49 25 4
gpt4 key购买 nike

我正在尝试停止 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)
}
}

我可能遗漏了什么,但我在文档中找不到关于这个主题的任何内容。此外,使用单独的 MediaPlayerVideoOutput 不会改变行为。

郑重声明,我在 Windows 上使用最新的 Qt 5.2 (msvc2010+OpenGL-build)。

最佳答案

我仍在寻找更好的解决方案。我想到的是在视频结束前暂停一秒钟:

MediaPlayer {
autoLoad: true
id: video

onPositionChanged: {
if (video.position > 1000 && video.duration - video.position < 1000) {
video.pause();
}
}
}

为什么是一秒钟?在我的机器上,如果您尝试在结束前大约 500 毫秒暂停它,视频会设法运行完成并从 View 中消失,甚至没有注册 pause() 调用。因此 1 秒对我来说是一个很好的安全值。

坦率地说,如果有更明确的方式告诉 MediaPlayer 在视频结束时要做什么,我会更喜欢。我知道一个事实,即 Qt 在 Linux 和 Mac 上使用的 GStreamer 会在视频快结束时通知您,以便您决定下一步要做什么 - 例如暂停视频或无缝循环播放。

关于qt - 如何在 QML 的最后一帧暂停视频?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21138824/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com