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

and*_*ras 7 video qt qml qt5

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

Ste*_*nev 4

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

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 会在视频即将结束时通知您,以便您可以决定下一步做什么 - 例如暂停视频或无缝循环播放。