我在以下的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。
谢谢, 麦克
答案 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);
});
});
这对我有用。