根据docs中的示例,我正在使用QMediaPlayer。
这是我的代码:
from PySide2 import QtWidgets
from PySide2 import QtCore
from PySide2.QtMultimedia import QMediaPlayer
from PySide2.QtMultimediaWidgets import QVideoWidget
class App(QtWidgets.QWidget):
def __init__(self):
super().__init__()
self.player = QMediaPlayer()
self.video = QVideoWidget(self)
self.player.setMedia(QtCore.QUrl.fromLocalFile("D:/path/to/file.webm"))
self.player.setVideoOutput(self.video)
self.video.show()
self.player.play()
def closeEvent(self, event):
self.player.stop()
event.accept()
if __name__ == "__main__":
app = QtWidgets.QApplication([])
window = App()
window.show()
app.exec_()
必须覆盖closeEvent
才能使程序停止在关闭状态。
我的测试视频:
我在Windows上使用qt5,并且已经安装了适当的编解码器(K-Lite编解码器包)来播放这些文件(可以在Windows Media Player中正常播放)。
编辑:
我已经连接到@ekhumoro建议的mediaStatusChanged
,videoAvailableChanged
和error
信号。运行程序后,无论程序是否实际显示视频,我都会以True和BufferedMedia的形式获取视频。 error
信号处理程序永远不会被触发。
在进行这些进一步的测试期间,“正常工作”部分中的视频有时无法显示视频,或者更奇怪的是,显示效果很好,但窗口尺寸最小:
调整窗口大小不会增加视频的大小。到目前为止,我的原始测试的“仅播放音频”部分中没有视频显示过视频。
编辑2:
重新启动(和更新的图形驱动程序)后,第一次运行的视频最初在奇怪的小窗口中根本没有显示视频。随后的运行(我已经完成了10次左右)已恢复为无视频。同样,本来效果不错的视频在第一次运行时就没有视频,但现在一直很小。原来可以正常播放的其他视频仍在正常播放。
答案 0 :(得分:1)
问题在于按@ekhumoro的建议调整大小。
当我继承的QWidget
试图确定其大小时,它询问QVideoWidget
是其唯一的孩子。有时QVideoWidget
加载了视频,因此提供了正确的大小,但有时没有,因此给出了sizeHint
的{{1}}。由于(-1, -1)
不在布局中,因此无法调整大小并卡得太小。
此外,窗口本身不会在创建后自动通过布局自动调整大小(仅由用户或使用QVideoWidget
来自动调整大小),因此即使adjustSize
在窗口中,窗口仍保持其原始大小。布局。解决方案是为QVideoWidget
注册一个信号处理程序,然后调用mediaStatusChanged
和updateGeometry
。
最后,退出程序时挂起的另一个问题是因为我没有在窗口上放置adjustSize
。
我修改过的班级
QMediaPlayer