【问题标题】:Play mov files in PyQt在 PyQt 中播放 mov 文件
【发布时间】:2011-12-14 09:39:43
【问题描述】:

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

我正在尝试使用声子模块,但不知何故我无法让它工作。

在我的 ui 文件(由 Qt 设计器生成)中,它是这样初始化的:

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()

谁能指出我做错了什么?

【问题讨论】:

    标签: video pyqt pyqt4 quicktime phonon


    【解决方案1】:

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

    下面是一个简单的声子演示,它为我播放 quicktime 文件(在 Linux 上,使用 GStreamer 后端)。该演示还列出了当前声子后端可以处理的所有可用 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。 exact 错误信息是什么?您可以使用其他应用程序播放 quicktime 文件吗?另外:您使用的是什么平台,您使用的是什么版本的 Qt?
    • 确切的错误消息是“错误:无法播放 。无法读取文件。不支持该格式”。我可以用 quicktime 很好地阅读文件。我在 Windows 7 上使用 PyQT4。
    • @Johanna。这些错误消息特定于 Windows Media Player,phonon 用作系统的后端。因此可能是 WMP 未配置为播放 quicktime 文件。
    • 是否有可能因为我使用的是 Windows 64 位而无法正常工作?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-06
    相关资源
    最近更新 更多