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

瀏覽器相容性