如何在Chrome OS或Chrome扩展程序的打包应用中启用摄像头和麦克风?

3
我正在测试一种场景,其中我在单独的窗口中调用“Hangouts”网页,但应用程序没有访问麦克风和摄像头 - 按钮是红色的,并且消息显示“Hangouts无法使用选择的麦克风/摄像头”。
我已经在权限中包含了"audioCapture"和"videoCapture"。
怎样才能使其工作?
编辑:
在允许媒体应用程序访问相机和麦克风之后,我可以在hangouts的设置中看到它们,但是图像和声音没有传输到其他参与者的hangouts。是否需要设置流媒体?
我已经有了这段代码:
navigator.webkitGetUserMedia({ audio: true, video: true },
            function (stream) {
                mediaStream = stream;
            },
            function (error) {
                console.error("Error trying to get the stream:: " + error.message);
            });    

你正在将Hangouts嵌入到一个<webview>中,是吗? - Xan
是的,就像你说的那样。 - Jacek
也许你正在为应用程序打开流,而嵌入的页面无法获取它,因为它是独占访问的? - Xan
我不太理解(我是一个新的打包应用程序)。我可以说作为Chrome扩展它可以工作,但作为Chrome OS上的打包应用程序媒体无法传输。 - Jacek
我的观点是,这段代码不应该出现在你的应用程序中;Hangouts 应该自己请求 GetUserMedia,你只需要处理权限请求即可。如果这段代码出现在你的应用程序中,它可能会与 Hangouts 冲突。 - Xan
我明白了。如果同一个应用程序作为Chrome扩展程序工作,但在单独的窗口中打开(chrome.app.window.create),这仍然适用吗? - Jacek
1个回答

5
如果您需要为嵌入在<webview>中的页面提供音频/视频,仅要求"audioCapture"/"videoCapture"权限是不够的。为了使用它们,页面需要向浏览器请求权限。在普通的Chrome浏览器中,您会看到一个信息栏,允许用户允许/拒绝请求。但是,<webview>并不显示这些元素,而是引发一个事件,由应用程序决定是否允许/拒绝该请求:

permissionrequest

Fired when the guest page needs to request special permission from the embedder.

The following example code will grant the guest page access to the webkitGetUserMedia API. Note that an app using this example code must itself specify audioCapture and/or videoCapture manifest permissions:

webview.addEventListener('permissionrequest', function(e) {
  if (e.permission === 'media') {
    e.request.allow();
  }
});

1
我正在开发一个Chromebook kiosk应用程序,需要访问麦克风和摄像头;这段代码加上manifest.json中的audioCapturevideoCapture权限完美地解决了问题。 - Joe
1
对于Chrome扩展程序,似乎无法添加videoCapture权限。 - user239558

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接