chrome.tabCapture.capture返回的流是未定义的

时间:2013-08-22 02:20:33

标签: google-chrome google-chrome-extension

我在以下的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。

谢谢, 麦克

2 个答案:

答案 0 :(得分: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);

答案 1 :(得分: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);
    });
});

这对我有用。