我在寫一個與VLC接口的PySide Python應用程序。在Ubuntu上運行得很好,但是當我移動到Windows時,我甚至無法讓VLC打開視頻文件。libvlc「VLC無法打開MRL'C: Users Public Videos 示例Videos Wildlife.mwv'」
我將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_())