14

我已成功使用 webkitGetUserMedia 在普通网页上从我的网络摄像头捕获视频,但是当我尝试在 Chrome 扩展程序的 popup.html 中执行此操作时,没有任何反应。我没有收到任何权限错误,它甚至似乎从来没有问过(inforbar 永远不会在弹出窗口中向下滑动)。有没有办法解决?看起来我不能在清单 json 中授予权限。

4

4 回答 4

20

这是一个便宜的黑客,但是如果你为你的扩展创建一个选项页面并webkitGetUserMedia在 JS 中包含对它的调用,它将请求该扩展的所有 URI 的权限,在用户在选项页面中允许它之后,背景页面将也有权使用它。

于 2013-12-09T17:42:08.097 回答
6

Chrome 扩展和 WebRTC:

Chrome 扩展清单权限文档没有提到清单中需要的两个权限,“videoCapture”和“audioCapture”,所以我不确定 Chrome 扩展是否可以使用该功能,您应该尝试看看会发生什么在继续之前!;)

Chrome 打包应用程序和 WebRTC:

但是,在 Chrome 打包的应用程序中,沙盒和非沙盒页面都是可能的!Chrome 打包应用程序与扩展程序非常相似,因此根据您的操作,您可能想要构建一个应用程序。

Packaged Apps Manifest Permissions Documentation中,未明确列出“videoCapture”和“audioCapture”权限,但在示例中进行了演示。

我有一个打包的应用程序,它使用沙盒 HTML 页面来运行 webkitGetUserMedia,它运行良好。这是您在清单中需要的内容:

{
  "name": "app name",
  "version": "0.2",
  "manifest_version": 2,
  "minimum_chrome_version": "21",
  "app": {
    "background": {
      "scripts": ["main.js"]
    }
  },
  "icons": {
    /* "128": "icon_128.png" */
  },
  "sandbox": {
    "pages": ["call.htm" ]
  },
  "permissions" : [ "videoCapture", "audioCapture" ]
}

然后,您需要从 chrome://newtab 页面作为应用程序启动弹出窗口。main.js 应该包含如下内容:

// Chrome v24+
chrome.app.runtime.onLaunched.addListener(function() {
    chrome.app.window.create('mainpage.html',
        {width: 1190, height: 709});
});

主页应该是您的弹出窗口。在我的设置中,我在 mainpage.html 中有一个名为 call.htm 的 iframe,并且 iframe 页面是沙盒化的,因此它可以执行一些只能作为普通网页执行的不安全操作。但是,如果我在非沙盒弹出窗口中运行 getUserMedia 命令,我会从对 webkitGetUserMedia 的调用中获取 MediaStream 对象:

 navigator.webkitGetUserMedia({ audio: true, video: true },
                function (stream) {
                    mediaStream = stream;
                },
                function (error) {
                    console.error("Error trying to get the stream:: " + error.message);
                });

我对其进行了测试,并且能够在弹出窗口中捕获我的视频。

于 2012-10-29T20:55:36.107 回答
1

正如@tsbarnes 所建议的,有一个 hack,但对于 Chrome 应用程序,hack 是不同的,你可以调用 navigator.webkitGetUserMedia background.js,例如:

navigator.webkitGetUserMedia({audio: true, video: true}, function() {
    console.log('ok');
}, function(e) {
    console.log('webcam not ok');
});

然后您仍然可以从 window.html 或任何其他 webview 访问音频/视频

于 2014-03-29T19:07:58.460 回答
0

要求navigator.webkitGetUserMediaoptions.js作品中,但您必须option.html在新标签中打开弹出窗口,否则您将收到错误,因此manifest.json您必须编写

"options_ui": {
    "page": "options.html",
    "chrome_style": true,
    "open_in_tab": true
  }
于 2015-11-21T14:05:21.410 回答