4

我在以下的 chrome 背景扩展中有一些 js 代码:

function handleCapture(stream) {
    console.log('content captured');
    console.log("backround.js stream: ", stream);
    alert(stream);
    // localStream = stream; // used by RTCPeerConnection addStream();
    // initialize(); // start signalling and peer connection process
}

function captureCurrentTab() {
    console.log('reqeusted current tab');
    chrome.tabs.getSelected(null, function(tab) {
        console.log('got current tab');
        var selectedTabId = tab.id;
        chrome.tabCapture.capture({
            audio : false,
            video : true
        }, handleCapture);
    });
}

但是,运行时,传入的“handleCapture”变量“stream”总是未定义?这是可以预料的还是我在这里遗漏了什么?

另外,我已经确认我的 manifest.json 包含捕获权限,并且我使用的是 chrome canary 版本 31.0.1607.1 canary Aura。

谢谢,迈克

4

2 回答 2

1

您可能应该提供一些约束以使其正常工作。请参阅:http: //developer.chrome.com/extensions/tabCapture.html#type-MediaStreamConstraint

您提供的捕获参数是 MediaTrackConstraint,请参阅: http ://dev.w3.org/2011/webrtc/editor/getusermedia.html#mediastreamconstraints

这也是一个简单的 JS 对象,您应该在其中设置一些强制选项,请参阅: http ://dev.w3.org/2011/webrtc/editor/getusermedia.html#idl-def-MediaTrackConstraints

因此,如果您在强制对象中设置了所有需要的设置,以下内容应该会有所帮助:

chrome.tabCapture.capture({
    audio : false,
    video : true,
    videoConstraints: {
        mandatory: {
            width: { min: 640 },
            height: { min: 480 }
        }
    }
}, handleCapture);
于 2013-08-29T17:59:21.063 回答
1

当我尝试完全从后台脚本驱动 tabCapture 时,我遇到了同样的问题,我在tabCapture参考页面上找到了这个:

捕获当前活动选项卡的可见区域。此方法只能在调用扩展后在当前活动页面上使用,类似于 activeTab 的工作方式。请注意,无法捕获 Chrome 内部页面。

我的理解是,这意味着您需要从 browserAction 为您的扩展程序驱动它,如下所示:

chrome.browserAction.onClicked.addListener(function(request) {
    chrome.tabs.getSelected(null, function(tab) {
        chrome.tabCapture.capture({audio: true, video: true}, callback);
    });
});

这对我有用。

于 2013-08-30T18:34:09.880 回答