ncm-player5:网易云浮窗播放器与自动跳过不可播歌曲

前言

在 DSH 里长时间挂着对话界面时,如果还想听网易云歌单,常见做法是单独开浏览器或客户端,窗口之间来回切换。ncm-player 系列把播放器做成客户端插件,浮在界面一角,歌单、歌词、队列和登录都留在 DSH 里完成。ncm-player4 已经具备完整浮窗交互,但遇到下架或无版权曲目时只会提示错误并停住,长歌单里坏歌一多就要反复手动点下一首。ncm-player5 在完整保留 ncm-player4 能力的前提下,只在这一处做了增强:判定不可播后自动切到下一首。下面介绍插件定位、能力与安装方式。

这是什么

ncm-player5 是 DSH 客户端插件,维护者为 Doctor-Pan-code,npm 包名 @wolfgenerals/ncm-player5,当前版本 1.4.0,许可证 MIT。实现上基于 WolfGenerals/ncm-player 的 ncm-player4 1.3.1 原样派生,自动跳过等改动在 Doctor-Pan-code/ncm-player5 仓库维护。

插件通过 host 半部对接 music.163.com API,在 Web 客户端注入浮窗 UI,颜色跟随 DSH 皮肤主题。登录 Cookie 仅用于请求网易云,README 说明不发送给第三方。

继承自 ncm-player4 的能力

除自动跳过外,行为与 ncm-player4 1.3.1 一致,主要包括:

播放与队列:播放/暂停、上一首/下一首、进度与音量;顺序、单曲循环、随机三种模式;队列增删与清空,状态持久化,重启后恢复队列、进度、模式与音量。

发现与账号:搜索单曲/歌单/专辑、热门歌单;App 扫码或粘贴 Cookie 登录;登录后可看「我的」歌单与收藏专辑。

歌词:逐行高亮、点击跳转、歌词翻译;迷你模式显示当前行,超长横向滚动,字号可调。

浮窗形态(自 ncm-player2~4 逐代叠加):

  1. 点击播放窗口外任意区域,窗口收起为迷你条。
  2. 迷你条状态下 3 秒内无鼠标点击或移动,自动触发退出,界面变为右下角音符按钮,播放不中断。
  3. 隐藏为音符按钮且仍在播放时,图标随音乐低频节奏跳动。
  4. 右下角图标支持左键长按拖动,位置会记住。

设置:音质、歌词翻译、迷你歌词、无操作自动退出等;ncm-player5 在此基础上增加「自动跳过不可播放的歌曲」(默认开启)。

核心新增:自动跳过不可播歌曲

背景

ncm-player4 遇到下架或无版权时弹出「播放出错(可能无版权或需会员)」后停止,需用户手动下一首。ncm-player5 在可判定为无版权/下架时自动推进队列。

判定方式

第一道(主判据):host 调用 /api/song/enhance/player/url。不可播时网易云返回 url: null 且 code: -110。host 向 client 透传 songUrl 的 { url, playable, reason, code },并新增 songStatus 查询 op。当 playable === false 且 reason === 'copyright' 时直接跳过,不发起音频请求。同时做多档音质降级(设定码率 → 320k → 192k → 128k → 96k),避免「只是没有高音质」被误判为不能播。

第二道(兜底):<audio> 的 error 事件在原有 Web Audio / CORS 重试用尽后,或错误为 MEDIA_ERR_SRC_NOT_SUPPORTED(4) / MEDIA_ERR_DECODE(3) 时,才视为不可播并跳过。

网络异常不算不可播:接口超时、断网、解析失败按「未知」处理,仍弹提示,不会因断网整表跳歌。

跳过规则与开关

  • 顺序模式:下一首,到队尾回到队首继续找可播项;随机模式:随机换一首(避开当前);单曲循环遇到坏歌也会跳到下一首,避免死循环同一首。
  • 跳过时提示「已跳过《歌名》:无版权/已下架」,约 2.8 秒后消失。
  • 防死循环:连续跳过次数达到队列长度(上限 30)仍无可播项时停止,并提示「队列中没有可播放的歌曲」;队列仅一首坏歌时直接停止。
  • 设置页 → 播放 →「自动跳过不可播放的歌曲」,默认开启;关闭后与 ncm-player4 行为一致。
  • host 侧判定结果缓存 5 分钟。

VIP 专享曲在未登录或非会员时同样可能得到 -110,会被跳过;登录会员账号后可正常播放。收藏(❤)受账号风控影响,失败时会有提示,属 README 所述正常现象。

安装与启用

与 ncm-player2/3/4 不能同时启用:各版本的 host 都注册 /ncm/api 前缀,并存会路由冲突。安装 ncm-player5 时应停用 ncm-player4。

从 GitHub 安装(README 原文命令):

dsh plugin add Doctor-Pan-code/ncm-player5

cordis 加载 id 为 ncm-player5。若从 ncm-player4 迁移,可在 $DSH_HOME/profiles/<profile>/cordis.patch.yml 中为 ncm-player4 设置 disabled: true,并重启 DSH。

本地 link 安装步骤见仓库 README:将目录放到 $DSH_HOME/plugins/ncm-player5,在 profile 的 package.json 与 cordis.patch.yml 中声明 @wolfgenerals/ncm-player5 并禁用 ncm-player4,然后完全退出并重启 DSH。

数据与升级

登录态与播放队列保存在本机浏览器 localStorage,key 仍为 ncmply2-settings;音符按钮位置 key 仍为 ncmply4-disc-pos。从 ncm-player4 升级到 ncm-player5 时,登录、队列、设置与图标位置可沿用,无需重新登录或拖图标。

state 中新增 autoSkip(默认 true),其余字段与 ncm-player4 一致,例如:

{
  "state": {
    "queue": [],
    "index": -1,
    "mode": "order",
    "vol": 0.8,
    "quality": 320000,
    "autoExit": true,
    "autoSkip": true
  }
}

host 半部相对 ncm-player4 新增的 op 包括 songUrl(含 playable/reason/code)与 songStatus(纯查询,缓存 5 分钟);其余 op 行为不变。

典型用法

安装并重启 DSH 后,在客户端界面使用浮窗入口(与 ncm-player4 相同交互):搜索或打开歌单加入队列,扫码或 Cookie 登录后播放「我的」内容;需要时可展开完整播放器看歌词与队列,点击窗外收起迷你条,无操作后缩到右下角音符按钮继续听。

遇到不可播曲目且开关开启时,播放器会自动下一首并短暂提示歌名;若希望与旧版一样停在错误处,在设置里关闭「自动跳过不可播放的歌曲」即可。

适用场景与注意

适合在 DSH 对话界面旁常驻听网易云、又不想单独开浏览器标签的用户。插件依赖本机 Node.js 与可访问 music.163.com 的网络;README 注明仅供个人学习,需遵守网易云服务条款与当地法规。

DSH 生态是「一切皆插件」;社区目录 SkillHub 上的 ncm-player5 页 与 GitHub 仓库由社区维护,与 DeepSeek / 幻方无官方从属关系。安装前建议自行查看源码与 MIT 许可证;插件以当前 DSH 进程权限运行,Cookie 等敏感数据存于本机 localStorage,使用前应确认是否符合你的安全策略。

结尾

ncm-player5 在 ncm-player4 浮窗体验不变的前提下,用 host 可播性判定与 client 双阶段兜底,把「下架/无版权停住」改成可配置的自动跳歌,并保留网络异常时不误跳的保护。更多信息见 GitHub:Doctor-Pan-code/ncm-player5 与 SkillHub 目录页。

羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

Xiaoye