Chrome 90测试版——AV1 WebRTC编码器、新origin trials及更多更新

若无特别说明,本文所介绍的更新功能均适用于 Android、Chrome OS、Linux、macOS 和 Windows 的最新 Chrome 测试版频道。点击文中各链接或ChromeStatus.com,了解更多更新信息。Chrome 90是指2021年3月11日发布的测试版。

AV1 编码器

Chrome桌面推出了一款AV1编码器。该编码器专门针对WebRTC集成的视频会议进行了优化。AV1的优点包括:

  • 压缩效率比其他类型的视频编码更好,减少带宽消耗,提升视觉效果。
  • 可在极低带宽网络上为用户提供视频(30kbps及以下的视频)。
  • 与VP9和其他编解码器相比,显著提高了屏幕共享效率。

最后一点对刚成为W3C和IETF的官方标准的WebRTC来说是一条重要补充。

Origin Trials

该版本的 Chrome 浏览器引入了接下来会讲到的Origin Trials。Origin Trials允许用户尝试新功能,并向网络标准社区提供关于可用性、实用性和有效性的反馈。如果想注册参加当前 Chrome 浏览器中支持的任何Origin Trials,包括下面会讲到的,请访问 Chrome Origin Trials dashboard。了解更多有关 Chrome 浏览器中Origin Trials的信息,请访问 Web 开发者Origin Trials指南。Microsoft Edge 有自己的Origin Trials,没有与Chrome 浏览器合作。要了解其更多信息,请访问 Microsoft Edge Origin Trials 开发者控制台

新Origin Trials

getCurrentBrowsingContextMedia()

类似于getDisplayMedia(),mediaDevices.getCurrentBrowsingContextMedia()方法允许捕获带有当前标签页的视频(可能还带音频)的MediaStream。但与getDisplayMedia()不同的是,调用这个新方法最终呈现给用户的是一个简单的接受/拒绝对话框。如果用户接受,就捕获当前的标签页。然而,该操作需要一些额外的安全措施,目前仍在商榷。在这之前,或者调用时没有这些措施,用户会收到一个对话框,可以选择任何源,但会突出显示当前标签页的选项(getDisplayMedia通常会突出显示全屏选项)。

MediaStreamTrack Insertable Streams(即 Breakout box

用于操作MediaStreamTracks所携带原始媒体的API,如摄像机、麦克风、屏幕捕捉的输出,或编解码器的解码部分和输入部分。它使用WebCodecs接口来代表原始媒体帧,并使用流来公开它们。该方法类似于WebRTCInsertable Streams API公开RTCPeerConnections编码数据的方式。这样做的是为了支持以下用例:

  • Funny Hats:指在编码前和解码后操作媒体以提供诸如背景移除、funny habts、音效等功能。
  • 机器学习:指实时对象识别/注释等应用。

该Origin Trials预计运行到Chrome 92版本。

使用 Web Bundles 加载子资源

使用Web Bundles加载子资源提供了一种有效地加载大量资源的新方法,即使用允许捆绑多个资源的格式,例如Web Bundles。

JavaScript捆绑程序(如webpack)的输出与浏览器交互较差。两样都是好工具,但:

  • 两者的输出不能如bundle一样,与HTTP缓存进行更细微的交互(Origin Trials没有解决这个问题)。可能导致它们与新的要求,比如动态捆绑不兼容(例如,一个tree shaking的编辑可能使一切无效)。
  • 两者迫使编译和执行等到所有字节都到达才能运行。理想情况下,加载多个子资源应该能够利用全流和并行化,但如果所有资源都被捆绑为一个javascript,就不能做到上述操作了。(该Origin Trial允许编译并行进行。基于目前的确定性执行模型,JavaScript模块执行仍然需要等待整个tree。)
  • 两者可以要求非JS资源(如样式表和图片)编码为JS字符串,这使它们会被解析两次,且会增加它们的大小。该Origin Trial允许这些资源以其原始形式加载。

该Origin Trial还允许一个捆绑包将一个不透明原点iframe的源码包含为urn:uuid:资源。上述资源的方案在 Chrome 91 中会有所改变。

该Origin Trial预计在 Chrome 92 中运行。

WebAssembly异常处理

如今,WebAssembly支持异常处理。异常处理允许代码在抛出异常时中断控制流。异常可以是任何已知的WebAssembly模块异常,也可以是由调用的导入函数抛出的未知异常。该Origin Trial预计在Chrome 94中运行。

已完成的Origin Trials

以下为之前用于Chrome Origin Trial的功能,现在已默认启用:

WebXR AR光照估算

光照估算允许网站查询WebXR会话中的环境光照条件。这既显示代表环境光照的球谐函数,也显示代表“反射”的立方图纹理。添加照明估算可以使用户的模型看起来更自然,与用户的使用环境更契合。

此版本中的其他功能

CSS

宽高比插值

宽高比属性允许在任何元素上只指定宽度或高度中的一个来自动计算另一个维度。这个属性最初推出时设定为animate不可插值(也就是说它会捕捉到目标值),提供了从一个长宽比到另一个长宽比的平滑插值。

自定义状态伪类

自定义元素现在通过状态CSS伪类显示元素状态。内建元素的状态可以根据用户交互和其他因素随时间而改变,这些状态通过伪类显示给web开发者。例如,一些表单控件有“无效”状态,会通过:invalid伪类显示出来。既然自定义元素也有状态,那么以类似于内置元素的方式显示它们的状态就是可行的。

对appearance和-webkit-appearance实现’auto’

以下表单控件的CSS属性appearance和-webkit-appearance 被改为了“auto”。

<input type=color> and <select>
Android only: <input type=date>, <input type=datetime-local>, <input type=month>, <input type=time>, and <input type=week>

注意:这些控件的默认渲染方式不会改变。

overflow: clip属性

overflow的clip值会导致盒子里的内容被剪切到盒子overflow clip处。此外,因为没有提供滚动界面,用户或程序也不能自行滚动内容。而且盒子不被视为是一个滚动容器,也不会启动一个新的格式化上下文。因此,该值比overflow: hidden性能更好。

overflow-clip-margin 属性

overflow-clip-margin 属性可以指定元素在剪切之前在边界外画的距离。它还允许开发者扩展clip边界,这对缓解有油墨溢出,影响可视性的情况非常有用。

权限-Policy报头

Permissions-Policy HTTP头取代了现有的Feature-Policy头,用于控制权限和强大功能的授权。该头允许网站更严格地限制哪些来源可以被授予访问功能。

最近,Chrome 74中引入的Feature Policy API更名为“Permissions Policy”,HTTP头也随之更名。同时,社区已经确定了一种基于HTTP的结构化字段值的新句法。

通过Cross-Origin-Read-Blocking来保护应用程序/x-protobuffer。

保护application/x-protobuffer免受投机性执行攻击,将其添加到Cross-Origin-Read-Blocking. application/x-protobuf所使用的永不嗅探的MIME类型列表中。application/x-protobuuf已经作为永不嗅探的MIME类型受到保护,它是另一种常用的MIME类型,被protobuf库定义为 “ALT_CONTENT_TYPE”。

在the File System Access API中查找传递文件末尾的方法

在数据传递给FileSystemWritableFileStream.write()后,会同时传递文件末尾,文件就可以通过写入0x00(NUL)来延伸。这有助于创建稀疏文件,并极大地简化了在没有按顺序接受要写入数据时,保存内容到文件的过程。

如果没有这个功能,那些不按顺序接收文件内容的应用程序(比如BiTtorrent downloads)就不得不提前,或在写入过程中有需要时,手动调整文件大小。

StaticRange构造函数

目前,Range是web开发者唯一可用的构建范围类型。然而,Range对象是 “实时的”,维护它们的成本很高。每一次树有变化,所有受影响的Range对象都需要更新。而新的StaticRange对象不是实时的,它代表了一种轻量级的范围类型,不需要像Range那样的高维护成本。可构造的StaticRange使web开发者能将其用在不需要每次DOM树变化时都更新的范围。

支持在<source>元素上为<picture>指定宽度和高度

如今,在<picture>元素中使用<source>元素时,<source>支持其宽度和高度属性。这使得 Chrome 能够计算 <picture> 元素的长宽比。与<img>、<canvas>和<video>元素的类似行为相匹配。

WebAudio——OscillatorOptions. periodicalWave不可为 Null

如今,在创建新的 OscillatorNode 对象时,不能再把 periodicWave 设置为 null了。因为这个值是在传递给OscillatorNode()构造函数的选项对象上设置的。WebAudio 规范不允许将此值设置为null。现在,Chrome浏览器和Firefox浏览器都符合该规范。

JavaScript

这个版本的 Chrome 浏览器采用了 9.0 版本的 V8 JavaScript 引擎。包含了以下列出的最新更新。你可以在 V8 发行说明中找到完整的最新功能列表

数组、字符串和TypedArrays的相对索引方法

Array、String和TypedArray现在支持at()方法,既支持用负数进行相对索引。比如以下的代码返回给定数组中的最后一项。

let arr = [1,2,3,4];
arr.at(-1);

弃用和删除

这个版本的 Chrome 浏览器引入了以下列出的弃用和删除的相关内容。详细信息请访问 ChromeStatus.com,查看最新的弃用列表以及之前的删除列表

删除内容安全政策指令“plugin-types”

“plugin-types”指令帮助开发人员进行选择,哪些类型的插件可以通过<embed>或<object>html元素加载。通过该操作,开发者可以在他们的页面中屏蔽Flash。由于Flash支持已经停止,他们就不再需要这个策略指令了。

删除WebRTC RTP数据通道

Chrome浏览器已经取消了对WebRTC中非标准RTP数据通道的支持。用户需要使用基于SCTP的标准数据通道。

返回navigator.plugins和navigator.mimeTypes的空值

如今Chrome给navigator.plugins和navigator.mimeTypes返回空值。但因为Flash被移除,以后不再需要给这些属性返回任何内容了。

文章地址:https://blog.chromium.org/2021/03/chrome-90-beta-av1-encoder-for-webrtc.html


填写常用邮箱,接收社区更新

WebRTC 中文社区由

运营