Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. Qt Development
  3. QtWebEngine
  4. MacOS - The video widget is not compatible with QtWebEngine

MacOS - The video widget is not compatible with QtWebEngine

Scheduled Pinned Locked Moved Unsolved QtWebEngine
1 Posts 1 Posters 558 Views 1 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • myxingkongM Offline
    myxingkongM Offline
    myxingkong
    wrote on last edited by
    #1

    I have a program embedded with both media player and QtWebEngine, which is used to access specific web pages when playing video.

    It worked perfectly on Windows and Linux, and when I ran it on MacOS, the media player would become invisible, and QtWebEngine had some display problems.

    I tested the VLC MediaPlayer and QMediaPlayer on PySide5.9.6 and 5.11, and they all had the same problems.

    VLC test code

    # -*- coding: utf-8 -*-
    import sys
    import os
    import vlc
    
    from PySide2.QtGui import *
    from PySide2.QtWidgets import *
    from PySide2.QtCore import *
    from PySide2.QtWebEngineWidgets import *
    
    class test_widget(QWidget):
    
        def __init__(self, parent=None):
            super(test_widget, self).__init__(parent)
            self.__ui__()
    
        def __ui__(self):
            t_lay_parent = QVBoxLayout()
            t_lay_content = QHBoxLayout()
            t_lay_tool = QHBoxLayout()
    
            self.label_media = QLabel()
            self.webengine = QWebEngineView()
            t_lay_content.addWidget(self.label_media, 1)
            t_lay_content.addWidget(self.webengine, 1)
    
            self.lineedit_url = QLineEdit("http://baidu.com")
            self.button_go = QPushButton("Go")
            self.button_play = QPushButton("Play")
            t_lay_tool.addWidget(self.lineedit_url)
            t_lay_tool.addWidget(self.button_go)
            t_lay_tool.addWidget(self.button_play)
    
            self.button_go.clicked.connect(self.slt_go)
            self.button_play.clicked.connect(self.slt_play)
    
            t_lay_parent.addLayout(t_lay_content)
            t_lay_parent.addLayout(t_lay_tool)
            self.setLayout(t_lay_parent)
    
            self.instance = vlc.Instance("-q")
            self.m_player = self.instance.media_player_new()
            t_wid = self.label_media.winId()
            if sys.platform.startswith('linux'):  # linux
                self.m_player.set_xwindow(t_wid)
            elif sys.platform == "win32":  # windows
                self.m_player.set_hwnd(t_wid)
            elif sys.platform == "darwin":  # mac
                self.m_player.set_nsobject(t_wid)
    
        def slt_go(self):
            t_url = self.lineedit_url.text()
            self.webengine.setUrl(QUrl(t_url))
    
        def slt_play(self):
            t_media = self.instance.media_new("1.mp4")
            self.m_player.set_media(t_media)
            self.m_player.play()
    
    if __name__ == '__main__':
        app = QApplication(sys.argv)
        win = test_widget()
        win.show()
        sys.exit(app.exec_())
    

    QMediaPlayer test code

    # -*- coding: utf-8 -*-
    
    import os
    import sys
    
    from PySide2.QtGui import *
    from PySide2.QtCore import *
    from PySide2.QtWidgets import *
    from PySide2.QtMultimedia import *
    from PySide2.QtWebEngineWidgets import *
    from PySide2.QtMultimediaWidgets import *
    
    class demo_widget(QWidget):
        def __init__(self, parent=None):
            super(demo_widget, self).__init__(parent)
            self.__ui__()
    
        def __ui__(self):
            t_lay_parnet = QVBoxLayout()
            t_lay_content = QHBoxLayout()
            self.video_widget = QVideoWidget()
            self.webView = QWebEngineView()
            t_lay_content.addWidget(self.video_widget, 1)
            t_lay_content.addWidget(self.webView, 1)
            t_lay_bottom = QHBoxLayout()
            self.lineEdit = QLineEdit("https://Google.com")
            self.pushButton = QPushButton("Go")
            self.pushButton1 = QPushButton("Play")
            t_lay_bottom.addWidget(self.lineEdit)
            t_lay_bottom.addWidget(self.pushButton)
            t_lay_bottom.addWidget(self.pushButton1)
            t_lay_parnet.addLayout(t_lay_content)
            t_lay_parnet.addLayout(t_lay_bottom)
            self.setLayout(t_lay_parnet)
            self.pushButton.clicked.connect(self.slt_jump)
            self.pushButton1.clicked.connect(self.slt_play)
            self.player = QMediaPlayer()
            self.player.setVideoOutput(self.video_widget)
    
        def slt_jump(self):
            t_text = self.lineEdit.text()
            if t_text.strip() != "":
                self.webView.load(QUrl(t_text))
    
        def slt_play(self):
            self.player.setMedia(QMediaContent(QUrl.fromLocalFile("1.mp4")))
            self.player.play()
    
    if __name__ == "__main__":
        app = QApplication(sys.argv)
        win = demo_widget()
        win.show()
        sys.exit(app.exec_())
    

    Hello World!

    1 Reply Last reply
    0

    • Login

    • Login or register to search.
    • First post
      Last post
    0
    • Categories
    • Recent
    • Tags
    • Popular
    • Users
    • Groups
    • Search
    • Get Qt Extensions
    • Unsolved