Chrome 62 中的媒体更新

弗朗索瓦·博福
François Beaufort

适用于 Android 的永久许可

加密媒体扩展 (EME) 中的永久许可表示该许可可以在设备上保留,这样一来,应用无需向服务器发送另一个许可请求,即可将许可加载到内存中。这就是 EME 支持离线播放的方式。

到目前为止,ChromeOS 是唯一支持永久许可的平台。实则不再是这样。现在,您也可以在 Android 上通过 EME 播放设备离线时保护的内容。

const config = [{
  sessionTypes: ['persistent-license'],
  videoCapabilities: [{
    contentType: 'video/webm; codecs="vp09.00.10.08"',
    robustness: 'SW_SECURE_DECODE' // Widevine L3
  }]
}];

// Chrome will prompt user if website is allowed to uniquely identify
// user's device to play protected content.
navigator.requestMediaKeySystemAccess('com.widevine.alpha', config)
.then(access => {
  // User will be able to watch encrypted content while being offline when
  // license is stored locally on device and loaded later.
})
.catch(error => {
  // Persistent licenses are not supported on this platform yet.
});

您可以自行试用永久性许可,具体方法是查看示例媒体 PWA,然后按照以下步骤操作:

  1. 转到 https://biograf-155113.appspot.com/ttt/episode-2/
  2. 点击“设为可离线播放”,等待视频下载完毕。
  3. 开启飞行模式。
  4. 点击“播放”按钮,尽情欣赏视频吧!

适用于 Android 的 Widevine L1

您可能已经知道,所有 Android 设备都必须支持 Widevine 安全等级 3 (Widevine L3)。不过,目前有许多设备也支持最高安全级别:Widevine 安全级别 1,所有内容处理、加密和控制都在可信执行环境 (TEE) 中执行。

好消息!Android 版 Chrome 现在支持 Widevine L1,因此能够以最安全的方式播放媒体。请注意,Chrome 操作系统已支持此功能。

const config = [{
  videoCapabilities: [{
    contentType: 'video/webm; codecs="vp09.00.10.08"',
    robustness: 'HW_SECURE_ALL' // Widevine L1
  }]
}];

// Chrome will prompt user if website is allowed to uniquely identify
// user's device to play protected content.
navigator.requestMediaKeySystemAccess('com.widevine.alpha', config)
.then(access => {
  // User will be able to watch encrypted content in the most secure way.
})
.catch(error => {
  // Widevine L1 is not supported on this platform yet.
});

Shaka Player 是适用于自适应媒体格式(例如 DASH 和 HLS)的 JavaScript 库,其中包含一个演示版,供您试用 Widevine L1:

  1. 前往 https://shaka-player-demo.appspot.com/demo/,然后在出现提示时点击“允许”。
  2. 选择“Angel One (multicodec, multilingual, Widevine)”。
  3. 在“配置”部分的“视频稳健性”字段中输入 HW_SECURE_ALL
  4. 点击“加载”按钮,尽情欣赏视频吧!

后台视频轨道优化(仅限 MSE)

Chrome 团队一直在尝试寻找延长电池续航时间的新方法,Chrome 62 也不例外。

现在,如果视频使用媒体来源扩展 (MSE),那么当视频在后台(例如,在不可见的标签页中)播放时,Chrome 会停用视频轨道。如需了解详情,请参阅上一篇文章

自定义直播 MSE 视频流的可搜索范围

您可能已经知道,seekable 属性包含浏览器可以跳转到的媒体资源的范围。通常,它包含一个时间范围,从 0 开始,到媒体资源时长结束。但如果无法获取时长(例如直播),时间范围可能会不断变化。

好消息是,您现在可以使用媒体来源扩展 (MSE) 提供或移除与当前缓冲范围合并的单个可查找范围,从而更有效地自定义 seekable 范围逻辑。当媒体来源时长为 +Infinity 时,它会生成一个同时适合这两个范围的可搜索范围。

在下面的代码中,媒体来源已附加到媒体元素,并且仅包含其 init 片段:

const mediaSource = new MediaSource();
...

mediaSource.duration = +Infinity;
// Seekable time ranges: { }
// Buffered time ranges: { }

mediaSource.setLiveSeekableRange(1 /* start */, 4 /* end */);
// Seekable time ranges: { [1.000, 4.000) }
// Buffered time ranges: { }

// Let's append a media segment that starts at 3 seconds and ends at 6.
mediaSource.sourceBuffers[0].appendBuffer(someData);
// Seekable time ranges: { [1.000, 6.000) }
// Buffered time ranges: { [3.000, 6.000) }

mediaSource.clearLiveSeekableRange();
// Seekable time ranges: { [0.000, 6.000) }
// Buffered time ranges: { [3.000, 6.000) }

上面没有涵盖许多情况,因此建议您尝试使用官方示例,了解缓冲和可查找的时间范围对不同 MSE 事件有何反应。

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

适用于 MSE 的 FLAC MP4

从 Chrome 56 开始,常规媒体播放就一直支持无损音频编码格式 FLAC。之后不久又添加了支持 ISO-BMFF 的 FLAC(在 MP4 中也称为 FLAC)。现在,您可以在 Chrome 62 中针对媒体来源扩展 (MSE) 使用 MP4 格式 FLAC。

相关信息由 Firefox 团队开发并实现对 MP4 封装 FLAC 规范的支持,而 BBC 一直在通过 MSE 进行实验。如需了解详情,您可以阅读 BBC 的《Delivering Radio 3 Concert Sound》帖子。

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

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

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

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

设备旋转时自动进入全屏模式

当视频在视口中播放时,如果您将设备旋转为横向,播放功能将自动切换到全屏模式。将设备旋转为纵向可使视频恢复到窗口模式。如需了解详情,请参阅我们的过往文章