PyQt播放视频无休止地重复(使用QMediaPlayer、QMediaPlaylist)

2024-09-25 06:33:47 发布

您现在位置:Python中文网/ 问答频道 /正文

我创建了我的VideoPlayer类,它只适合玩一次

但当我试着播放一段视频重复很多次(无穷无尽)时,它不起作用。我调用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)))。它工作得很好


Tags: pathselfnoneplayinitvideoplaylistparent
1条回答
网友
1楼 · 发布于 2024-09-25 06:33:47

与许多其他Qt对象一样,如果它们既没有父对象也没有持久引用,它们只会被删除

您的问题是playlist一返回__init__就被垃圾收集,导致QMediaPlayer没有剩余的内容可供播放

使播放列表对象成为实例的成员,或使用父对象(例如,窗口)创建它:

    self.playlist = QMediaPlaylist()
    # or
    playlist = QMediaPlaylist(self)

相关问题 更多 >