- Android 现在支持使用永久许可的离线播放和 Widevine L1。
- Chrome 现在会在后台播放 MSE 视频时停用视频轨道,以优化性能。
- Web 开发者可以在实时 MSE 串流中自定义可跳转范围。
- Chrome 现在支持使用 MSE 的 MP4 中的 FLAC。
- 在设备旋转时,视频会进入全屏模式。
Android 的永久性许可
Encrypted Media Extensions (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.
});
您可以自行试用永久性许可,只需查看 Media PWA 示例并按照以下步骤操作即可:
- 前往 https://biograf-155113.appspot.com/ttt/episode-2/
- 点击“设为可离线使用”,然后等待视频下载。
- 开启飞行模式。
- 点击“播放”按钮,畅享视频!
Android 版 Widevine L1
您可能已经知道,所有 Android 设备都必须支持 Widevine 安全级别 3 (Widevine L3)。不过,市场上也有很多设备支持最高安全级别:Widevine 安全级别 1,其中所有内容处理、加密和控制操作均在可信执行环境 (TEE) 中执行。
好消息!Android 版 Chrome 现在支持 Widevine L1,以便以最安全的方式播放媒体。请注意,ChromeOS 已支持此功能。
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:
- 前往 https://shaka-player-demo.appspot.com/demo/,然后在系统提示时点击“允许”。
- 选择“Angel One(多编解码、多语言、Widevine)”。
- 在“配置”部分的“视频稳健性”字段中输入
HW_SECURE_ALL
。 - 点击“加载”按钮,然后观看视频吧!
后台视频轨道优化(仅限 MSE)
Chrome 团队一直在努力寻找新方法来延长电池续航时间,Chrome 62 也不例外。
现在,如果视频使用 Media Source Extensions (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 跟踪器 | Chromium bug
适用于 MSE 的 MP4 中的 FLAC
从 Chrome 56 开始,常规媒体播放支持无损音频编码格式 FLAC。不久之后,我们又添加了对 ISO-BMFF 中的 FLAC 的支持(也称为 MP4 中的 FLAC)。现在,Chrome 62 中推出了适用于 Media Source Extensions (MSE) 的 MP4 格式 FLAC。
请注意,Firefox 团队开发并实现了对 MP4 封装规范中的 FLAC 的支持,BBC 一直在尝试将其与 MSE 搭配使用。您可以阅读 BBC 的“Delivering Radio 3 Concert Sound”(呈现 Radio 3 音乐会音效)一文,了解详情。
您可以通过以下方式检测 MSE 是否支持 MP4 中的 FLAC:
if (MediaSource.isTypeSupported('audio/mp4; codecs="flac"')) {
// TODO: Fetch data and feed it to a media source.
}
如需查看完整示例,请参阅我们的官方示例。
发货意向 | Chromestatus 跟踪器 | Chromium bug
在设备旋转时自动将视频切换到全屏模式
如果您在视频在视口中播放时将设备旋转为横屏模式,播放将自动切换到全屏模式。将设备旋转为纵向模式后,视频会恢复为窗口模式。如需了解详情,请参阅我们的过往文章。