Как сделать так, чтобы работали прямые трансляции на 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