我沒有看到你發佈的代碼有任何明顯的錯誤。如果你的系統有必要的編解碼器,沒有理由聲子不能播放QuickTime文件。
下面是一個簡單的聲子演示播放QuickTime文件,我(在Linux上,使用的GStreamer後端)。該演示還列出了當前聲子後端可以處理的所有可用的MIME類型。在我的系統中,列表中顯示了mime類型的「video/quicktime」。
如果您在控制檯中運行它,它也會打印出任何聲子錯誤信息。
編輯
看來,在Windows上,聲子可以使用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 2011-12-14 18:12:48