Python 3.x 带有vlc的Python QT应用程序不显示全屏

Python 3.x 带有vlc的Python QT应用程序不显示全屏,python-3.x,qt,pyqt,fullscreen,vlc-qt,Python 3.x,Qt,Pyqt,Fullscreen,Vlc Qt,我正在开发一个应用程序,其中显示多个vlc流(rtsp),双击其中一个,流应该全屏显示。 应用程序是使用pyqt5和vlcqt的python3.7 代码如下: import sys import vlc from PyQt5.QtCore import * from PyQt5.QtWidgets import * from PyQt5.QtGui import * from PyQt5.QtWebEngineWidgets import * from PyQt5.QtPrintSupport

我正在开发一个应用程序,其中显示多个vlc流(rtsp),双击其中一个,流应该全屏显示。 应用程序是使用pyqt5和vlcqt的python3.7

代码如下:

import sys
import vlc
from PyQt5.QtCore import *
from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
from PyQt5.QtWebEngineWidgets import *
from PyQt5.QtPrintSupport import *

class MainWindow(QMainWindow):
    def __init__(self, *args, **kwargs):
        super(MainWindow, self).__init__(*args, **kwargs)

        self.sizeHint = lambda: QSize(1280, 900)
        self.move(100, 10)

        self.videoFrame = QFrame()
        self.setCentralWidget(self.videoFrame)

        self.vlcInstance = vlc.Instance(['--video-on-top'])
        self.videoPlayer = self.vlcInstance.media_player_new()
        self.videoPlayer.set_mrl("rtsp://xxx.xxx.xxx.xxx", "network-caching=300")
        self.videoPlayer.audio_set_mute(True)
        if sys.platform.startswith('linux'): # for Linux using the X Server
            self.videoPlayer.set_xwindow(self.videoFrame.winId())
        elif sys.platform == "win32": # for Windows
            self.videoPlayer.set_hwnd(self.videoFrame.winId())
        elif sys.platform == "darwin": # for MacOS
            self.videoPlayer.set_nsobject(int(self.videoFrame.winId()))

        self.videoPlayer.play()
        self.show()

if __name__ == "__main__":
    app = QApplication(sys.argv)
    app.setApplicationName("VLC Test")

    window = MainWindow()
    app.exec_()
双击视频时,将显示以下控制台消息:

[000001e0a128e630]MM设备音频输出错误:无法初始化COM(错误0x80010106) [000001e0a12c8710]MM设备音频输出错误:无法初始化COM(错误0x80010106) [000001e0a2927420]主vout显示错误:未能设置全屏显示

我双击时会立即显示消息“未能设置全屏”。 有人知道问题出在哪里吗


提前感谢

这是一个简化的流代码,可以简化事情。视频在窗口中完美运行,但无法设置FullScreen这是一个简化的流代码,以简化事情。视频在窗口中完美运行,但无法设置全屏。此操作非常有效。如果QGridLayout中有两个视频,并且双击的视频应该是全屏的,你知道我该怎么做吗?你可以用两个QFrame包装视频,然后收听mouseDoubleClickEvent。mouseDoubleClickEvent似乎在QFrame中不起作用,显示vlc视频。这非常有效。如果QGridLayout中有两个视频,并且双击的视频应该是全屏的,你知道我该怎么做吗?你可以用两个QFrame包装视频并收听mouseDoubleClickEvent。mouseDoubleClickEvent似乎在显示vlc视频的QFrame内不起作用
import sys
import vlc
from PyQt5.QtCore import *
from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
from PyQt5.QtWebEngineWidgets import *
from PyQt5.QtPrintSupport import *

class MainWindow(QMainWindow):
    def __init__(self, *args, **kwargs):
        super(MainWindow, self).__init__(*args, **kwargs)

        self.sizeHint = lambda: QSize(1280, 900)
        self.move(100, 10)
        self.mainFrame = QFrame()
        self.setCentralWidget(self.mainFrame)
        t_lay_parent = QHBoxLayout()
        t_lay_parent.setContentsMargins(0, 0, 0, 0)

        self.videoFrame = QFrame()
        self.videoFrame.mouseDoubleClickEvent = self.mouseDoubleClickEvent
        t_lay_parent.addWidget(self.videoFrame)
        self.vlcInstance = vlc.Instance(['--video-on-top'])
        self.videoPlayer = self.vlcInstance.media_player_new()
        self.videoPlayer = self.vlcInstance.media_player_new()
        self.videoPlayer.video_set_mouse_input(False)
        self.videoPlayer.video_set_key_input(False)
        self.videoPlayer.set_mrl("http://xxx.xxx.xxx.xxx", "network-caching=300")
        self.videoPlayer.audio_set_mute(True)
        if sys.platform.startswith('linux'): # for Linux using the X Server
            self.videoPlayer.set_xwindow(self.videoFrame.winId())
        elif sys.platform == "win32": # for Windows
            self.videoPlayer.set_hwnd(self.videoFrame.winId())
        elif sys.platform == "darwin": # for MacOS
            self.videoPlayer.set_nsobject(int(self.videoFrame.winId()))

        self.videoPlayer.play()


        self.videoFrame1 = QFrame()
        t_lay_parent.addWidget(self.videoFrame1)
        self.videoFrame1.mouseDoubleClickEvent = self.mouseDoubleClickEvent1
        self.vlcInstance1 = vlc.Instance(['--video-on-top'])
        self.videoPlayer1 = self.vlcInstance1.media_player_new()
        self.videoPlayer1 = self.vlcInstance1.media_player_new()
        self.videoPlayer1.video_set_mouse_input(False)
        self.videoPlayer1.video_set_key_input(False)
        self.videoPlayer1.set_mrl("rtmp://xxx.xxx.xxx.xxx", "network-caching=300")
        self.videoPlayer1.audio_set_mute(True)
        if sys.platform.startswith('linux'): # for Linux using the X Server
            self.videoPlayer1.set_xwindow(self.videoFrame1.winId())
        elif sys.platform == "win32": # for Windows
            self.videoPlayer1.set_hwnd(self.videoFrame1.winId())
        elif sys.platform == "darwin": # for MacOS
            self.videoPlayer1.set_nsobject(int(self.videoFrame1.winId()))

        self.videoPlayer1.play()

        self.mainFrame.setLayout(t_lay_parent)
        self.show()

    def mouseDoubleClickEvent(self, event):
        if event.button() == Qt.LeftButton:
            if self.windowState() == Qt.WindowNoState:
                self.videoFrame1.hide()
                self.videoFrame.show()
                self.setWindowState(Qt.WindowFullScreen)
            else:
                self.videoFrame1.show()
                self.setWindowState(Qt.WindowNoState)

    def mouseDoubleClickEvent1(self, event):
        if event.button() == Qt.LeftButton:
            if self.windowState() == Qt.WindowNoState:
                self.videoFrame.hide()
                self.videoFrame1.show()
                self.setWindowState(Qt.WindowFullScreen)
            else:
                self.videoFrame.show()
                self.setWindowState(Qt.WindowNoState)

if __name__ == "__main__":
    app = QApplication(sys.argv)
    app.setApplicationName("VLC Test")

    window = MainWindow()
    app.exec_()