Chrome中的屏幕截图-准备好使用getDisplayMedia


Chrome网上应用店已决定禁止内嵌安装Chrome扩展程序。 这与WebRTC应用程序直接相关,因为现在您需要扩展Chrome浏览器中的屏幕截图。 getDisplayMedia API会抢救吗?

Chrome中的屏幕截图


当此功能出现在Chrome 33中时 ,它需要扩展才能工作-解决安全问题。 这种方法比以前的方法要好,后者是将屏幕快照隐藏在一个标志下,因为哪个站点要求用户激活此标志...这导致了公共安全消息

自2013年以来,Chrome的变化并不大。 扩展要求增加了共享过程的难度,但是由于采用了嵌入式安装 ,从而简化了使用寿命:

  • 用户单击一个按钮以开始截图;
  • 该网络应用程序确定正在使用Chrome,并且未安装所需的扩展程序;
  • Web应用程序开始内联安装,成功解决了回调;
  • 在Chrome浏览器中,选择的窗口会完全弹出用户想要共享的内容。

可以在此处找到实现的详细信息。

选择框是此处的关键元素。 在没有Web Store网络的情况下使用它是否安全?


在这种情况下,共享选项卡特别令人困惑,因为它违反了“跨域”脚本的沙盒原则。

Firefox屏幕截图


Firefox使用另一种方法-允许使用该API的网站白名单。 要进入此列表,该站点必须向Mozilla提出请求,并表明它具有服务条款和隐私政策。 您可以使用扩展名修改白名单。 当允许任何已确认来源使用屏幕截图时,随着Firefox 52的发布,对此类列表的需求就消失了。 此处仍未使用新的getDisplayMedia API ,我们将稍后讨论,但实现几乎相同:

navigator.mediaDevices.getUserMedia({video: {mediaSource: 'screen'}})
.then(stream => {
// ,
videoElement.srcObject = stream;
}, error => {
console.log(" ", error);
});

结果,将更改实现以符合规范

getDisplayMedia API


W3C联盟正在努力标准化屏幕捕获 API。 它相对简单,并且基于诸如getUserMedia之类的承诺:

// 1 Screen Capture API
navigator.getDisplayMedia({ video: true })
.then(stream => {
// ,
videoElement.srcObject = stream;
}, error => {
console.log(" ", error);
});
view raw example1-spec.js hosted with ❤ by GitHub

Microsoft EDGE今年已经推出了屏幕截图。 很好地考虑了使用场景,在用户共享区域周围添加了一个黄色框:


Edge中的窗口截图。 请注意黄色框,该框突出显示确切共享的内容。

时间在变,Chrome扩展也随之而来


说到用户体验,appear.in扩展程序如上所述那样工作,并且安装了超过一百万。 绝大多数用户是通过嵌入式安装进行的,其中有太多用户以至于Chrome网上应用店中的扩展程序的屏幕截图自2014年以来就没有更新过。

正如Chrome Web Store博客所说 ,他们现在正在削减嵌入式安装。 这是一个很大的惊喜,由于旧的Chrome问题,我首先了解到了这一点-使屏幕截图更易于访问(感谢Wilhelm Wanecek提供了提示)。

如果我理解正确,则会导致在单独的标签页中打开Chrome网上应用店。 在Web应用程序方面,确定用户何时安装扩展程序将变得更加困难,将需要使用轮询或超时。 帖子中指出了以下术语:

  • 从6月12日开始,嵌入式安装将不适用于新扩展。 恕不另行通知;
  • 对于已经发布的扩展,内联安装将在9月12日之前可用。 提前通知-提前三个月。

索偿


这里肯定有问题。 而且我什至没有在谈论Google Hangouts / Meet,它完全避免了其他人必须使用内置扩展程序处理的UX困难。 Chrome的家伙已经在纠缠他们

我想提前收到Chrome网上应用店小组的一些消息(这封信在博客发布后约24小时到达)。 appear.in扩展名拥有超过一百万的用户,这使该扩展名成为最受欢迎的屏幕截图之一。 我们的用户信任我们的网站,即他们使我们可以使用他们的麦克风和摄像头。 使用基于这种信任的嵌入式安装可能比从Chrome Web Store安装更为安全。 我们还寻求网络商店的支持,以删除该扩展程序的非法副本,成百上千的用户反复设置了自己的扩展名。

如果Google的人员警告我们,那将是很棒的。


@webrtc帐户提到打算对内联安装策略进行更改以推出getDisplayMedia

Chrome的路径是getDisplayMedia的发布。 重大新闻发布后不久,便发布了“推广意向”。 但是,鉴于Chrome的发布周期,将需要数周的时间。 这是安全条款和用户方案中的一项重要变更,因此,它是否会在9月12日截止日期之前发生是令人怀疑的。 Chrome 69的分支点将于一个月内发布,该分支点将于9月12日发布。

Chrome的情况由于现在允许共享选项卡而变得复杂,但限制了用户的显示选择。 Chrome支持音频输出共享,但getDisplayMedia规范甚至不支持。

如何为Chrome中的更改做好准备


getDisplayMedia支持相关的代码相对简单。 通常,对此API的调用与使用mediaSource参数的getUserMedia相同,在Firefox中被调用。 确定此功能是否可用很容易,您需要检查getDisplayMedia是否存在,并在可用时优先使用它:

if ('getDisplayMedia' in window.navigator) {
// getDisplayMedia
} else {
//
}

尚不清楚如何指示帧频。 在返回的MediaStreamTrack中使用applyConstraints适用于getUserMedia,并且可能适用于getDisplayMedia

navigator.getDisplayMedia({video: true})
.then(stream => {
stream.getTracks()[0].applyConstraints({frameRate: 5});
return stream;
})
view raw frame-rate.js hosted with ❤ by GitHub

详细信息在规范bugtracker中

遗憾的是adapter.js无法插入getDisplayMedia ,因为与每个扩展的交互实现都略有不同。

更高更高


我会仔细监控Google的WebRTC开发人员是否可以影响嵌入式安装的期限或按时推出getDisplayMedia 。 在网络下进行开发有时会很混乱,是的,但是最终,我们通常会看到一个很好的结果。 我们正在等待故事的结束,并很乐意与我们的扩展说再见。



Voximplant中的屏幕截图


我们还有一个截图,可以在Chrome中成功运行。 但是,尽管没有人对扩展说再见,但是您需要执行以下操作:

  1. 从我们的存储库下载扩展: github.com/voximplant/voximplant-chrome-extension
  2. 转到下载扩展程序的文件夹,打开manifest.json并将您网站的网址添加到“ 匹配项”部分。
  3. 在新的Chrome标签中,输入chrome://扩展程序 ,启用开发人员模式并从该文件夹加载扩展程序。

因此,您将安装扩展的开发版本。 如果您在Googe网上应用店中发布扩展程序,则对最终用户来说将更为方便。 关于此以及如何在我们的平台上使用屏幕截图,您可以阅读我们的“操作方法” 。 祝大家分享愉快!

Source: https://habr.com/ru/post/zh-CN415201/


All Articles