PyQt 无限循环播放视频(使用QMediaPlayer、QMediaPlaylist)
PyQt playing video repeat endless(using QMediaPlayer, QMediaPlaylist)
我创建了我的 VideoPlayer class,它可以正常播放一次。
但是当我尝试多次(无休止)播放视频时,它不起作用。我将 play() 调用到 video_player.mediaPlayer.play()
,但它们只打印黑色。
我认为是QMediaPlaylist的问题,但我找不到任何问题。
class VideoPlayer(QWidget):
def __init__(self, video_path, parent=None):
super(VideoPlayer, self).__init__(parent)
self.mediaPlayer = QMediaPlayer(None, QMediaPlayer.VideoSurface)
videoWidget = QVideoWidget()
layout = QVBoxLayout()
layout.addWidget(videoWidget)
self.setLayout(layout)
self.mediaPlayer.setVideoOutput(videoWidget)
playlist = QMediaPlaylist()
playlist.addMedia(QMediaContent(QUrl.fromLocalFile(video_path)))
playlist.setCurrentIndex(1)
playlist.setPlaybackMode(QMediaPlaylist.CurrentItemInLoop)
self.mediaPlayer.setPlaylist(playlist)
只玩一次的代码是self.mediaPlayer.setMedia(QMediaContent(QUrl.fromLocalFile(video_path)))
。效果很好。
与许多其他 Qt 对象 一样,如果它们没有父对象或持久引用,它们就会被删除。
您的问题是 playlist
在 __init__
returns 后立即被垃圾收集,导致 QMediaPlayer 没有内容可播放。
使播放列表对象成为实例的成员,或使用父对象(例如 window)创建它:
self.playlist = QMediaPlaylist()
# or
playlist = QMediaPlaylist(self)
我创建了我的 VideoPlayer class,它可以正常播放一次。
但是当我尝试多次(无休止)播放视频时,它不起作用。我将 play() 调用到 video_player.mediaPlayer.play()
,但它们只打印黑色。
我认为是QMediaPlaylist的问题,但我找不到任何问题。
class VideoPlayer(QWidget):
def __init__(self, video_path, parent=None):
super(VideoPlayer, self).__init__(parent)
self.mediaPlayer = QMediaPlayer(None, QMediaPlayer.VideoSurface)
videoWidget = QVideoWidget()
layout = QVBoxLayout()
layout.addWidget(videoWidget)
self.setLayout(layout)
self.mediaPlayer.setVideoOutput(videoWidget)
playlist = QMediaPlaylist()
playlist.addMedia(QMediaContent(QUrl.fromLocalFile(video_path)))
playlist.setCurrentIndex(1)
playlist.setPlaybackMode(QMediaPlaylist.CurrentItemInLoop)
self.mediaPlayer.setPlaylist(playlist)
只玩一次的代码是self.mediaPlayer.setMedia(QMediaContent(QUrl.fromLocalFile(video_path)))
。效果很好。
与许多其他 Qt 对象 一样,如果它们没有父对象或持久引用,它们就会被删除。
您的问题是 playlist
在 __init__
returns 后立即被垃圾收集,导致 QMediaPlayer 没有内容可播放。
使播放列表对象成为实例的成员,或使用父对象(例如 window)创建它:
self.playlist = QMediaPlaylist()
# or
playlist = QMediaPlaylist(self)