我做了一个非常简单的PyQt5桌面应用,播放视频。它在Pycharm中工作得很好,这让我怀疑代码是好的,问题与Windows有关。
我用Pyinstaller创建了一个.exe文件。不幸的是,运行.exe后,应用程序在打开后短暂崩溃,视频灰暗而不是播放。
用于创建视频的部分代码。
# create link to movie file
movie_file = QtCore.QUrl.fromLocalFile('C:/Users/Owner/PycharmProjects/BF4 Deployment Timer/3d
video background 2.mp4')
media = QtMultimedia.QMediaContent(movie_file)
# create video widget
self.videoWidget = QtMultimediaWidgets.QVideoWidget()
self.setCentralWidget(self.videoWidget)
# media player object (video widget goes in media player)
self.mediaPlayer = QtMultimedia.QMediaPlayer(None,
QtMultimedia.QMediaPlayer.VideoSurface)
self.mediaPlayer.setVideoOutput(self.videoWidget)
# playlist
self.playlist = QtMultimedia.QMediaPlaylist()
self.playlist.setCurrentIndex(0)
self.playlist.setPlaybackMode(QtMultimedia.QMediaPlaylist.Loop)
self.playlist.addMedia(media)
# add content to media player
self.mediaPlayer.setPlaylist(self.playlist)
self.mediaPlayer.play()
命令窗口给我以下错误信息:
DirectShowPlayerService::doSetUrlSource: Unresolved error code 0x80004005 (Unspecified error)
我无法通过google或者堆栈溢出来解决这个问题 这是个很大的挑战 因为我是一个相当新的程序员。
如果有解决的办法或者可以尝试的想法,我将非常感激。
解决了
显然,PyQt5的QtMultimedia依赖于DirectShowPlayerService,为此你需要安装一个DirectShow解码器,比如LAV Filters。所以,这其实是我机器上的问题,而不是程序的问题。
基本安装了LAV滤镜,就解决了我的视频播放问题。我在google翻译了这个中文网站后,找到了这个答案。https:/blog.csdn.netWangguang_articledetails93312629。
LAV过滤器可以在这里找到。https:/www.videohelp.comsoftwareLAV-Filters