Chrome 70 中的音频/视频更新

弗朗索瓦·博福
François Beaufort

使用“画中画”功能观看视频

借助画中画 (PiP) 功能,用户可以在浮动窗口(始终位于其他窗口之上)中观看视频,以便在与其他网站或应用互动时留意自己正在观看的内容。借助新的 Picture-in-Picture Web API,您可以为网站上的视频启动和控制画中画。

如需了解详情,请参阅我们的文章

AV1 解码器

AV1 是 Alliance for Open Media 开发的新一代编解码器。与领先的视频编解码器 VP9 相比,AV1 将压缩效率提高了 30%以上。Chrome 70 根据官方比特流规范向 Chrome 桌面版 x86-64 添加了 AV1 解码器。目前,仅支持“Main”profile 0,并且不包括编码功能。支持的容器为 MP4 (ISO-BMFF)(有关容器的简要说明,请参阅从原始视频到 Web 就绪)。

如需试用 AV1,请按以下步骤操作:

  • 前往 YouTube TestTube 页面
  • 选择“Prefer AV1 for SD”(首选 AV1 标清)或“Always Prefer AV1”(始终首选 AV1)可获取所需的 AV1 分辨率。请注意,在更高的分辨率下,AV1 在某些设备上更有可能遇到播放性能问题。
  • 尝试播放 AV1 Beta 版启动播放列表中的 YouTube 片段。
  • 确认“详细统计信息”中的编解码器 av01。
YouTube 上有关 AV1 的详细统计信息。
图 1. YouTube 上有关 AV1 的详细统计信息。

支持在 MSE 中切换编解码器和容器

Chrome 支持SourceBuffer 上使用新的 changeType() 方法,以改进媒体来源扩展播放过程中的跨编解码器或跨字节流过渡。它允许之后更改附加到 SourceBuffer 的媒体字节类型。

当前版本的 MSE 支持媒体的自适应播放;但是,自适应要求附加到 SourceBuffer 的任何媒体都必须符合最初通过 MediaSource.addSourceBuffer(type) 创建 SourceBuffer 时提供的 MIME 类型。该类型的编解码器和之前解析的任何初始化段必须在整个过程中保持不变。这意味着网站必须采取明确措施来实现编解码器或字节流切换(通过使用多个媒体元素或 SourceBuffer 轨道并在这些元素之间进行切换),增加了应用复杂性和用户可见的延迟时间。(此类转换要求 Web 应用在渲染程序主线程上执行同步操作)。这种过渡延迟会影响媒体在不同过渡期间的流畅性。

借助其新的 changeType() 方法,SourceBuffer 可以缓冲不同的字节流格式和编解码器,并支持播放。这种新方法保留了之前缓冲的媒体、对未来 MSE 编码帧逐出取模,并利用了现有 MSE 编码帧处理算法中的接合和缓冲逻辑。

changeType() 方法的使用方法如下:

    const sourceBuffer = myMediaSource.addSourceBuffer('video/webm; codecs="opus, vp09.00.10.08"');
    sourceBuffer.appendBuffer(someWebmOpusVP9Data);

    // Later on...
    if ('changeType' in sourceBuffer) {
      // Change source buffer type and append new data.
      sourceBuffer.changeType('video/mp4; codecs="mp4a.40.5, avc1.4d001e"');
      sourceBuffer.appendBuffer(someMp4AacAvcData);
    }

与预期一样,如果浏览器不支持传递的类型,此方法会抛出 NotSupportedError 异常。

查看示例,了解如何使用跨编解码器和跨字节流缓冲以及播放音频元素。

有发货意向 | Chromestatus Tracker | Chromium 错误

用于 MSE 的 MP4 Opus

从 Chrome 33 开始,<audio><video> 元素中就支持开放且用途非常广的音频编解码器 Opus。之后添加了ISO-BMFF 中的 Opus 支持(MP4 中的 Opus)。现在,MP4 中的 Opus 可在 Chrome 70 中用于媒体来源扩展

您可以通过以下方式检测 MSE 是否支持 MP4 中的 Opus:

if (MediaSource.isTypeSupported('audio/mp4; codecs="opus"')) {
  // TODO: Fetch data and feed it to a media source.
}

如需查看完整示例,请参阅我们的官方示例

由于缺少能以正确的结束剪辑和预跳过值对 MP4 中的 Opus 进行多路复用的工具,如果此类精确度对您很重要,您将需要在 Chrome 中使用 SourceBuffer.appendWindow{Start,End}SourceBuffer.timestampOffset 才能获得精确的采样播放效果。

有发货意向 | Chromestatus Tracker | Chromium 错误

默认允许在 Android 设备上播放受保护的内容

在 Android 版 Chrome 70 中,“受保护的内容”网站设置的默认值会从“先询问”更改为“允许”,从而减少与播放此类媒体相关的阻力。这项变更之所以能够实现,在一定程度上,是因为我们采取了额外的步骤来清除 Cookie 和网站数据,同时清除媒体许可,从而确保网站不会使用媒体许可来跟踪已清除浏览数据的用户。

Android 中的“受保护内容”设置。
图 2. Android 中的“受保护的内容”设置。