我正在尝试创建一个只在循环播放指定视频的简单视频播放器。虽然视频按预期播放,但它不会循环播放。
以下是我正在使用的代码:
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函数来循环它。这也不起作用。
我可能做错了什么?
答案 0 :(得分:1)
您的代码没问题。(小提示:您可能希望使用MediaPlayer.Infinite
代替100
进行循环)
我相信你的情况和我一样。
我使用MediaPlayer
组件玩了一点,但最终我无法搜索视频,因为seekable
始终是false
。 seekable
是false
,因为不知何故,QML将我的文件用作实时流,结果duration
属性为0
。
另请注意,onPaused
和onStopped
永远不会被触发,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版本,媒体播放器正常运行。
所以这是mtw中的错误。
使用此解决方法(我不建议)或下载MSVC版本。
答案 1 :(得分:0)
使用停止信号尝试以下代码:
MediaPlayer {
id: mediaplayer
source: "groovy_video.mp4"
onStopped: play()
}