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

浏览器兼容性