feat: add local video support using current logic#2982
Hidden character warning
Conversation
|
Is the PR ready to review? |
|
从功能实现角度来看,这个 PR 已经可以进行 review 了。 本地视频绑定功能已经完成,并且在我本地测试表现正常,编译和测试都可以通过。 不过在合并了最新的上游分支(系统托盘最小化功能的那个分支)之后,CI 开始无法通过。我在本地无法复现这个问题,因此更倾向于是环境相关的问题,而不是这个 PR 本身引入的,目前还没有定位到具体原因。 另外,在测试过程中我发现 VLC 后端在切换媒体源时存在一个潜在问题:卡死更可能发生在 总结一下: 功能层面:已完成,可以 review |
…opTest` in CI. Add an explicit `app-data` dependency to `ui-cache` because it directly uses types from that module.
将 `TimeBasedDanmakuSession` companion logger 改为 lazy 初始化,避免纯逻辑方法调用时提前触发 logging 初始化
|
我发现这个 CI 失败看起来是偶发的,或者和环境/缓存有关。 https://github.com/diary112233/animeko/actions/runs/25242351243 这个cl测试通过了,https://github.com/diary112233/animeko/actions/runs/25243090620 这个就没通过,提交哈希是9ceb96ba16a8fcd4825973c6647ab3759bb615e6 https://github.com/diary112233/animeko/actions/runs/25271919092 这个通过了, |
概述
这个 PR 主要做了两件事:
背景
现有缓存链路主要围绕远端媒体展开,用户即使已经有本地视频文件,也无法直接接入现有的剧集缓存、播放和管理流程。
另外,桌面端在切换视频时,如果在
stopPlayer之后立刻加载新媒体,VLC 有概率出现卡死或崩溃,影响连续播放和切换体验。技术路线
本次实现没有单独新开一套“本地视频播放”逻辑,而是选择复用现有的媒体缓存模型和播放链路,把“外部本地文件”抽象成一种特殊的本地缓存媒体。
这样做的原因是:
播放器切换问题则采用配置化冷却时间的方式处理,在播放器真正加载下一条媒体前增加一个平台可配置的等待时间,尽量将兼容性处理收敛在播放会话内部,而不是散落到上层业务逻辑里。
实现方式
1. 本地视频能力
1.1 将外部文件包装为可播放媒体
新增
ExternalLocalFileMediaFactory,将用户选择的本地文件构造成Media:download使用ResourceLocation.LocalFilemediaSourceId复用local-file-systemkind标记为LocalCacheMediaCacheMetadata这样本地文件可以直接进入现有的媒体解析、缓存和播放流程。
1.2 新增外部本地文件缓存存储
新增
ExternalLocalFileMediaCacheStorage,为“外部本地文件绑定”提供单独的存储实现,并注册新的MediaCacheEngineKey.ExternalLocalFile。核心行为如下:
这部分实现尽量贴近原有缓存逻辑,避免引入新的生命周期模型。
1.3 让缓存请求支持“直接使用已选媒体”
在
EpisodeCacheRequester中新增requestSelectedMedia,用于跳过“拉取远端资源列表 -> 选择资源”这一步,直接基于用户已经选定的Media进入Done阶段。这使得本地文件场景可以复用现有缓存完成逻辑,而不需要伪造远端请求流程。
1.4 桌面端增加绑定入口
在缓存管理界面中,为桌面端剧集项增加“绑定本地视频”按钮:
subjectInfo和episodeInfo创建本地媒体requestSelectedMedia直接生成缓存请求2. VLC 切换冷却时间
新增
PlayerMediaSwitchCooldownConfig,并在PlayerSession中接入:delay平台配置如下:
400ms冷却时间0ms0ms也就是说,只有桌面端启用了这次兼容性等待,移动端行为保持不变。
平台适用范围
本地视频绑定功能
当前用户可见入口只在 Desktop 开放。
适用平台:
说明:
对于 Android / iOS:
VLC 切换冷却时间
当前实际生效平台为 Desktop。
说明:
400ms,用于规避 VLC 快速切换媒体时的卡死/崩溃问题0ms,不改变原有行为