我有一个QMediaPlayer
对象,如果我试图在让文件缓冲区足够长之前获得的持续时间,它将返回-1
。据我了解,这是因为文件是异步加载的,并且无法知道持续时间(以及随后的位置),因为尚不清楚文件是否已完全加载。
我解决此问题的最初想法是运行media.play()
,然后紧接着运行media.stop()
。这绝对没有任何作用。然后,我考虑了运行media.play()
和media.pause().
这也不起作用。我想这是因为媒体需要缓冲相当长的一段时间才能获得持续时间。而且,无论如何,这种“解决方案”都不是理想的。
如何在播放文件之前获取QMediaPlayer对象的持续时间?
答案 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())