MediaSessionAction - 描述了用户可以在媒体会话中执行的操作,例如播放、暂停或搜索

MediaSessionAction 枚举类型描述了用户可以在媒体会话中执行的操作,例如播放、暂停或搜索。

您将这些值之一传递到 MediaSession 接口的 setActionHandler() 方法,以指示将为其调用处理程序的操作。

语法

媒体会话操作的类型使用来自 MediaSessionAction 枚举类型的字符串指定。

每个操作都是一个通用的媒体会话控制请求。实现对其中每一个的支持,以允许执行该类型的操作。以下字符串标识当前可用的媒体会话操作类型:

nexttrack

将播放前进到下一曲目。

pause

暂停媒体播放。

play

开始(或恢复)媒体播放。

previoustrack

返回上一曲目。

seekbackward

从当前位置向后浏览媒体。MediaSessionActionDetailsseekOffset 属性指定了向后搜索的时间量。

seekforward

从当前位置向前浏览媒体。MediaSessionActionDetailsseekOffset 属性指定向前搜索的时间量。

seekto

将播放位置移动到媒体内的指定时间。寻找的时间在 MediaSessionActionDetailsseekTime 属性中指定。如果您打算快速连续执行多个 seekto 操作,您还可以指定 MediaSessionActionDetailsfastSeek 属性值为 true。这让浏览器知道它可以采取措施优化重复操作,并且可能会提高性能。

skipad

跳过当前播放的广告或商业广告。此操作可能可用也可能不可用,具体取决于平台和 user agent,或者可能由于订阅级别或其他情况而被禁用。

stop

完全停止播放。

描述

媒体会话动作可以由任何媒体会话动作源生成;这些来源包括浏览器本身内的 UI 小部件,用户键盘上的媒体控制键,以及用户耳机或耳塞上的按钮。

实例

添加动作处理程序

此实例通过设置 seekforwardseekbackward 动作处理程序来实现音频播放器的向前和向后搜索动作。

let skipTime = 10; // 以秒为单位跳过的时间

navigator.mediaSession.setActionHandler('seekforward', details => {
 // 用户单击 “前进” 媒体通知图标。
 audio.currentTime = Math.min(audio.currentTime + skipTime,
               audio.duration);
});

navigator.mediaSession.setActionHandler('seekbackward', details => {
 // 用户单击 “后退” 媒体通知图标。
 audio.currentTime = Math.max(audio.currentTime - skipTime, 0);
});

在这种情况下,seekforwardseekbackward 处理程序都使用固定距离,忽略传递给处理程序的 MediaSessionActionDetails 指定的时间。

在一个处理函数中支持多个动作

如果您愿意,您还可以通过检查 MediaSessionActionDetails 对象的 action 属性的值,使用单个函数来处理多种操作类型:

let skipTime = 7;

navigator.mediaSession.setActionHandler("seekforward", handleSeek);
navigator.mediaSession.setActionHandler("seekbackward", handleSeek);

function handleSeek(details) {
  switch(details.action) {
    case "seekforward":
      audio.currentTime = Math.min(audio.currentTime + skipTime,
              audio.duration);
      break;
    case "seekbackward":
      audio.currentTime = Math.max(audio.currentTime - skipTime, 0);
      break;
  }
}

在这里,handleSeek() 函数处理 seekbackwardseekforward 动作。

使用 MediaSessionActionDetails 提供的数据

在此实例中,seekforwardseekbackward 的处理程序都不是指定一个距离,而是使用 seekOffset 属性中指定的时间。

navigator.mediaSession.setActionHandler("seekforward", handleSeek);
navigator.mediaSession.setActionHandler("seekbackward", handleSeek);

function handleSeek(details) {
  switch(details.action) {
    case "seekforward":
      audio.currentTime = Math.min(audio.currentTime + details.seekOffset,
                                   audio.duration);
      break;
    case "seekbackward":
      audio.currentTime = Math.max(audio.currentTime - details.seekOffset, 0);
      break;
  }
});

规范

规范
Media Session Standard (Media Session)
# enumdef-mediasessionaction

桌面浏览器兼容性

暂无兼容数据