3

我正在构建一个从 Python 调用的简单 Web 应用程序。我正在使用下面的代码。加载此页面时,以编程方式授予对摄像头和麦克风的访问权限的最简单方法是什么?我只在网上找到了 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_()
4

2 回答 2

5

要授予权限,您必须使用QWebEnginePage的setFeaturePermission方法,但是当视图发出featurePermissionRequested信号时,您必须这样做,这将指示 url 和feature

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_()
于 2018-02-08T02:56:42.237 回答
0

所以我发现 Raspberry Pi 上的 PyQt 不包含对 WebEngine 功能的支持。因此,PyQt 中的 WebEngineView 类不能在 Pi 上使用。(我真的不明白为什么它在 Ubuntu 上运行良好但在 Raspbian 上运行良好,但无论如何......)。

我开始使用 Qt 本身,但后来了解到您可以使用以下方法

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

启动 Chrome 并预先授予对麦克风和摄像头的访问权限。

于 2018-04-26T11:55:42.107 回答