Repository Wiki
ldx123000/Hydrogen-Music

MV、音乐视频与电台

本页概述仓库中 MV 播放、歌曲关联的音乐视频和电台节目播放这三个媒体入口,并区分已由源码搜索结果确认的调用关系与仅在项目说明中描述的能力。

Purpose and Scope

本文聚焦视频与电台相关的用户能力,以及目前能够定位到的音乐视频查找与播放器衔接点;播放器的完整音频队列、音质、歌词和本地文件管理属于其他主题,不在这里重复展开。关于完整播放队列与断点恢复,请参阅 README 中的播放能力说明。证据边界:本次可用的源码证据是定向搜索得到的匹配行及项目说明,未读取实现文件全文;因此以下不推断 MV、电台端点、存储结构或具体异常策略。

Overview

项目说明明确将三种能力并列:网易云 MV 播放;绑定 B 站账号、下载 BV 号视频、选择分 P 和清晰度,并设置音视频时间段同步及视频文件缓存的“音乐视频”;收藏电台和播放电台节目,播放器展示节目简介。参见 README。曲库也有 MV 入口,并支持搜索 MV,参见 README。这些是产品层面的能力说明,不能直接视为已验证的接口契约。

Architecture

下图只画出在源码搜索结果中能够直接确认的音乐视频依赖链;MV 与电台没有足够的实现证据接入图中。

Loading diagram...

Sources: player.js, musicVideoLookup.js

播放器工具导入 verifyStoredMusicVideo,而验证工具使用 windowApi.musicVideoIsExists({ id: songId, method: 'verify' })。这表明音乐视频可用性判断跨越播放器和 windowApi 边界;windowApi 后端具体实现、视频下载和持久化路径在已采集材料中未得到确认,不能把图中的调用解释为下载或播放成功保证。参见 player.js 与 musicVideoLookup.js。

实现与核心流程

歌曲关联的视频验证

在 musicVideoLookup.js 中,可以定位到 invalidateStoredMusicVideoVerifyCache(songId) 和 verifyStoredMusicVideo(songId, options = {}) 两个导出入口;搜索结果还显示验证通过 Promise.resolve().then(...) 调用窗口 API。方法名称显示其职责分别与验证缓存失效、已存音乐视频验证有关,但缓存键、过期时间、验证结果解释及错误处理逻辑在目前可见的片段中不可确定。不要将名称中的 Stored 当作已确认的文件保存位置。

播放器在 player.js 暴露 checkAndLoadVideoForCurrentSong() 和 pauseCurrentMusicVideo()。可见前者使用当前 songId.value 调用 loadMusicVideoForSong,且传入 respectEnabled: true;后者先检查 musicVideo.value、currentMusicVideo.value.id 是否存在且是否等于当前歌曲 ID,然后执行卸载调用。这里的匹配检查使旧歌曲的视频不被误认为当前歌曲的视频;实际加载方法、卸载方法内部行为未见完整实现。

Loading diagram...

Source: player.js

该图的分支只反映已检索到的检查语句和卸载调用;未将 unloadMusicVideo 后续的返回值或 DOM 操作画成既定行为。

MV 和电台的能力边界

README 说明 MV 可播放、电台可收藏和播放节目;README 说明 src/api 汇集网易云、MV、电台等接口封装。但目前未读取这些接口实现,因而无法可靠列出路由、请求参数、登录要求、节目实体字段及返回类型。电台节目与普通曲目都可作为播放源,参见 README;这不意味着其数据模型完全相同。音乐视频的 B 站绑定与下载也仅有项目说明支持,具体账号凭据处理、视频格式和磁盘路径未在本页确证。

Usage Examples

以下为检索结果中的原样单行源码片段,用来指明实际调用入口,而非完整可直接运行的独立程序;当前证据不足以提供包含上下文的完整使用示例。

已存音乐视频验证的窗口调用

javascript
.then(() => windowApi.musicVideoIsExists({ id: songId, method: 'verify' }))

Source: musicVideoLookup.js

这里明确传入歌曲 songId 和字符串 'verify';返回结果如何映射为布尔值需要阅读其余实现后才能确定。

播放器公开入口

javascript
export function checkAndLoadVideoForCurrentSong() { loadMusicVideoForSong(songId.value, { respectEnabled: true,

Source: player.js

上例是未闭合的源码节选,只展示传参起点,不能复制为完整函数。另一个实际导出入口为 pauseCurrentMusicVideo(),可见 player.js。

配置与 API 参考

可见名称类型/值默认值可确认的作用
options对象{}verifyStoredMusicVideo(songId, options = {}) 的可选参数;内部选项含义未从现有片段确认,见 musicVideoLookup.js。
method字符串调用点写死为 'verify'传给 windowApi.musicVideoIsExists 的操作标识,见 musicVideoLookup.js。
respectEnabled布尔值当前调用点为 truecheckAndLoadVideoForCurrentSong 传给 loadMusicVideoForSong;该标志在被调用方的具体解释尚未核实,见 player.js。

这些是源码中看得到的参数,不等同于应用级配置清单。虽然产品说明提到视频清晰度、时间段同步、缓存和 B 站账号,README 没有给出这些设置的键名、类型、默认值或配置文件位置,故不列入可执行配置表。

已定位的导出函数已确认输入返回值/异常信息
invalidateStoredMusicVideoVerifyCache(songId)songId,类型未从声明确认未从可见片段确认。
verifyStoredMusicVideo(songId, options = {})songId、默认空对象的 optionsasync 函数;具体解析值、拒绝条件未确认。
checkAndLoadVideoForCurrentSong()无显式参数;读取 songId.value未从可见片段确认。
pauseCurrentMusicVideo()无显式参数至少有一个不满足条件时 return false 的分支;完整返回契约和异常未确认。

失败模式、状态与运行注意事项

  • 视频与歌曲不匹配:pauseCurrentMusicVideo 比较 currentMusicVideo.value.id 与 songId.value,在执行可见的卸载调用前先做防护;没有已确认的视频 ID 时也存在提前返回路径,见 player.js。
  • 窗口桥接不可用或验证失败:验证依赖 windowApi.musicVideoIsExists;目前无足够上下文确定此调用失败时是抛错、吞错、重试还是降级,见 musicVideoLookup.js。不能假定此操作一定是纯本地读取。
  • 缓存与并发:存在显式缓存失效入口,说明修改已存视频状态时需考虑旧验证结果;缓存实现、并发去重、时效和跨窗口一致性尚未确认,见 musicVideoLookup.js。
  • 排障顺序:歌曲视频缺失时先区分产品说明中的 MV、B 站音乐视频与电台节目,再检查当前 songId、验证桥接和播放器的视频状态;对下载、分 P、缓存路径及节目简介的实际故障诊断需要进一步查看相应实现。项目功能边界见 README。

扩展与验证边界

若修改音乐视频有效性校验,应同时检查播放器的加载入口与 verifyStoredMusicVideo、缓存失效入口之间的关系,而不是仅调整 UI 状态;相关连接可见 player.js 和 musicVideoLookup.js。现有材料未包含测试文件或完整接口实现,实现细节未在已采集源码中找到:不能声明 MV、电台播放、视频缓存的具体测试覆盖率、线程安全保证或性能指标。