Skip to main content

drpy-node-play-debug

适用于 drpy-node 源的播放链路排查与 lazy 修复。用户提到“播放不通”“lazy 不对”“是不是直链”“play.html 被当直链”“iframe 提取”“m3u8 提取”“parse:0/1 判断”“假播放”“站外解析”时使用。专注于判断播放结果是否真实可播,并优先修复 lazy 逻辑。

Informações da origem

Repositório
ant-video/ant-video
Última atividade na origem
17 de setembro de 2026 às 18:34
Idioma detectado do SKILL.md
chinês
Estrelas
163
Forks
23

Opções de instalação

Por padrão, está selecionado o prompt que primeiro revisa a origem. Você pode mudar para um comando direto ou baixar uma cópia local.

Revise os arquivos de origem

Leia o SKILL.md e os arquivos complementares exibidos pelo SkillsMP antes de decidir se vai instalar.

Explorador de arquivos
3 arquivos

Exibindo SKILL.md

SKILL.md
Instruções da origem · Visualização somente leitura
name
drpy-node-play-debug
description
适用于 drpy-node 源的播放链路排查与 lazy 修复。用户提到“播放不通”“lazy 不对”“是不是直链”“play.html 被当直链”“iframe 提取”“m3u8 提取”“parse:0/1 判断”“假播放”“站外解析”时使用。专注于判断播放结果是否真实可播,并优先修复 lazy 逻辑。
# drpy-node Play Debug ## 调度优先级(新增强规则) 当本地环境已安装本 Skill 时: - 本 Skill 的优先级 **高于** drpy-node MCP 的通用调试 prompt - 通用 MCP 调试流程仅作无本地 Skill 时的兜底说明 - 播放链排障必须优先按本 Skill 的判断顺序执行,而不是先按通用 prompt 线性试错 --- ## 与其他 drpy-node skills 的边界(新增) ### 本 Skill 负责什么 - 判断播放结果是否真实可播 - 修复 lazy 逻辑 - 判断 `parse:0/1`、`jx:0/1` 是否合理 - 提取 iframe / m3u8 / 站外解析链接 ### 本 Skill 不负责什么 - 不负责从零写完整源 - 不负责系统性重建首页/一级/二级规则 - 不负责仓库上传决策 ### 何时交回 `drpy-node-source-workflow` 如果问题已经不只是播放链,而是: - 一级/二级/搜索也同时异常 - 自动评估整体很差,需要重新分流 - 需要决定是否上传 / 替换 / 回滚 则应交回总控 workflow,不要在 play-debug 内越权扩散。 ### 强制暂停检查点(新增) 出现以下任一情况时,必须暂停继续深挖 lazy,并明确改为交回 workflow: - `detail` 还没稳定产出 `vod_play_from / vod_play_url` - 当前问题已明显超出播放链,开始涉及首页 / 一级 / 搜索整体重建 - 用户目标已经变成“评估整份源是否可用 / 是否该上传” **禁止**在这些前提不满足时,继续把问题硬解释成单纯的 lazy 故障。 --- ## 新增强规则:播放链排障前,搜索处理也要分层理解 ## 30 秒速查决策树(新增) 当用户一上来就说“播放不通 / lazy 不对 / play.html 被当直链”时,优先按下面顺序快速判断: 1. **先看是不是该交回 workflow** - 如果一级 / 二级 / 搜索也同时异常 → 不要继续在 play-debug 里深挖,先交回 `drpy-node-source-workflow` 2. **先确认 detail 真通** - 没有稳定产出 `vod_play_from / vod_play_url` → 先不要判 lazy 3. **再判断当前返回属于哪一类** - 直链媒体:`m3u8/mp4/m4a/mp3` - 站外解析链接 - 网站播放页本身(如 `play.html` / 当前站播放页) 4. **最后才决定 `parse/jx`** - 直链媒体 → `parse:0, jx:0` - 站外解析链接 → `parse:0, jx:1` - 网站播放页本身 → 常见为 `parse:1, url:input` ### 强提醒 **不要把“拿到一个 http 链接”直接等同于“拿到直链”。** 也不要把 `play.html` 一概判错,先判断它是不是该站模板默认的 `def_lazy` 风格。 --- 如果任务同时涉及搜索与播放,不要把“搜索能出几个结果”直接等同于“搜索已完整打通”。 在相关判断前,必须参考: - `../drpy-node-source-workflow/references/references-search-strategies.md` ### 强提醒 - 原生搜索优先 - suggest / RSS 多数是验证码场景下的 fallback - fallback 搜索通常不支持翻页 这条认知会影响你对整份源完成度的判断,但不应干扰你对播放链本身的排障。 --- ## 新增 references:模板系统里的默认 lazy 逻辑 来源参考: - `references/references-play-lazy-summary.md` ### 1. `common_lazy` 模板系统里的通用免嗅探 lazy 逻辑大致是: ```js let html = await request(input); let hconf = html.match(/r player_.*?=(.*?)</)[1]; let json = JSON5.parse(hconf); let url = json.url; if (json.encrypt == '1') { url = unescape(url); } else if (json.encrypt == '2') { url = unescape(base64Decode(url)); } if (/\.(m3u8|mp4|m4a|mp3)/.test(url)) { result = { parse: 0, jx: 0, url }; } else { result = url && url.startsWith('http') && tellIsJx(url) ? { parse: 0, jx: 1, url } : input; } ``` #### 这意味着什么 - 模板默认会先抓播放页 HTML - 然后解析 `player_*` 配置 - 会处理常见加密字段: - `encrypt == 1` → `unescape` - `encrypt == 2` → `base64Decode + unescape` - 如果拿到的是直链媒体: - `m3u8/mp4/m4a/mp3` - 应返回: ```js { parse: 0, jx: 0, url } ``` - 如果拿到的是站外解析链接,且 `tellIsJx(url)` 为真: - 模板默认倾向: ```js { parse: 0, jx: 1, url } ``` - 如果都不是,模板可能直接回退为 `input` --- ### 2. `def_lazy` 模板系统默认嗅探 lazy: ```js return { parse: 1, url: input, js: '' } ``` #### 这意味着什么 - 如果站点播放页本身可交给前端/外部解析器处理 - 默认就是: ```js parse: 1 url: input ``` - 所以用户看到 `parse:1 + 网站播放页链接`,不一定是错,可能正是模板默认策略 --- ### 3. `cj_lazy` 采集站 lazy 逻辑: - 直链 `m3u8/mp4` → `parse:0` - `parse_url` 以 `json:` 开头 → 先请求 JSON 解析接口再取 `json.url` - 否则拼接 `rule.parse_url + input` #### 这意味着什么 采集站排查时,不能只看最终 `url`,还要看: - `rule.parse_url` 是否配置 - 是不是 `json:` 解析接口 - 返回 JSON 里是否真的有 `url` --- ## 播放排障时的强制判断顺序 ### A. 先判断当前 lazy 更接近哪类模板默认逻辑 1. `common_lazy` 风格: - 播放页里有 `player_*` JSON - 可能有 `encrypt` - 可能需要解密 `json.url` 2. `def_lazy` 风格: - 站点播放页本身交给解析系统 - 直接 `parse:1 + input` 3. `cj_lazy` 风格: - 采集站 / 解析接口 / JSON 解析链 --- ### B. 再判断返回应该是直链还是解析页 #### 直链媒体 如果最终拿到的是: - `m3u8` - `mp4` - `m4a` - `mp3` 优先应返回: ```js { parse: 0, jx: 0, url } ``` #### 站外解析链接 如果最终拿到的是外部解析地址,而不是直链媒体: ```js { parse: 0, jx: 1, url } ``` #### 网站播放页本身 如果当前源策略就是把网站播放页交给解析系统: ```js { parse: 1, url: input } ``` --- ## 新增强提醒 ### 提醒 1 **不要把 `parse:1 + 网站播放页链接` 一概判成错。** 如果该站模板默认就是 `def_lazy` 风格,这可能是合理输出。 ### 提醒 2 **不要把站外解析链接误判成直链。** 拿到 http 链接不等于拿到直链,先判断是不是 `m3u8/mp4` 等媒体文件。 ### 提醒 3 **遇到 `player_*` 配置时,优先查 `encrypt`。** 很多站不是没链接,而是 `json.url` 还没解密。 ### 提醒 4(新增) **不要把规则越界写法先甩锅给引擎。** 如果播放链里的字段/规则写法超出 parser 明确支持边界,应先检查: - 这是不是规范写法 - 模板/现有源是否这样写 - 是否应先修规则和说明,而不是直接要求引擎兼容 --- ## 新增强规则:播放排障也遵循最小化原则 本 Skill 的默认目标不是把整份源补全到信息完美,而是: 1. 先确认 `detail` 真通 2. 先拿到真实 `vod_play_from / vod_play_url` 3. 先判断最终结果是: - 直链媒体 - 站外解析链接 - 网站播放页本身 4. 先给出正确的 `parse:0/1`、`jx:0/1` 判断 ### 强约束 如果用户没有明确要求,不要在 play-debug 阶段顺带去补: - 年份 - 地区 - 演员 - 导演 - 搜索字段美化 这些属于源整体完善项,应交回 create / workflow,而不是在播放排障里扩散。 --- ## 新增硬规则:先确认 detail 真通,再判 lazy 在进入播放链排障前,必须先确认 `detail` 已经稳定产出: - `vod_play_from` - `vod_play_url` 如果二级详情仍然是默认占位、空线路、空列表,禁止直接把问题归因为 lazy。 ### 排查顺序 1. 先确认 detail 测试使用的是一级真实返回的 `vod_id` 2. 再确认二级字典是否按引擎契约正确填写: - `tabs` - `tab_text` - `lists` - `list_text` - `list_url` 3. 只有在 `vod_play_from / vod_play_url` 已真实产出后,才进入 lazy / 播放页 / iframe / m3u8 的排障 --- ## 新增提醒:fallback 搜索不等于完整原生搜索 如果一个源最终采用的是: - suggest 搜索 - RSS 搜索 则在播放链排障或总控汇报时,必须明确: - 这只是验证码场景下保住可用性的 fallback - 通常不支持翻页 - 不能误判为完整原生搜索已经打通 - 读取模板默认 lazy 定义摘要 - 展示当前模板实际继承到的 lazy 类型 这样 AI 在判断 `parse:0/1/jx:0/1` 时,不会脱离模板默认上下文盲判。
Ver no GitHub