Skip to content

danmu ​

为播放器提供弹幕服务。与 subtitle 相同,danmu 扩展由用户在播放器中选择,不与 widget 绑定。

数据模型由此协议定义,不依赖任何第三方响应结构。

字段 ​

字段必填含义
type是"danmu"
id / title是服务选择器名称
accepts否播放器不会根据 accepts 筛选扩展。媒体库文件、Emby 和 Plex 条目可能不包含 MediaRef
cache否match / search / episodes 默认 3600;comments 默认 0
match / search / comments是protocol
episodes否当用户手动选择剧集且 match 未提供 episode 时实现

Protocol ​

ts
match(ctx, input) => Promise<DanmuMatch[]>
input: {
  title?: string;
  season?: number;
  episode?: number;
  fileName?: string;
  fileSize?: number;
  fileHash?: string;   // 仅当用户打开「本地文件 Hash」
  duration?: number;
  ref?: MediaRef;      // 有 TMDB 等身份时带上,不再必填
}

search(ctx, input) => Promise<DanmuMatch[]>
input: { query: string; ref?: MediaRef }

episodes(ctx, input) => Promise<DanmuEpisode[]>
input: { match: DanmuMatch }

comments(ctx, input) => Promise<DanmuCue[]>
input: {
  match: DanmuMatch;
  episode?: DanmuEpisode;
  segment?: { start: number; end: number };   // 秒,[start, end)
}

match 用于播放开始时的自动匹配,search 用于处理用户输入的关键词。没有匹配弹幕时返回空数组。

DanmuMatch 可以包含已定位的 episode。提供该字段后,宿主会直接调用 comments,不再调用 episodes。

分段请求仅通过 comments 的 segment 表达,不提供其他方法。

DanmuMatch / DanmuEpisode / DanmuCue 见 数据模型。