Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python QMediaPlayer仅显示特定视频的音频_Python_Windows_Pyside2_Qtmultimedia_Video Codecs - Fatal编程技术网

Python QMediaPlayer仅显示特定视频的音频

Python QMediaPlayer仅显示特定视频的音频,python,windows,pyside2,qtmultimedia,video-codecs,Python,Windows,Pyside2,Qtmultimedia,Video Codecs,根据中的示例,我正在使用QMediaPlayer 这是我的密码: 从PySide2导入QtWidgets 从PySide2导入QtCore 从PySide2.qtmedia导入QMediaPlayer 从PySide2.QtMultimediaWidgets导入QVideoWidget 类AppQtWidgets.QWidget: 定义初始自我: 超级__ self.player=QMediaPlayer self.video=QVideoWidgetself self.player.setMe

根据中的示例,我正在使用QMediaPlayer

这是我的密码:

从PySide2导入QtWidgets 从PySide2导入QtCore 从PySide2.qtmedia导入QMediaPlayer 从PySide2.QtMultimediaWidgets导入QVideoWidget 类AppQtWidgets.QWidget: 定义初始自我: 超级__ self.player=QMediaPlayer self.video=QVideoWidgetself self.player.setMediaQtCore.QUrl.fromlocalfield:/path/to/file.webm self.player.setVideoOutputself.video self.video.show 自娱自乐 def closeEventself,事件: 自动停止 event.accept 如果uuuu name uuuuu==\uuuuuuuu main\uuuuuuuu: app=QtWidgets.QApplication[] 窗口=应用程序 橱窗秀 app.exec_ 重写closeEvent对于停止程序挂起关闭是必要的

我的测试视频:

工作顺利: 1080p 60fps vp9/opus webm 1080p 30fps vp9/opus webm 480p 30fps vp9/opus webm 显示“仅播放音频”空白窗口: 1080p 30fps H.264/aac mp4 480p 30fps H.264/aac mp4 1080p 23.98fps H.264/ac3 mp4 1080p 23.98fps H.264/ac3 mkv 1080p 23.98fps vp9/opus webm 720x404 23.98fps vp9/opus webm 我在windows上使用qt5,并已安装了适当的编解码器K-Lite编解码器包,以便在windows media player中播放这些文件

编辑: 我已连接到mediaStatusChanged、videoAvailableChanged和@ekhumoro建议的错误信号。只要我运行程序,无论它是否实际显示视频,我都会将视频作为True和mediaStatus提供。永远不会触发错误信号处理程序

在这些进一步的测试中,工作精细部分的视频有时无法显示视频,或者更奇怪的是,以最小窗口大小显示精细:

调整窗口大小不会增加视频的大小。到目前为止,我的原始测试中“仅播放音频”部分中没有视频显示过视频

编辑2:


重新启动并更新图形驱动程序后,第一次运行时,在奇怪的小窗口中显示的视频最初根本没有显示视频。我已经做了10次左右的后续运行,但恢复为无视频。类似地,一个最初运行良好的视频在第一次运行时没有视频,但现在一直很小。另一个原本有效的视频仍在正常播放。

问题在于@ekhumoro建议的大小

当我继承的QWidget试图计算出它的大小时,它向它唯一的孩子QVideoWidget询问它的大小。有时QVideoWidget加载了它的视频,因此提供了正确的大小,但有时它没有,因此给出了-1,-1的大小。因为QVideoWidget不在布局中,所以它无法调整自身大小,并且卡得太小

此外,只有用户创建的布局不会自动调整窗口本身的大小,也不会显式地使用adjustSize调整窗口大小,因此即使布局中有QVideoWidget,窗口也不会保持其原始大小。解决方案是为mediaStatusChanged注册一个信号处理程序,并调用updateGeometry和adjustSize

最后,程序在退出时挂起的另一个问题是,我没有为窗口上的QMediaPlayer设置父级

我的修改类:

类AppQtWidgets.QWidget: 定义初始自我: 超级__ self.player=QMediaPlayerself self.video=QVideoWidgetself self.player.setMediaQtCore.QUrl.fromlocalfield:/path/to/video.webm self.player.setVideoOutputself.video self.player.mediaStatusChanged.connectself.video\u可用\u已更改 layout=qtwidts.QVBoxLayoutself layout.addWidgetself.video 自娱自乐 def video_available_changedself,可用: 如有: self.video.updateGeometry self.video.adjustSize 自我调节尺寸
您到底安装了哪些编解码器?您是否尝试过,例如?是的,这正是我安装的。您使用的是什么特定版本的Qt?您可以使用PyQt5进行测试以确保它不是PySide2问题吗?如果您将示例更新为与mediaStatusChanged、videoAvailableChanged和error等连接,则可能会有所帮助,这样您就可以打印一些基本的调试输出。使用PyQt5,我必须用QMediaContent或get-TypeError包装QUrl:setMediaself、QMediaContent、stream:QIODevice=None:参数1具有意外的类型“QUrl”。我只是注意到你的示例将视频小部件作为顶级窗口的子窗口,但它并没有将其放入布局中。考虑到您报告的所有其他问题,处理该问题可能会解决所有其他问题。也就是说:视频播放正常,但窗口无法调整大小以正确显示,除非它有布局。啊-所以在原始代码中,当 演出开始时izeHint已经准备好了。但如果不是的话就不会了。竞争条件总是很难调试。