Предоставьте доступ к Cam & Mic с помощью Python для PyQt WebEngine

Я строю простое веб-приложение под названием из Python. Я использую приведенный ниже код. Какой самый простой способ программно предоставить доступ к Cam & Mic при загрузке этой страницы? Я нашел только примеры C++ в Интернете и не могу найти способ сделать это в коде Python.

from PyQt5.QtWidgets import QApplication
from  PyQt5.QtWebEngineWidgets import QWebEngineView
from PyQt5.QtCore import QUrl

app = QApplication([])

view = QWebEngineView()
view.load(QUrl("https://test.webrtc.org/"))
view.show()
app.exec_()

2 ответа

Решение

Чтобы дать разрешение, вы должны использовать метод setFeaturePermission в QWebEnginePage, но вы должны сделать это, когда представление попросит вас сделать это, когда оно испускает сигнал featurePermissionRequested, это будет указывать URL и функцию.

from PyQt5.QtWidgets import QApplication
from PyQt5.QtWebEngineWidgets import QWebEngineView, QWebEnginePage
from PyQt5.QtCore import QUrl

class WebEnginePage(QWebEnginePage):
    def __init__(self, *args, **kwargs):
        QWebEnginePage.__init__(self, *args, **kwargs)
        self.featurePermissionRequested.connect(self.onFeaturePermissionRequested)

    def onFeaturePermissionRequested(self, url, feature):
        if feature in (QWebEnginePage.MediaAudioCapture, 
            QWebEnginePage.MediaVideoCapture, 
            QWebEnginePage.MediaAudioVideoCapture):
            self.setFeaturePermission(url, feature, QWebEnginePage.PermissionGrantedByUser)
        else:
            self.setFeaturePermission(url, feature, QWebEnginePage.PermissionDeniedByUser)

app = QApplication([])

view = QWebEngineView()
page = WebEnginePage()
view.setPage(page)
view.load(QUrl("https://test.webrtc.org/"))
view.show()
app.exec_()

Итак, я обнаружил, что PyQt на Raspberry Pi не включает поддержку возможностей WebEngine. Поэтому класс WebEngineView в PyQt нельзя использовать на Pi. (Я не очень понимаю, почему он работает нормально на Ubuntu, но не на Raspbian, но в любом случае...).

Я начал использовать сам Qt, но потом узнал, что вы можете использовать следующий подход

os.system('chromium-browser --use-fake-ui-for-media-stream %s' % URL)

запустить Chrome с доступом к микрофону и предварительно предоставленной камере.

Другие вопросы по тегам