1

VLC と連携する PySide Python アプリケーションを作成しています。Ubuntu では問題なく動作しますが、Windows に移行すると、VLC でビデオ ファイルを開くことさえできません。

VideoLAN PyQt の例 ( http://git.videolan.org/?p=vlc/bindings/python.git;a=blob;f=examples/qtvlc.py;h=34aeedce116e05f575eb0ebffdacf8f06db80402;hb=HEAD )を切り詰めました。何が問題なのかを把握しようとするウィンドウとビデオプレーヤーだけで、それでもこのエラーが発生します。ファイルを開くダイアログからの戻りを使用しても、同じエラーが発生します。

以下は、VideoLAN の例の非常に簡略化されたバージョンです。

import sys
import vlc
import user
from ctypes import pythonapi, c_void_p, py_object
from PySide import QtGui, QtCore

class Player(QtGui.QMainWindow):
  def __init__(self, master = None):
    QtGui.QMainWindow.__init__(self, master)

    self.setWindowTitle('Media Player')

    self.instance = vlc.Instance()
    self.mediaplayer = self.instance.media_player_new()

    self.createUI()

  def createUI(self):
    self.widget = QtGui.QWidget(self)
    self.setCentralWidget(self.widget)

    self.videoframe = QtGui.QFrame()
    self.palette = self.videoframe.palette()
    self.palette.setColor(QtGui.QPalette.Window,
                          QtGui.QColor(0, 0, 0))
    self.videoframe.setPalette(self.palette)
    self.videoframe.setAutoFillBackground(True)

    self.vboxlayout = QtGui.QVBoxLayout()
    self.vboxlayout.addWidget(self.videoframe)

    self.widget.setLayout(self.vboxlayout)

    self.OpenFile()

  def OpenFile(self, filename = None):
    if filename is None:
      filename = QtGui.QFileDialog.getOpenFileName(self, 'Open File', user.home)
      filename = filename[0]
    if not filename:
      return

    print filename
    self.media = self.instance.media_new(unicode(filename))
    self.mediaplayer.set_media(self.media)

    self.media.parse()
    self.setWindowTitle(self.media.get_meta(0))

    if sys.platform == 'linux2':
      self.mediaplayer.set_xwindow(self.videoframe.winId())
    elif sys.platform == 'win32':
      pythonapi.PyCObject_AsVoidPtr.restype = c_void_p
      pythonapi.PyCObject_AsVoidPtr.argtypes = [py_object]
      hWnd = pythonapi.PyCObject_AsVoidPtr(self.videoframe.winId())
      self.mediaplayer.set_hwnd(hWnd)
    elif sys.platform == 'darwin':
      self.mediaplayer.set_agl(self.videoframe.windId())

    self.mediaplayer.play()

if __name__ == '__main__':
  app = QtGui.QApplication(sys.argv)
  player = Player()
  player.show()
  player.resize(640, 480)

  sys.exit(app.exec_())
4

1 に答える 1

3

ファイルを開く場合 (ストリームやその他のソースではない場合)、libVLC ではファイル パスを「file:///」で開始する必要があります。また、Windows で Python でファイル パスを使用する場合は、エスケープするために \ を使用する必要があります。 \ (a la \')。

したがって、ファイルを呼び出すために使用される文字列は次のようになります。「file:///C:\Users\Public\Videos\Sample Videos\Wildlife.mwv」

別の注意: 可能であれば、ファイル パスからスペースを削除することをお勧めします (つまり、「サンプル ビデオ」)。

于 2013-06-10T20:00:05.383 に答える