以下は、PyQt5のサンプルビデオを再生するために使用していたテストスクリプトです。残念ながら、ビデオをロードした直後に、mediaPlayer mediaStatusがコード8(InvalidMedia)に切り替わります。ローカルバージョンの.mp4でこれを試してみましたが、無駄です。私は他のファイルを試しましたが、それ以上問題を診断することはできません。スタックオーバーフローのどこか他の場所でこの実装が見つかったので、誰かが完全に異なる実装方法を知っていれば、私はそれを公開しています。WIndowsでPyQt5でQMediaPlayerを使用するとエラーが発生する
さらに、私の.mp4で "チュートリアル"ビデオプレーヤーをテストしましたが、それでも何も再生されませんでした。 Github
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *
from PyQt5.QtMultimedia import *
from PyQt5.QtMultimediaWidgets import *
import glob
class MainWindow(QMainWindow):
def __init__(self):
super(MainWindow, self).__init__()
self.setWindowTitle('Navon test')
self.setWindowFlags(Qt.FramelessWindowHint)
# exit option for the menu bar File menu
self.exit = QAction('Exit', self)
self.exit.setShortcut('Ctrl+q')
# message for the status bar if mouse is over Exit
self.exit.setStatusTip('Exit program')
# newer connect style (PySide/PyQT 4.5 and higher)
self.exit.triggered.connect(app.quit)
self.setWindowIcon(QIcon('icon.ico'))
self.centralwidget = VideoPlayer()
self.setCentralWidget(self.centralwidget)
def keyPressEvent(self, e):
player = self.centralwidget.mediaPlayer
print('state: ' + str(player.state()))
print('mediaStatus: ' + str(player.mediaStatus()))
print('error: ' + str(player.error()))
if e.key() == Qt.Key_L:
print('loading')
self.centralwidget.load()
# update : missed() here
if e.key() == Qt.Key_P:
print('playing')
self.centralwidget.play()
class VideoPlayer(QWidget):
def __init__(self, parent=None):
super(VideoPlayer, self).__init__(parent)
self.mediaPlayer = QMediaPlayer(None, QMediaPlayer.VideoSurface)
self.videoItem = QGraphicsVideoItem()
self.videoItem.setSize(QSizeF(640, 480))
scene = QGraphicsScene(self)
graphicsView = QGraphicsView(scene)
scene.addItem(self.videoItem)
layout = QVBoxLayout()
layout.addWidget(graphicsView)
self.setLayout(layout)
self.mediaPlayer.setVideoOutput(self.videoItem)
def load(self):
local = QUrl('http://clips.vorwaerts-gmbh.de/big_buck_bunny.mp4')
self.mediaPlayer.setMedia(QMediaContent(local))
def play(self):
self.mediaPlayer.play()
if __name__ == '__main__':
import sys
app = QApplication(sys.argv)
player = MainWindow()
player.show()
sys.exit(app.exec_())
システムに必要なビデオコーデックがすべてインストールされていますか?例を '.wmv'ファイルで実行して、正しく動作することを確認してください。 – ekhumoro
これは本当に問題でした。チュートリアルがロードされなくても、適切なコーデックがどこにあるかはわかりませんでした。有益な答えをありがとう! – ThePyrotechnic