如何将VLC实例插入到QFrame中

7
我正在尝试制作一个简单的视频播放器应用程序,通过在PyQt小部件(QFrame)中嵌入VLC实例来实现。我找到了一些示例代码,但我的代码并不完全有效。当我启动它时,它会播放“test_video.mp4”,但是它会在自己单独的窗口中启动常规的VLC播放器应用程序。当我关闭VLC播放器窗口时,显然视频停止了,但音频仍然继续播放,直到我关闭自己的Qt(PyQt)窗口。

编辑1:忘记提到我正在使用通过pip下载的python-vlc。

    ### video_player.py

    import sys
    import vlc
    from PyQt4 import QtCore, QtGui
    from video_player_main_window import Ui_MainWindow

    class StartQT4(QtGui.QMainWindow):
        def __init__(self, parent=None):
            QtGui.QWidget.__init__(self, parent)
            self.ui = Ui_MainWindow()
            self.ui.setupUi(self)

            self.vlc_instance = vlc.Instance("--no-xlib --sout-all")
            self.mediaplayer = self.vlc_instance.media_player_new()
            self.mediaplayer.set_xwindow(self.ui.video_frame.winId())
            print(self.ui.video_frame.winId())
            self.media_path = "test_video.mp4"
            self.media = self.vlc_instance.media_new(self.media_path)
            self.mediaplayer = self.vlc_instance.media_player_new()
            self.mediaplayer.set_media(self.media)
            self.mediaplayer.play()

    if __name__ == "__main__":
        app = QtGui.QApplication(sys.argv)
        myapp = StartQT4()
        myapp.show()
        sys.exit(app.exec_())

我添加了一个“print(self.ui.video_frame.win())”仅用于调试/检查,以确保它是一个合法的值。以下是命令行输出。在我关闭 VLC 窗口时,仍然运行我的 PyQt 窗口之后,会出现“X 服务器故障”。

### command line output

106954771
[00007f9c48055168] vdpau_avcodec generic error: Xlib is required for VDPAU
[00007f9c3c003968] xcb_window window error: X server failure

“video_player_main_window”是QtDesigner(+ pyuic4)生成的模块。 “video_frame”是我尝试将VLC实例放入其中的QFrame对象的名称。请参见此处video_player_main_window.py的完整代码:http://pastebin.com/cHpAHZN2
1个回答

3
如何实现以下操作:

如何做到这样:

 import sys
 import vlc
 from PyQt4 import QtCore, QtGui
 from video_player_main_window import Ui_MainWindow

 class StartQT4(QtGui.QMainWindow):
     def __init__(self, parent=None):
         QtGui.QWidget.__init__(self, parent)
         self.ui = Ui_MainWindow()
         self.ui.setupUi(self)

         self.vlc_instance = vlc.Instance()
         self.mediaplayer = self.vlc_instance.media_player_new()
         self.mediaplayer.set_hwnd(int(self.frame.winId()))
         self.media_path = "test_video.mp4"
         self.media = self.vlc_instance.media_new(self.media_path)
         self.media.get_mrl()
         self.mediaplayer.set_media(self.media)
         self.mediaplayer.play()

if __name__ == "__main__":
    app = QtGui.QApplication(sys.argv)
    myapp = StartQT4()
    myapp.show()
    sys.exit(app.exec_())

我通常使用这个来制作我的简单播放器。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接