使用Javascript捕获屏幕

时间:2015-10-26 10:19:00

标签: javascript firefox webrtc

我发现http://www.rtcmulticonnection.org/docs/ - 显然,可以通过WebRTC与另一个用户共享一个屏幕。现在,WebRTC对于实时共享肯定很好,但我想知道,纯JavaScript是否有可能(在用户的许可下)获取截图并直接处理它们(例如通过常规HTTP发送它们)?这将是一个很好的功能,可以远程帮助人们,而无需安装VNC / RDP / NX服务器(但是,如果实时连接不是那么重要,而是有可靠的传输)。 正如我所说,我的意思是截图,而不只是记录活动标签。

好的,更清楚的是,问题是显然可以告诉浏览器通过WebRTC进行屏幕共享(或询问用户是否这样做)。但是,一旦获得许可,就不能(直接)以编程方式访问屏幕,至少到目前为止还没有这么做。

记录:https://github.com/streamproc/MediaStreamRecorder做我想做的事。

1 个答案:

答案 0 :(得分:0)

有很多解决方案:

1)您可以使用 RecordRTC 或类似解决方案(例如 MediaStreamRecorder 等)来记录屏幕间隔并上传&# 34;记录屏幕"到服务器

2)您可以使用<canvas>(2D)拍摄屏幕快照并使用实时协议上传到服务器,例如websockets或XHR-long-polling或简单的XMLHttpRequest

3)要支持非WebRTC浏览器,您可以使用类似于html2canvas的解决方案,通过Canvas2D API支持网页的快照捕获

4)如果您计划编写chrome扩展程序,那么您可能想要使用&#34; captureVisibleTab&#34; API。

PS。您可以使用以下方法拍摄屏幕快照:

function takeSnapshot(video) {
    var canvas = document.createElement('canvas');
    canvas.width = video.videoWidth || video.clientWidth;
    canvas.height = video.videoHeight || video.clientHeight;

    var context = canvas.getContext('2d');
    context.drawImage(video, 0, 0, canvas.width, canvas.height);

    return canvas.toDataURL('image/png');
}

以下是如何使用它:

var screenVideo = document.querySelector('video');
var screenShot = takeSnapshot(screenVideo);
socketio.emit('screenshot', screenShot); // POST to server