3

私は完全に pyside の初心者であり、PySide.phonon を使用してメディア プレーヤーを作成したいと考えています。私の質問は、メディア プレーヤーは mp4、flv、mkv などのメディア フォーマットをサポートできますか?

4

2 に答える 2

3

この質問に答える最善の方法は、興味のある種​​類のファイルを再生してみるか、サポートされている MIME タイプのリストを確認することです。

これを可能にするデモ ビデオ プレーヤーを次に示します。

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

class Window(QtGui.QWidget):
    def __init__(self):
        QtGui.QWidget.__init__(self)
        self.setWindowTitle('Video Player')
        self.media = Phonon.MediaObject(self)
        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.buttonChoose = QtGui.QPushButton('Choose File', self)
        self.buttonMimes = QtGui.QPushButton('Show Mimetypes', self)
        self.slider = Phonon.VolumeSlider(self)
        self.slider.setAudioOutput(self.audio)
        layout = QtGui.QGridLayout(self)
        layout.addWidget(self.video, 0, 0, 1, 2)
        layout.addWidget(self.buttonChoose, 1, 0)
        layout.addWidget(self.buttonMimes, 1, 1)
        layout.addWidget(self.slider, 2, 0, 1, 2)
        layout.setRowStretch(0, 1)
        self.media.stateChanged.connect(self.handleStateChanged)
        self.buttonChoose.clicked.connect(self.handleButtonChoose)
        self.buttonMimes.clicked.connect(self.handleButtonMimes)

    def handleButtonChoose(self):
        if self.media.state() == Phonon.PlayingState:
            self.media.stop()
        else:
            dialog = QtGui.QFileDialog(self)
            dialog.setFileMode(QtGui.QFileDialog.ExistingFile)
            if dialog.exec_() == QtGui.QDialog.Accepted:
                path = dialog.selectedFiles()[0]
                self.media.setCurrentSource(Phonon.MediaSource(path))
                self.media.play()
            dialog.deleteLater()

    def handleButtonMimes(self):
        dialog = MimeDialog(self)
        dialog.exec_()

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

class MimeDialog(QtGui.QDialog):
    def __init__(self, parent):
        QtGui.QDialog.__init__(self, parent)
        self.setAttribute(QtCore.Qt.WA_DeleteOnClose)
        self.setWindowTitle('Mimetypes')
        listbox = QtGui.QListWidget(self)
        listbox.setSortingEnabled(True)
        backend = Phonon.BackendCapabilities
        listbox.addItems(backend.availableMimeTypes())
        layout = QtGui.QVBoxLayout(self)
        layout.addWidget(listbox)
        self.resize(300, 500)

if __name__ == '__main__':

    import sys
    app = QtGui.QApplication(sys.argv)
    app.setApplicationName('Phonon Player')
    window = Window()
    window.show()
    sys.exit(app.exec_())
于 2012-08-30T17:32:34.393 に答える
1

Phononは、KDEによって設計され、Qtによってupsteamを採用したラッパーライブラリです。ライブラリの目的は、マルチメディアアプリケーションに移植性を追加し、メディア再生を行う実際のサブシステムの詳細を抽象化することでした。Windowsでは、DirectShowは実際のファイルを再生します。OS Xでは、QuickTime。Linuxでは、任意の数のメディアバックエンドがファイルを再生でき、それぞれに独自の機能があります。VLCバックエンドを使用すると、すべてのプラットフォームで太陽の下でほとんどすべてを再生できます!

その結果、アプリケーション開発者は、コードを実行しているコンピューターでPhononが再生できる形式がわかりません。ただし、Phononは、使用されているバックエンドとその機能を確認するためのメカニズムをいくつか提供します。良い例はこのチュートリアルです-C++で書かれていますが。理解しやすく、Pythonに移植するのは簡単なはずです。

于 2012-09-01T17:26:43.080 に答える