在播放之前获取媒体的持续时间

时间:2018-11-26 10:05:31

标签: python-3.x pyqt5

我有一个QMediaPlayer对象,如果我试图在让文件缓冲区足够长之前获得的持续时间,它将返回-1。据我了解,这是因为文件是异步加载的,并且无法知道持续时间(以及随后的位置),因为尚不清楚文件是否已完全加载。

我解决此问题的最初想法是运行media.play(),然后紧接着运行media.stop()。这绝对没有任何作用。然后,我考虑了运行media.play()media.pause().这也不起作用。我想这是因为媒体需要缓冲相当长的一段时间才能获得持续时间。而且,无论如何,这种“解决方案”都不是理想的。

如何在播放文件之前获取QMediaPlayer对象的持续时间?

1 个答案:

答案 0 :(得分:1)

一种可能的解决方案是使用durationChanged信号:

from PyQt5 import QtCore, QtMultimedia

if __name__ == '__main__':
    import sys
    app = QtCore.QCoreApplication(sys.argv)
    player = QtMultimedia.QMediaPlayer()

    @QtCore.pyqtSlot('qint64')
    def on_durationChanged(duration):
        print(duration)
        player.stop()
        QtCore.QCoreApplication.quit()

    player.durationChanged.connect(on_durationChanged)
    file = "/path/of/small.mp4"
    player.setMedia(QtMultimedia.QMediaContent(QtCore.QUrl.fromLocalFile(file)))
    player.play()
    sys.exit(app.exec())