我正在尝试创建一个只在循环播放指定视频的简单视频播放器 . 虽然视频按预期播放,但它不会循环播放 .
以下是我使用的代码:
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 回答
Your code is ok. (轻微提示:您可能希望使用
MediaPlayer.Infinite
而不是100
进行循环)我相信你的情况和我一样 .
我用
MediaPlayer
组件玩了一点,在我结束时我无法寻找视频,因为seekable
始终是false
. 并且seekable
是false
因为不知何故QML使用我的文件作为实时流,这导致duration
属性为0
. 另请注意,onPaused
和onStopped
永远不会被触发,而position
只会在视频结束后增加(实时流永远不会结束) .现在我认为这与循环有关,因为基本上循环搜索回到0.因为没有
duration
(MediaPlayer
认为它是实时流)它不能寻找(和循环) .我找到的一个讨厌的解决方法是这个(附加到你的代码):
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.
使用停止信号尝试此代码: