Appearance
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 见 数据模型。