捕获屏幕 - chrome.desktopCapture.chooseDesktopMedia失败 - PNacl扩展

时间:2015-06-18 04:52:37

标签: javascript google-chrome-extension webrtc

我试图以下列方式使用desktopCapture API

chrome.desktopCapture.chooseDesktopMedia(
            ["screen", "window"], onAccessApproved);
当我设置断点并检查它时,

chrome.desktopCapture显示为未定义。我的清单文件中的权限如下: -

"permissions": ["desktopCapture", "notifications" ]

此API失败的常见原因列为here

  • 应用程序的manifest.json文件中缺少权限
  • API是在较新版本的Chrome上定义的,然后是当前运行时 从ChromeApi继承的文档

我没有遇到这些问题。

  • 我的Chrome版本为43.0.2357.124 m
  • Pepper版本是43

仅供参考,我正在尝试开发Chrome扩展程序以使用PNacl捕获屏幕,并借用media_stream_video example downloaded from here。但是,我还没有向pexe方面发送信息。我仍然坚持chrome.desktopCapture.chooseDesktopMedia返回undefined。

1 个答案:

答案 0 :(得分:0)

您需要从扩展程序上下文中运行的后台脚本调用chrome.desktopCapture.chooseDesktopMediaThis Sample显示了使用扩展程序获取屏幕媒体的简单方法。

请记住,这是基于回调的,因此您可以从回调中访问流ID。

这在您的网页上下文中运行(请参阅完整示例here):

    // check that the extension is installed
    if (sessionStorage.getScreenMediaJSExtensionId) {
        // send a message to your extension requesting media
        chrome.runtime.sendMessage(sessionStorage.getScreenMediaJSExtensionId,
            {type:'getScreen', id: 1}, null,
            function (data) {
                if (data.sourceId === '') { // user canceled
                    // handle error
                } else {
                    constraints.video.mandatory.chromeMediaSourceId = data.sourceId;
                    getUserMedia(constraints, callback);
                }
            }
        );
    }

这会在您的扩展程序中运行(请参阅完整示例here):

chrome.runtime.onMessageExternal.addListener(function (message, sender, callback) {
    switch(message.type) {
        case 'getScreen':
            var pending = chrome.desktopCapture.chooseDesktopMedia(message.options || ['screen', 'window'],
                                                               sender.tab, function (streamid) {
                // communicate this string to the app so it can call getUserMedia with it
                message.type = 'gotScreen';
                message.sourceId = streamid;
                callback(message);
                return false;
            });
            return true; // retain callback for chooseDesktopMedia result
    }
});