Как сделать так, чтобы работали прямые трансляции на PyQT6?

Разрабатываю браузер на PyQt6 для Windows и необходимо реализовать поддержку HTML5 видео-потоков, WebRTC и кодека H.264. Пока не разбираюсь в организации воспроизведения потокового контента. Какие компоненты и настройки потребуются для поддержки воспроизведения таких прямых трансляций на сайтах в браузере на основе PyQt6?

Вот минимальный код:

from PyQt6.QtWidgets import QApplication, QMainWindow, QVBoxLayout, QWidget, QTabWidget, QLineEdit, QVBoxLayout
from PyQt6.QtWebEngineWidgets import QWebEngineView
from PyQt6.QtGui import QIcon
from PyQt6 import QtCore, QtWidgets
from PyQt6.QtWebEngineWidgets import QWebEngineView
from PyQt6.QtWebEngineCore import QWebEngineProfile, QWebEngineSettings
import sys

class BrowserTab(QWidget):
    def __init__(self, parent=None):
        super().__init__(parent)
        self.browser = QWebEngineView()
        self.browser.page().fullScreenRequested.connect(self.fullscreen_request)

        layout = QVBoxLayout(self)
        self.addressbar = QLineEdit()
        self.addressbar.returnPressed.connect(self.navigate_to_url)

        layout.addWidget(self.addressbar)
        layout.addWidget(self.browser)
        self.browser.setUrl(QtCore.QUrl("https://google.com"))

        global_settings = QWebEngineProfile.defaultProfile().settings()
        for attr in (
            QWebEngineSettings.WebAttribute.PluginsEnabled,
            QWebEngineSettings.WebAttribute.FullScreenSupportEnabled,
        ):
            global_settings.setAttribute(attr, True)
        self.browser.page().fullScreenRequested.connect(self.fullscreen_request)
    def navigate_to_url(self):
        url = self.addressbar.text()
        self.browser.setUrl(QtCore.QUrl(url if url.startswith("http") else f"https://{url}"))

    def fullscreen_request(self, request):
        request.accept()
        if request.toggleOn():
            self.browser.setParent(None)
            self.browser.showFullScreen()
        else:
            # Запоминаем текущий фокус
            current_focus_widget = QtWidgets.QApplication.focusWidget()
            self.browser.setParent(self)
            layout = self.findChild(QVBoxLayout)
            if layout:
                layout.addWidget(self.browser)
            self.browser.showNormal()
            if current_focus_widget:
                current_focus_widget.setFocus()

class MainWindow(QMainWindow):
    def __init__(self):
        super().__init__()
        self.setWindowTitle("Браузер")
        self.resize(800, 600)

        self.tabs = QTabWidget()
        self.tabs.setTabsClosable(True)
        self.tabs.tabCloseRequested.connect(self.close_tab)
        self.setCentralWidget(self.tabs)

        self.add_tab()

    def add_tab(self):
        tab = BrowserTab(self)
        self.tabs.addTab(tab, "Новая вкладка")
        self.tabs.setCurrentWidget(tab)

    def close_tab(self, index):
        self.tabs.widget(index).deleteLater()
        self.tabs.removeTab(index)
        if self.tabs.count() == 0:
            self.close()

if __name__ == "__main__":
    app = QApplication(sys.argv)
    window = MainWindow()
    window.show()
    sys.exit(app.exec())

введите сюда описание изображения


Ответы (1 шт):

Автор решения: eri

Нужно пересобрать qtwebengine с кодеками чтоб работало h264

https://doc.qt.io/qt-6/qtwebengine-features.html#audio-and-video-codecs

→ Ссылка