Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/2.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/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
Video 在PyQt中播放mov文件_Video_Pyqt_Pyqt4_Quicktime_Phonon - Fatal编程技术网

Video 在PyQt中播放mov文件

Video 在PyQt中播放mov文件,video,pyqt,pyqt4,quicktime,phonon,Video,Pyqt,Pyqt4,Quicktime,Phonon,我想用类似Quicktime的播放器在PyQt应用程序中打开一个mov文件 我试图使用声子模块,但不知怎么的,我无法让它工作 在我的ui文件(由Qt designer生成)中,其初始化如下: self.videoPlayer = phonon.Phonon.VideoPlayer(self.gridLayoutWidget) self.videoPlayer.setObjectName(_fromUtf8("videoPlayer")) 在我的代码中,我尝试这样做: media_source

我想用类似Quicktime的播放器在PyQt应用程序中打开一个mov文件

我试图使用声子模块,但不知怎么的,我无法让它工作

在我的ui文件(由Qt designer生成)中,其初始化如下:

self.videoPlayer = phonon.Phonon.VideoPlayer(self.gridLayoutWidget)
self.videoPlayer.setObjectName(_fromUtf8("videoPlayer"))
在我的代码中,我尝试这样做:

media_source = phonon.Phonon.MediaSource("path\\to\\my\\media.mov")
self.ui.videoPlayer.load(media_source)
self.ui.videoPlayer.play()

有人能指出我哪里做错了吗?

我看不出你发布的代码有任何明显的错误。如果您的系统有必要的编解码器可用,那么phonon没有理由不能播放quicktime文件

from PyQt4 import QtGui, QtCore
from PyQt4.phonon import Phonon

class Window(QtGui.QWidget):
    def __init__(self):
        QtGui.QWidget.__init__(self)
        self.media = Phonon.MediaObject(self)
        self.media.stateChanged.connect(self.handleStateChanged)
        self.video = Phonon.VideoWidget(self)
        self.video.setMinimumSize(400, 400)
        self.audio = Phonon.AudioOutput(Phonon.VideoCategory, self)
        Phonon.createPath(self.media, self.audio)
        Phonon.createPath(self.media, self.video)
        self.button = QtGui.QPushButton('Choose File', self)
        self.button.clicked.connect(self.handleButton)
        self.list = QtGui.QListWidget(self)
        self.list.addItems(Phonon.BackendCapabilities.availableMimeTypes())
        layout = QtGui.QVBoxLayout(self)
        layout.addWidget(self.video, 1)
        layout.addWidget(self.button)
        layout.addWidget(self.list)

    def handleButton(self):
        if self.media.state() == Phonon.PlayingState:
            self.media.stop()
        else:
            path = QtGui.QFileDialog.getOpenFileName(self, self.button.text())
            if path:
                self.media.setCurrentSource(Phonon.MediaSource(path))
                self.media.play()

    def handleStateChanged(self, newstate, oldstate):
        if newstate == Phonon.PlayingState:
            self.button.setText('Stop')
        elif (newstate != Phonon.LoadingState and
              newstate != Phonon.BufferingState):
            self.button.setText('Choose File')
            if newstate == Phonon.ErrorState:
                source = self.media.currentSource().fileName()
                print ('ERROR: could not play:', source.toLocal8Bit().data())
                print ('  %s' % self.media.errorString().toLocal8Bit().data())

if __name__ == '__main__':

    import sys
    app = QtGui.QApplication(sys.argv)
    app.setApplicationName('Phonon Player')
    window = Window()
    window.show()
    sys.exit(app.exec_())
下面是一个简单的phonon演示,为我播放quicktime文件(在Linux上,使用GStreamer后端)。演示还列出了当前phonon后端可以处理的所有可用mime类型。在我的系统中,mime类型“video/quicktime”显示在列表中

如果您在控制台中运行它,它还将打印出任何声子错误消息

编辑

看来,在windows上,phonon可能会使用windows Media Player作为后端。如果是这样,那么可能需要为WMP安装一些额外的编解码器,以便它可以播放quicktime文件

from PyQt4 import QtGui, QtCore
from PyQt4.phonon import Phonon

class Window(QtGui.QWidget):
    def __init__(self):
        QtGui.QWidget.__init__(self)
        self.media = Phonon.MediaObject(self)
        self.media.stateChanged.connect(self.handleStateChanged)
        self.video = Phonon.VideoWidget(self)
        self.video.setMinimumSize(400, 400)
        self.audio = Phonon.AudioOutput(Phonon.VideoCategory, self)
        Phonon.createPath(self.media, self.audio)
        Phonon.createPath(self.media, self.video)
        self.button = QtGui.QPushButton('Choose File', self)
        self.button.clicked.connect(self.handleButton)
        self.list = QtGui.QListWidget(self)
        self.list.addItems(Phonon.BackendCapabilities.availableMimeTypes())
        layout = QtGui.QVBoxLayout(self)
        layout.addWidget(self.video, 1)
        layout.addWidget(self.button)
        layout.addWidget(self.list)

    def handleButton(self):
        if self.media.state() == Phonon.PlayingState:
            self.media.stop()
        else:
            path = QtGui.QFileDialog.getOpenFileName(self, self.button.text())
            if path:
                self.media.setCurrentSource(Phonon.MediaSource(path))
                self.media.play()

    def handleStateChanged(self, newstate, oldstate):
        if newstate == Phonon.PlayingState:
            self.button.setText('Stop')
        elif (newstate != Phonon.LoadingState and
              newstate != Phonon.BufferingState):
            self.button.setText('Choose File')
            if newstate == Phonon.ErrorState:
                source = self.media.currentSource().fileName()
                print ('ERROR: could not play:', source.toLocal8Bit().data())
                print ('  %s' % self.media.errorString().toLocal8Bit().data())

if __name__ == '__main__':

    import sys
    app = QtGui.QApplication(sys.argv)
    app.setApplicationName('Phonon Player')
    window = Window()
    window.show()
    sys.exit(app.exec_())

我试着运行你的演示。列表中说它支持quicktime文件,但当我尝试播放.mov文件时,它说不支持该格式…@Johanna。确切的错误信息是什么?您可以与其他应用程序一起播放quicktime文件吗?另外:您在什么平台上,使用什么版本的Qt?确切的错误消息是“错误:无法播放。无法读取文件。格式不受支持”。使用quicktime,我可以很好地读取文件。“我在Windows7上使用PyQT4。@Johanna。这些错误消息特定于Windows Media Player,phonon将其用作系统的后端。因此,可能是WMP未配置为播放quicktime文件。是否可能是因为我使用的是windows 64位,所以它无法工作?