Skip to content

实现 playback 扩展 ​

协议见 playback。播放按钮的显示条件见用户指南 · 播放。

同包导出 ​

widget / search 仅生成 ListItem,不应返回播放 URL。应在同一包中提供 playback 扩展,并通过 accepts 声明支持的条目 source:

js
{
  type: "playback",
  id: "main",
  title: "Demo Playback",
  accepts: { sources: ["url"] },
  sources: async function (ctx, input) {
    if (!input.ref || input.ref.id !== "demo-1") {
      return [];
    }
    return [
      {
        id: "bipbop",
        name: "BipBop",
        url: "https://devstreaming-cdn.apple.com/videos/streaming/examples/img_bipbop_adv_example_fmp4/master.m3u8",
      },
    ];
  },
}

sources 的输入为 { ref, instanceId?, params?, season?, episode? }。从 widget 实例进入时,App 会传入该实例的 instanceId 和 params。用户在详情页选择季、集后播放剧集时,输入中还会包含 season / episode。

空数组和抛错 ​

情况做法
当前条目没有可用线路返回 [];null 也会被统一转换为空数组
上游服务不可用或参数无效抛出 ExtensionError

请勿将播放地址写入 ListItem 或 DetailItem。sources 默认不缓存。服务器配置应存放在来源实例的 input.params 中,而不是 ctx.settings 中。详见参数。