WebRTC屏幕共享

6

是否可以通过WebRTC捕获桌面屏幕共享?正如我们所知道的那样,它只能捕获浏览器选项卡上的屏幕,但是否可能捕获整个桌面屏幕,例如在计算机上导航文件或打开和查看文件,如PDF等。

3个回答

7

目前,在RTCWeb实现(包括chrome和firefox)中只提供了“无状态”屏幕捕获功能。例如:

上面的演示将简单地捕获“任何”打开应用程序的屏幕。但是,这种屏幕捕获API 无法捕获全屏游戏应用程序的屏幕。

更多信息请参考:

关于从Web浏览器进行远程桌面共享,与屏幕共享相比,它有更多的安全风险。 UI / 安全方面会很难处理,并且该功能非常容易受到社交工程攻击——电话: “这是Google/Dell/Computer-Management;我们检测到您的计算机有病毒,请访问https://example.com,我们将协助您删除它”——等等。参考


有没有任何方法/ API 可以在 IE/Safari/Opera 上捕获本地窗口屏幕?谢谢。 - cosmoloc
1
基于Safari/IE的WebRTC本地插件不支持屏幕捕获。Mac/iOS本身可能有与Andriod相同的本地屏幕捕获API。顺便说一下,关于Opera,它将不支持屏幕捕获API,直到屏幕捕获被视为Chromium项目中的“稳定功能”(因为你知道Opera是基于Chromium的)。但是,您可以尝试基于HTML2Canvas.js的解决方案:https://github.com/muaz-khan/WebRTC-Experiment/tree/master/part-of-screen-sharing - Muaz Khan
我尝试了您提供的屏幕共享链接,但它仅支持网页div共享,而不支持本地应用程序屏幕共享。我将进一步探索提供的链接,看看是否可以让Opera共享桌面应用程序屏幕。非常感谢。 - cosmoloc
1
不行。你不能使用Html2Canvas.js共享应用程序的屏幕——它只是一个基于浏览器的JavaScript库,适用于所有Canvas2D兼容的浏览器。你可以共享<BODY>或<BODY>内的任何元素,除了<Object>或跨域<iframe>等。该库只是在Canvas2D上呈现<BODY>并返回<Canvas>对象作为屏幕截图。你可以调用Canvas.toDataURL('image/type')来获取特定的图像格式。 - Muaz Khan
感谢@Muaz。确实需要用户执行屏幕截图/打印屏幕命令才能完成。 - cosmoloc

4
是的,可以做到。至少使用 Chrome 可以。有几种方法可以实现,但最简单的方法是:
  1. 在调用 getUserMedia 时添加此约束:

    constraints.video.mandatory.chromeMediaSource = 'screen'

  2. 启动 Chrome 时,使用以下参数(Chrome 版本 >35):

    --enable-usermedia-screen-capturing

您可以在此处的远程服务器存储库中找到共享屏幕和记录共享屏幕示例: https://github.com/Kurento/kurento-tutorial-js/blob/develop/kurento-recorder-screen/static/index.js 如果您尝试执行该示例,请注意安全限制。所有信令都需要使用 TLS 进行传输。使用原始 HTTP 将导致 Chrome 拒绝共享屏幕。

2

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接