gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 03:30:23 36 4
gpt4 key购买 nike

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

以下是我使用的代码:

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 函数来循环它。那也不管用。

我可能做错了什么?

最佳答案

您的代码没问题。(小提示:您可能想使用 MediaPlayer.Infinite 而不是 100 进行循环)

我相信你的情况跟我一样。

我玩了一些 MediaPlayer 组件,最后我无法搜索视频,因为 seekable 始终是 falseseekablefalse 因为 QML 以某种方式将我的文件用作实时流,这导致 duration 属性为 0 .另请注意,永远不会触发 onPausedonStopped 并且 position 只是在视频结束后增加(直播永远不会结束)。

现在我认为这与循环有关,因为基本上循环会返回到 0。因为没有 duration(MediaPlayer 认为它是直播)它不能寻找(和循环)。

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

Rectangle {
id: root
//...

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

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

Click here for MediaPlayer element documentation

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


更新 2:我已经下载了 Qt 的 MSVC 版本,媒体播放器可以正常工作。

所以这是Qt for mingw的bug

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

I have created new bug report here.

关于qt - 无法使用 QML MediaPlayer 循环播放视频,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27183338/

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