Skip to content

playback ​

为播放器提供播放线路。App 会在开始播放、切换线路或手动刷新时调用 playback 扩展。该扩展不会显示在 Dashboard 中。

widget 中的播放按钮和详情页中的播放操作均使用同一套解析流程和此 protocol。请勿在 widget 中返回播放 URL。

字段 ​

字段必填含义
type是"playback"
id / title是服务选择器里的名称
accepts是{ sources, mediaTypes? }
cache否默认 ttlSeconds: 0
sources是protocol 方法

Protocol ​

ts
sources(ctx, input) => Promise<PlaybackSource[]>

input: {
  ref: MediaRef;
  instanceId?: string;
  params?: Record<string, unknown>;
  season?: number;
  episode?: number;
}

空数组表示当前没有可用线路,不属于错误。上游服务不可用时,应抛出 ExtensionError。

PlaybackSource:

字段必填规则
id是稳定标识,用于记录用户选中的线路
name是线路名
url是最终播放地址
description否分辨率、编码等
headers否播放请求头,不含内部控制键
player否system 或 app
skipRedirectProbe否为 true 时跳过播放前的 GET 探测,适用于直播或一次性 URL

从哪里点播放 ​

小组件播放按钮 ──┐
                 ├── Open { kind: "play", ref, episode?, origin }
详情页播放 ──────┘
                      → 解析 playback
                      → sources(ctx, { ref, season, episode })
                      → 播放器

从小组件直接播放时不会调用 detail。因此:

  • 电影可以直接播放。
  • 剧集条目必须包含 episode,否则模板不显示播放按钮。
  • 如需先查看简介或选择季、集,应先进入详情页。

sources 默认不缓存。请勿将签名线路或直播地址写入 widget 的 ListItem 或 DetailItem。播放按钮的显示条件见用户指南 · 播放。