首页 文章

无法使用QML MediaPlayer循环播放视频

提问于
浏览
3

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

以下是我使用的代码:

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打电话给 playVideo . 它按预期开始播放 . 但是,一旦完成,框架就会冻结在最后一个框架上 . 我尝试通过在QTimer中调用loopVideo函数来循环它 . 这也行不通 .

我可能做错了什么?

2 回答

  • 1

    Your code is ok. (轻微提示:您可能希望使用 MediaPlayer.Infinite 而不是 100 进行循环)

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

    我用 MediaPlayer 组件玩了一点,在我结束时我无法寻找视频,因为 seekable 始终是 false . 并且 seekablefalse 因为不知何故QML使用我的文件作为实时流,这导致 duration 属性为 0 . 另请注意, onPausedonStopped 永远不会被触发,而 position 只会在视频结束后增加(实时流永远不会结束) .

    现在我认为这与循环有关,因为基本上循环搜索回到0.因为没有 durationMediaPlayer 认为它是实时流)它不能寻找(和循环) .

    我找到的一个讨厌的解决方法是这个(附加到你的代码):

    Rectangle {
        id: root
        //...
    
        MediaPlayer {
            //...
            onPositionChanged: {
                if (position > VIDEO_LENGTH) {
                    root.stopVideoPlayback()
                    root.playVideo(root.currentVideo)
                }
            }
        }
    }
    

    VIDEO_LENGTH 是视频文件的长度,以毫秒为单位 .

    Click here for MediaPlayer element documentation

    UPDATE: It looks like that is bug in Qt for mingw version (closed bug report).


    UPDATE 2: 我已经下载了Qt的MSVC版本,媒体播放器正常运行 .

    所以 it is bug in Qt for mingw .

    要么使用此解决方法(我不建议)或 download MSVC version .

    I have created new bug report here.

  • 0

    使用停止信号尝试此代码:

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

相关问题