- 网络开发者现在可以预测播放是否会流畅且能效高。
- Chrome 现在支持在 Windows 10 上播放 HDR 视频。
- Windows 和 Mac 现在支持使用永久许可进行离线播放。
<video>
和<audio>
元素的默认预加载值现在为"metadata"
。- 现在,如果媒体播放速率不受支持,系统会抛出错误。
- Chrome 现在会暂停所有后台纯视频媒体。
- 极端的 playbackRate 不再静音。
Media Capabilities - Decoding Info API
目前,Web 开发者依赖 isTypeSupported()
或 canPlayType()
来大致了解某些媒体是否可以解码。不过,真正的问题应该是:“它在这种设备上的表现如何?”
这正是我们提出的 Media Capabilities 想要解决的问题之一:提供一个 API,以便根据编解码器、配置文件、分辨率、比特率等信息向浏览器查询设备的解码能力。该 API 会根据浏览器记录的之前的播放统计信息,公开播放是否应流畅、节能等信息。
下面是 Decoding Info API 目前的工作原理。查看官方示例。
const mediaConfig = {
type: 'media-source', // or 'file'
audio: {
contentType: 'audio/webm; codecs=opus',
channels: '2', // audio channels used by the track
bitrate: 132266, // number of bits used to encode a second of audio
samplerate: 48000 // number of samples of audio carried per second
},
video: {
contentType: 'video/webm; codecs="vp09.00.10.08"',
width: 1920,
height: 1080,
bitrate: 2646242, // number of bits used to encode a second of video
framerate: '25' // number of frames used in one second
}
};
navigator.mediaCapabilities.decodingInfo(mediaConfig).then(result => {
console.log('This configuration is' +
(result.supported ? '' : ' NOT') + ' supported,' +
(result.smooth ? '' : ' NOT') + ' smooth and' +
(result.powerEfficient ? '' : ' NOT') + ' power efficient.');
});
您可以尝试不同的媒体配置,直到找到最佳配置(smooth
和 powerEfficient
),并使用该配置来播放适当的媒体流。顺便提一下,Chrome 的当前实现基于之前记录的播放信息。当丢帧百分比低于 10% 时,它将 smooth
定义为 true;当超过 50% 的帧由硬件解码时,powerEfficient
为 true。小帧始终被视为能效高。
建议您使用类似于以下代码段的内容来检测可用性,并针对不支持此 API 的浏览器回退到您当前的实现。
function isMediaConfigSupported(mediaConfig) {
const promise = new Promise((resolve, reject) => {
if (!('mediaCapabilities' in navigator)) {
return reject('MediaCapabilities API not available');
}
if (!('decodingInfo' in navigator.mediaCapabilities)) {
return reject('Decoding Info not available');
}
return resolve(navigator.mediaCapabilities.decodingInfo(mediaConfig));
});
return promise.catch(_ => {
let fallbackResult = {
supported: false,
smooth: false, // always false
powerEfficient: false // always false
};
if ('video' in mediaConfig) {
fallbackResult.supported = MediaSource.isTypeSupported(mediaConfig.video.contentType);
if (!fallbackResult.supported) {
return fallbackResult;
}
}
if ('audio' in mediaConfig) {
fallbackResult.supported = MediaSource.isTypeSupported(mediaConfig.audio.contentType);
}
return fallbackResult;
});
}
适用于起源试验
为了尽可能从使用 Decoding Info API(Media Capabilities 的一部分)的开发者那里获得反馈,我们之前在 Chrome 64 中以源试用形式添加了此功能。
试用已于 2018 年 4 月成功完成。
Intent to Experiment | Intent to Ship | Chromestatus Tracker | Chromium Bug
在 Windows 10 上播放 HDR 视频
高动态范围 (HDR) 视频的对比度更高,可呈现精确、细致的阴影和令人惊艳的高光,清晰度比以往更高。此外,支持广色域意味着颜色更鲜艳。
由于适用于 Windows 10 秋季创作者更新的 Chrome 现在支持 VP9 Profile 2 10 位播放,因此当 Windows 10 处于 HDR 模式时,Chrome 还支持 HDR 视频播放。从技术层面来讲,Chrome 64 现在支持 scRGB 颜色配置文件,从而允许媒体以 HDR 格式播放。
您可以尝试在 YouTube 上观看 The World in HDR in 4K (ULTRA HD),并通过查看 YouTube 播放器画质设置检查其能否播放 HDR。
目前,您只需安装 Windows 10 秋季创作者更新、具有 HDR 功能的显卡和显示屏(例如 NVIDIA 10 系列显卡、LG HDR 电视或显示器),然后在 Windows 显示设置中开启 HDR 模式即可。
Web 开发者可以使用最新的 color-gamut media query 检测输出设备支持的大致色域,并使用 screen.colorDepth 检测在屏幕上显示颜色所用的位数。例如,下面就介绍了一种使用这些标志来检测是否支持 VP9 HDR 的方法:
// Detect if display is in HDR mode and if browser supports VP9 HDR.
function canPlayVp9Hdr() {
// TODO: Adjust VP9 codec string based on your video encoding properties.
return (window.matchMedia('(color-gamut: p3)').matches &&
screen.colorDepth >= 48 &&
MediaSource.isTypeSupported('video/webm; codecs="vp09.02.10.10.01.09.16.09.01"'))
}
需要根据视频编码属性更新上例中传递给 isTypeSupported()
的 VP9 编解码器字符串(配置文件 2)。
请注意,目前还无法在 CSS、画布、图片和受保护的内容中定义 HDR 颜色。Chrome 团队正在努力解决此问题。敬请期待!
适用于 Windows 和 Mac 的永久性许可
加密媒体扩展 (EME) 中的永久性许可意味着许可可以保留在设备上,以便应用可以将许可加载到内存中,而无需向服务器发送另一个许可请求。这就是 EME 中支持离线播放的方式。
到目前为止,ChromeOS 和 Android 是唯一支持永久许可的平台。事实证明这一点现在不复存在。现在,Windows 和 Mac 上的 Chrome 64 也支持在设备处于离线状态时通过 EME 播放受保护的内容。
const config = [{
sessionTypes: ['persistent-license'],
videoCapabilities: [{
contentType: 'video/webm; codecs="vp09.00.10.08"',
robustness: 'SW_SECURE_DECODE' // Widevine L3
}]
}];
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/
- 点击“设为可离线使用”,然后等待视频下载。
- 关闭互联网连接。
- 点击“播放”按钮,畅享视频!
媒体预加载默认为“metadata”
为了与其他浏览器的实现保持一致,Chrome 桌面版现在将 <video>
和 <audio>
元素的默认预加载值设置为 "metadata"
,以减少带宽和资源使用。从 Chrome 64 开始,此新行为仅适用于未设置预加载值的情况。请注意,当 MediaSource
附加到媒体元素时,系统会舍弃预加载属性的提示,因为网站会处理自己的预加载。
换句话说,<video>
预加载值现在为 "metadata"
,而 <video
preload="auto">
预加载值保持为 "auto"
。不妨试试官方示例。
发货意向 | Chromestatus 跟踪器 | Chromium bug
不受支持的 playbackRate 会引发异常
HTML 规范变更后,如果媒体元素的 playbackRate
设置为 Chrome 不支持的值(例如负值),Chrome 63 中会抛出 "NotSupportedError"
DOMException
。
const audio = document.querySelector('audio');
try {
audio.playbackRate = -1;
} catch(error) {
console.log(error.message); // Failed to set the playbackRate property
}
顺便提一下,当 playbackRate
为负、小于 0.0625 或大于 16 时,Chrome 的当前实现会引发此异常。请试用官方示例,了解其运作方式。
发货意向 | Chromestatus 跟踪器 | Chromium bug
后台视频轨道优化
Chrome 团队一直在努力寻找新的方法来延长电池续航时间,Chrome 63 也不例外。
如果视频不包含任何音轨,当在 Chrome 桌面设备(Windows、Mac、Linux 和 ChromeOS)后台(例如,在不可见的标签页中)中播放时,视频会自动暂停。这是继之前仅应用于 Chrome 62 中的 MSE 视频的类似更改之后的后续措施。
移除了极端播放速率的静音功能
在 Chrome 64 之前,当 playbackRate
低于 0.5 或高于 4 时,系统会静音,因为音质会严重下降。由于 Chrome 已改用波形相似性叠加添加 (WSOLA) 方法来降低画质,因此无需再将音频静音。也就是说,您现在可以
以超慢或超快的方式播放声音了