Qt 无法使用QML MediaPlayer循环视频

Qt 无法使用QML MediaPlayer循环视频,qt,qml,qtmultimedia,Qt,Qml,Qtmultimedia,我正在尝试创建一个简单的视频播放器,它只在循环中播放指定的视频。虽然视频按预期播放,但不会循环 以下是我正在使用的代码: import QtQuick 2.0 import QtMultimedia 5.0 Rectangle { width : 320 height : 240 signal buttonPressed(string msg) property string currentVideo function playVideo(vid

我正在尝试创建一个简单的视频播放器,它只在循环中播放指定的视频。虽然视频按预期播放,但不会循环

以下是我正在使用的代码:

import QtQuick 2.0

import QtMultimedia 5.0

Rectangle
{
    width : 320
    height : 240

    signal buttonPressed(string msg)

    property string currentVideo

    function playVideo(videoName)
    {
        currentVideo = videoName
        videoPlayer.source = videoName
        videoPlayer.seek(1)
        videoPlayer.play()    
    }

    function loopVideo()
    {
        if(videoPlayer.duration === 0)
        {
            playVideo(currentVideo)
        }
    }

    function stopVideoPlayback()
    {
        videoPlayer.stop()  
    }

    MediaPlayer {
        id: videoPlayer
        source: ""
        autoPlay: false
        autoLoad: false
        loops: 100
    }

    VideoOutput {
        id: videoOutput
        source: videoPlayer
        anchors.fill: parent
        visible: true
    }
}
< C++ >我调用<代码>播放视频< /代码>。它按预期开始播放。但是,一旦完成,帧将在最后一帧冻结。我试图通过调用QTimer中的loopVideo函数来循环它。这也行不通


我可能做错了什么

您的代码正常。(提示:您可能希望使用
MediaPlayer.Infinite
代替
100
进行循环)

我相信你的情况和我的一样

我用
MediaPlayer
组件玩了一点,最后我无法搜索视频,因为
seekable
总是
false
。而
seekable
false
,因为QML以某种方式将我的文件用作实时流,结果
duration
属性为
0
。 还要注意的是,
onPaused
onStopped
从未被触发,
position
只是在视频结束后增加(直播流永不结束)

现在我认为这与循环有关,因为基本上循环寻找回0。因为没有持续时间(
MediaPlayer
认为它是实时流),所以它无法搜索(和循环)

我发现的一个讨厌的解决方法是(附加到代码中):

其中
VIDEO\u LENGTH
是以毫秒为单位的视频文件长度

更新:


更新2:我已经下载了MSVC版本的Qt,media player也可以正常工作

因此,mingw的Qt中存在缺陷

使用此解决方法(我不推荐)或下载MSVC版本


使用停止信号尝试以下代码:

 MediaPlayer {
     id: mediaplayer
     source: "groovy_video.mp4"
     onStopped: play()
}

请解释你的答案。一个好的答案总是会有一个解释,说明做了什么以及为什么这样做,不仅是为了OP,而且是为了未来的访客。
 MediaPlayer {
     id: mediaplayer
     source: "groovy_video.mp4"
     onStopped: play()
}