【发布时间】:2015-07-09 08:37:44
【问题描述】:
我正在制作一个 chrome 扩展,通过它我可以获取用户桌面的屏幕截图。我正在使用chrome.desktopCapture API 来获取选定窗口的流。
我正在动态创建视频元素。一旦它设置了它的源,我就调用了play() 方法。然后我创建了一个画布元素并用它来绘制视频图像。我也可以使用canvas.toDataURL() 获取 dataURL,但是当我打开这个 url 时,我看不到任何图像。即使在新捕获期间,此 URL 值也保持不变。
Manifest.json -
{
"name": "Desktop Capture Example",
"description": "Show desktop media picker UI",
"version": "1",
"manifest_version": 2,
"background": {
"persistent": false,
"scripts": ["background.js"]
},
"browser_action": {
"default_title": "Take a screen shot of Desktop!"
},
"permissions": [
"desktopCapture"
]
}
Background.js -
var pending_request_id = null;
chrome.browserAction.onClicked.addListener(function() {
pending_request_id = chrome.desktopCapture.chooseDesktopMedia(["screen", "window"],onAccessApproved);
});
function gotStream(stream) {
console.log("Received local stream");
var video = document.createElement('video');
video.src = URL.createObjectURL(stream);
video.play();
var canvas = document.createElement('canvas');
var ctx = canvas.getContext("2d");
ctx.drawImage(video, 0, 0, 640, 480);
var url = canvas.toDataURL();
console.log(url);
//localstream = stream;
//stream.onended = function() { console.log("Ended"); };
}
function getUserMediaError() {
console.log("getUserMedia() failed.");
}
function onAccessApproved(id) {
if (!id) {
console.log("Access rejected.");
return;
}
navigator.webkitGetUserMedia({
audio:false,
video: { mandatory: { chromeMediaSource: "desktop",
chromeMediaSourceId: id } }
}, gotStream, getUserMediaError);
}
【问题讨论】:
-
你能显示 toDataURL() 的值吗?您的 gotStream 函数也应该只触发一次,您可能希望将视频元素转换为全局变量,然后调用快照函数,该函数将在获取 dataURL 之前将其绘制到画布上
-
toDataURL()的值:数据:图像/ PNG; BASE64,iVBORw0KGgoAAAANSUhEUgAAASwAAACWCAYAAABkW7XSAAAEYklEQVR4Xu3UAQkAAAwCwdm / 9HI83BLIOdw5AgQIRAQWySkmAQIEzmB5AgIEMgIGK1OVoAQIGCw / QIBARsBgZaoSlAABg + UHCBDICBisTFWCEiBgsPwAAQIZAYOVqUpQAgQMlh8gQCAjYLAyVQlKgIDB8gMECGQEDFamKkEJEDBYfoAAgYyAwcpUJSgBAgbLDxAgkBEwWJmqBCVAwGD5AQIEMgIGK1OVoAQIGCw / QIBARs ...此字符串重复9次由多个分隔 “/”跨度>
-
@Kaiido gotStream 函数只触发一次。让视频元素全球化也无济于事。
-
在拍摄快照之前添加一个 setTimeout,你会明白我的意思。实际上,您甚至在将其绘制到视频上之前就已将其拍摄
标签: javascript html canvas google-chrome-extension google-chrome-app