使用QMediaPlayer.duration()时始终为0

时间:2019-02-10 14:29:50

标签: python pyqt pyqt4 pyqt5

这是我的代码:

import sys
from PyQt5.Qt import QUrl
from PyQt5.QtMultimedia import QMediaPlayer, QMediaContent, QMediaPlaylist
from PyQt5.QtWidgets import QApplication, QWidget


class Demo(QWidget):
    def __init__(self):
        super(Demo, self).__init__()
        self.playlist = QMediaPlaylist(self)
        self.player = QMediaPlayer(self)
        self.player.setPlaylist(self.playlist)

        self.playlist.addMedia(QMediaContent(
            QUrl.fromLocalFile('mypath')))
        self.playlist.addMedia(QMediaContent(
            QUrl.fromLocalFile('mypath')))
        self.playlist.setPlaybackMode(QMediaPlaylist.Loop)
        self.playlist.setCurrentIndex(1)

        self.player.setVolume(80)
        self.player.play()

        self.player.durationChanged.connect(self.print_durantion)
        print(self.player.duration())  # 0

    def print_durantion(self, d):
        print(d)                       # never printed


if __name__ == '__main__':
    app = QApplication(sys.argv)
    demo = Demo()
    demo.show()
    sys.exit(app.exec_())

我正在尝试获取文件的持续时间,但始终获取0。它在QtAssistant中说,初始播放开始时该值可能不可用,并告诉我们使用durantionChanged接收状态通知。

但是,如果持续时间始终为0(从不打印d值),将如何发出durationChanged信号?

播放媒体文件时,有什么方法可以获取持续时间吗?任何帮助将不胜感激。 (我在MacOS上测试了上面的代码)

1 个答案:

答案 0 :(得分:0)

选择媒体后,您将附加durationChanged信号。该信号仅在选择媒体时触发一次,而不会在之后触发。

如果将其放在setCurrentIndex之前,它应该可以正常工作,但是在链接播放列表之前,可能需要先附加它。

这里mediaplayer demo application in PyQt5可以正常工作,以确认该信号对您当前的PyQt5安装有效。