2013-03-11 282 views
1

我在寫一個與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_()) 

回答

2

,如果你打開一個文件(而不是流或其它來源)libVLC需要你先從「文件的文件路徑: ///「,當在窗口中使用python中的文件路徑時,爲了逃避\(a la \),需要使用\。

因此用來打電話給你的文件應該是這個樣子的字符串: 「文件:/// C:\用戶\公用\視頻\樣品影片\ Wildlife.mwv」

另注:如果你可以,最好從文件路徑中取出任何空格(即「Sample Videos」)

相關問題