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)