MediaSession:setPositionState() 方法
MediaSession 接口的 setPositionState() 方法用于更新当前文档的媒体播放位置和速度,以便在提供正在进行的媒体详情的任何用户设备界面上进行展示。如果您的代码实现了浏览器不直接支持的媒体类型的播放器,这将特别有用。
在 navigator 对象的 mediaSession 对象上调用此方法。
语法
js
setPositionState()
setPositionState(stateDict)
参数
stateDict可选-
一个对象,提供关于文档正在进行的媒体的播放位置和速度的更新信息。如果对象为空,则会清除现有的播放状态信息。此对象可以包含以下参数:
duration可选-
一个浮点数值,表示当前媒体的总时长(以秒为单位)。此值应始终为正数,正无穷大(
Infinity)表示没有定义结束时间的媒体,例如直播流。 playbackRate可选-
一个浮点数值,表示媒体的播放速率,相对于其正常播放速度的比率。因此,值为 1 表示正常速度播放,值为 2 表示双倍速度播放,依此类推。负值表示媒体正在反向播放;-1 表示以正常速度反向播放,-2 表示以双倍速度反向播放,依此类推。
position可选-
一个浮点数值,表示媒体最后报告的播放位置(以秒为单位)。此值必须始终为正数。
返回值
无(undefined)。
异常
TypeError-
此错误可能在多种情况下发生:
- 指定的对象的
duration缺失、为负数或为null。 - 其
position要么为负数,要么大于duration。 - 其
playbackRate为零。
- 指定的对象的
示例
下面是一个更新当前 MediaSession 轨道位置状态的函数。
js
function updatePositionState() {
navigator.mediaSession.setPositionState({
duration: audioEl.duration,
playbackRate: audioEl.playbackRate,
position: audioEl.currentTime,
});
}
我们可以在更新 MediaMetadata 时以及在操作的回调函数中使用此函数,例如如下所示:
js
navigator.mediaSession.setActionHandler("seekbackward", (details) => {
// our time to skip
const skipTime = details.seekOffset || 10;
// set our position
audioEl.currentTime = Math.max(audioEl.currentTime - skipTime, 0);
updatePositionState();
});
规范
| 规范 |
|---|
| 媒体会话 # dom-mediasession-setpositionstate |
浏览器兼容性
加载中…