Skip to content

Releases: 1824239290/OcPlayer

OcPlayer v0.2.2 · 全站 Liquid Glass 统一与设置页卡片流、选集选季分区、播放 HUD 让位灵动岛、片尾自然结束修复、批量性能优化

Choose a tag to compare

@github-actions github-actions released this 24 Oct 05:50

OcPlayer v0.2.2 · 全站 Liquid Glass 统一与设置页卡片流、选集选季分区、播放 HUD 让位灵动岛、片尾自然结束修复、批量性能优化

下载

文件 平台 说明
OcPlayer-v0.2.2-macOS-arm64.dmg / .zip macOS(Apple Silicon) ad-hoc 签名,未经公证,首次打开可能有 Gatekeeper 提示
OcPlayer-v0.2.2-ios-unsigned.ipa iOS(iPhone / iPad) 未签名 IPA,需用 AltStore / Sideloadly / TrollStore 等工具重签安装
SHA256SUMS.txt / SHA256SUMS-ios.txt — 对应平台产物校验和

播放内核维持官方 v0.2.1(与上一版相同,本版无内核切换)。产物内写入 build 号与提交短哈希(关于页显示 v0.2.2 (Build N · 短哈希))。

升级须知

  • 全 App 强调色统一成「中性」:按钮、开关、选中态不再使用系统蓝,改用前景色亮暗表达强调——本版观感变化最大的一项。域语义色(收藏状态、评分橙、任务状态点、破坏性红等)保留不变。
  • iPad:标签栏移到底部(iPhone 形态,首页头像因此可见),页面内容保持 iPad 版式不变(横幅详情页、大卡网格)。
  • 升级后首次启动图片缓存冷一次:可再生的图片缓存从 Application Support 搬进 Caches(海报按需重下即可恢复)。顺带两个收益:不再占用 iCloud 备份额度(此前本机实测已占 370 MB),系统存储吃紧时可被自动回收。
  • 界面文案拼写统一:用户可见的「TMDb」统一为官方拼写「TMDB」。
  • 默认字幕策略改为「中文优先 · 简体优先」(原先需要手动选)。

本次改动

全站视觉统一

  • 全站内容卡统一为原生 Liquid Glass:Bangumi 四页、详情页媒体信息、MoviePilot 搜索结果与下载队列、设置页——原先 ultraThinMaterial、纯色底、同页三处各说各话的卡片收编为同一原语;顶层卡圆角统一 16pt、密集小格 8pt,同一张卡在不同页里轮廓不再跳。
  • 设置页脱离系统 Form,改成「玻璃卡片流」:hub 首屏 + 子页结构不变,行高、分隔线、开关形态全部重做,观感与全站统一。
  • 导航图标「选中 = 品牌原色 / 未选中 = 灰」:Bangumi、MoviePilot 与首页 Tab(图标换成服务端账号头像),macOS 顶栏「首页」药丸同款。
  • 登录页重做:「海报墙 + 毛玻璃卡片」。
  • 首页与海报墙排版收紧:去掉顶栏大标题、栏位之间间距收紧、「最近添加」改 16:9 横版卡;海报墙手机 3 列、卡片边框贴着图片。
  • 氛围背景铺满双端全部界面:原先每页各自垫底、总有页漏,现收敛为一个全局挂载点。

播放器

  • 片尾自然播完不再报 EOF:内核在片尾把「跨文件末尾的读」间歇报成致命错误,导致自然播完反而弹「播放出错」。现按自然结束收口——不弹错误徽章、正常连播(详见下方「说明」)。
  • 跳到接近片尾不再直接进错误态:进度条拖到片尾附近时,落点自动留出安全边际,避开同一处内核缺陷。
  • 「后退 / 前进 10 秒」不再把进度条甩到片尾。
  • iPad 播完一集正常连播或退出(原先只剩内核报错)。
  • iOS 切后台回来不再报错,且后台真的继续出声:挂起前主动暂停、回前台原地续播,并接上内核内建的「仅音频」模式继续播放。
  • 播放 HUD 让位灵动岛 / 屏幕圆角(iOS):横屏侧边与竖屏顶部的控件不再画进系统禁区;无刘海机型与 macOS 不受影响。
  • 字幕外观可调:设置 → 播放新增「字幕外观」组(字号、样式等)。
  • 画质增强开关:设置 → 播放 → 播放内核,新增 ArtCNN 亮度上采样。
  • 「为什么没出 HDR」「刚才那一下为什么卡」有了答案:内核逐帧诊断(HDR 直通状态、丢帧原因)现在能在诊断日志里查到。
  • 外挂字幕可以删了;默认字幕策略改中文优先。

详情页与选集

  • 选集区改版:「剧集」标题位换成选季控件(单季时显示季名);选集轨道按每 30 集切一个分区,千集长番不用再横着翻几百张卡;默认停在「第一个未看完的集」所在分区。
  • 选集条提前占位:库里还没有的集也会画出来并标注,上线即知全季规模。
  • 详情页打开明显提速:列表请求带全字段 + 点击预取 + 快照缓存,进详情页先见内容、网络结果回来原位覆盖。
  • 合集(Collection / BoxSet)从空壳变成真内容:背景与元数据由 TMDB 补全,不再是只有标题的占位条目。
  • 返回首页不再比进详情页慢半拍:转场里一段无意义的固定等待删掉了。

数据与多端

  • 多端同步配置可导出:服务器档案等配置导出成一个文件,经 iCloud 云盘 / 隔空投送搬到另一台设备导入,不用逐台重填。
  • 修复「多设备同账号下 Bangumi 已看数据倒退」(标一集「看过」会把别的设备数据冲回去)。
  • 修复「Bangumi 刷新后进度条已更新、章节格子还停在旧状态」。
  • 修复「集列表加载失败」偶发报「已取消」。
  • 修复首页「最近添加」整条静默消失。
  • 修复进媒体库瞬间顶栏白一下、空态鬼影与新网格叠化。

弹幕

  • 自动匹配期间显示已等待时长:最长十几秒的匹配不再像卡死。
  • 匹配降级瀑布加总预算:所有数据源都慢的最坏情形从约 100 秒压到约 45 秒。
  • 手动搜索的别名链不再阻塞主检索;同一集重开不再重读重解弹幕文件;弹幕解析与片头检测提速数倍。

性能与安全

  • 算文件哈希不再把整部电影下载下来(此前真的会——为匹配弹幕源,整片下载只为算 16 MB 头部哈希就能完成的指纹)。
  • TMDB 批量补全改 4 路并发:弱网下 1.6–3.5× 提速;侧车字幕改并发下载。
  • MoviePilot 各页 JSON 解析从「三遍」压到「一遍」;iOS 触摸与音量手势不再反复重算整个播放器界面。
  • 诊断包导出峰值内存 −71%;修复两处「凭据明文进导出包」的脱敏泄漏。
  • 暂停后不再每 10 秒重复上报进度;下载页在应用进后台时停止轮询。

说明

  • 完整变更清单(含每条的踩坑记录与验证口径)见仓库 CHANGELOG.md 的 [0.2.2] 一节。
  • 片尾 EOF 修复是临时兜底:根因在播放内核侧(跨文件末尾的读应返回干净 EOF 而非致命错误,已报上游 AimesSoft/liberika#163),上游修复升版后会移除这层折叠。
  • 两条已知未竟项:横屏下弹幕从侧边滑入仍会穿过灵动岛区域(与 HUD 是两套布局,下一轮处理);iPad 底部标签栏是刻意不跟随系统默认顶部胶囊的取舍,系统将来变更行为时可能静默退回顶部形态(不会崩)。

OcPlayer v0.2.1 · 设置页重构为 hub 首屏 + 子页、TMDb 元数据补全、内核换装官方 v0.2.1

Choose a tag to compare

@github-actions github-actions released this 06 Oct 14:32

OcPlayer v0.2.1 · 设置页重构为 hub 首屏 + 子页、TMDb 元数据补全、内核换装官方 v0.2.1

下载

文件 平台 说明
OcPlayer-v0.2.1-macOS-arm64.dmg / .zip macOS(Apple Silicon) ad-hoc 签名,未经公证,首次打开可能有 Gatekeeper 提示
OcPlayer-v0.2.1-ios-unsigned.ipa iOS(iPhone / iPad) 未签名 IPA,需用 AltStore / Sideloadly / TrollStore 等工具重签安装
SHA256SUMS.txt / SHA256SUMS-ios.txt — 对应平台产物校验和

播放内核换装上游官方 v0.2.1(Config/Erika.version 是唯一事实源,哈希入仓并与 release 自带 SHA256SUMS 逐字节核对;本次是纯新增 C ABI,App 侧零适配)。产物内写入 build 号与提交短哈希(关于页显示 v0.2.1 (Build N · 短哈希))。

升级须知

  • 设置页整页重构:所有设置项按功能拆进子页(播放 / 首页栏目 / 弹幕 / 网络 / Jellyfin / Bangumi / MoviePilot / TMDb / 维护 / 关于),一级页只剩 11 行导航行,每行右侧直接显示当前值(服务器名、登录态、内核、弹幕加载方式、栏目数、TMDb 状态、版本号)。找不到原来某一项时,先看一级页对应那一行。
  • 升级后首次打开会重下一批海报:图片缓存键此前含「服务器地址 + App 版本」,于是换地址(局域网 ↔ Tailscale ↔ 反代)和每次发版都会把整份缓存作废。键改为「服务器 + 账号」维度并做了一次性旧键清理——这次清理不额外增加任何下载(新键本来就要重下),此后换地址与升级都不再重下。
  • jellyfin-sdk-swift 升到 3.3.0(按 Jellyfin 12.1 OpenAPI 生成):兼容 Jellyfin 12(版本号从 10.11 直接跳到 12.0)。三项客户端可见的破坏性变更逐项核对全不沾(旧式鉴权头、/emby 路径别名、GetItems 递归过滤语义)。遗留提醒:跳过片头依赖服务器端 intro-skipper 插件,10.11 时代的插件在 12.0 上不加载,需等插件适配版(服务器侧,与播放器无关)。
  • TMDb 元数据补全是可选功能:默认关闭,需自己在「设置 → TMDb 元数据补全」填 API Key(v3 / v4 格式都收)。不填则整个功能禁用、不发任何请求,行为与上一版一致。

本次改动

TMDb 元数据补全(新功能)

填好 API Key 后,详情页可用 TMDb 补简介、评分、类型、演员、海报 / 背景 / 分集剧照。匹配走「服务端 ProviderIds["Tmdb"] 直连 → 标题 + 年份搜索兜底」,六档打分只有 ≥0.85 才自动落库——错误匹配比没有匹配更糟:用户会看到别人的简介和海报,而且显示得像真的一样。匹配不上的可在详情页手动搜候选、绑定或解除(手动绑定的不会被自动匹配顶掉)。设置页可对整个媒体库批量补全:剧集连同各季一起补(季数据决定分集标题 / 剧照 / 切季简介),带进度条与「新补 / 跳过 / 匹配不上 / 失败」四类计数,可随时取消——进度状态就是数据库本身,取消后再点一次自然续跑,不会重复打请求。文本与图片可分开选「TMDb 优先 / 只补缺」(默认两者都是 TMDb 优先),缓存期硬夹在 6 个月内(TMDb 条款),并带署名。

冷启动与离线不再空白

首页三条栏 / 库列表 / 条目详情 / 季与集 / 翻过的库页 / 媒体技术信息落进 SQLite(Media.sqlite):冷启动先读磁盘、首屏立刻有内容,网络结果回来原位覆盖。断网时有内容才显示一行小字——noNetwork / serverUnreachable 说「离线 · 数据更新于 X 前」,5xx / 401 说「内容可能不是最新 · 刷新失败」,不把服务端的问题引去查网络。播放进度只读缓存、服务端响应一律覆盖(进度与元数据两个独立时间戳、两条独立淘汰上限)。库损坏 / 迁移失败删库重建;payload 宽容解码,以后给条目加字段不需要迁移。

图片:换地址与升级不再重下,离线出图不再等网络

  • 缓存键只保留「路径 + 查询 + 服务器/账号身份」(host 归一为占位符),同一台服务器换入口共用一份缓存;身份用跨进程稳定的哈希(hashValue 每进程随机播种,会让缓存每次启动全失效),且不再包含 App 版本。
  • 仅靠 URLCache 跨实例读不回来(实测:同实例命中、重启一律 miss),故新增图片字节自存,网络失败时由图片管道回落。
  • 兜底从「网络失败再读磁盘」改为磁盘优先:断网时不再每张图先等约 7 秒超时。后台刷新设三道闸门(7 天新鲜度 / 同键去重 / 并发 ≤4),翻页时不会突然打出上百个请求。
  • 实测:旧键清理后图片缓存 110 MB → 6.5 MB;离线启动首页图片全部正常显示。

一台服务器多条地址,自动挑最快可达的那条

档案从「一个 URL」变成「一组地址 + 当前生效地址 + 可选固定项」,按服务器身份合并:换地址再登一次只是给这台服务器补一个入口,不会再冒出一条、也不会覆盖原地址。择优按实测延迟而不是按类别(Tailscale 直连有时比绕一圈的局域网更快),并有三条硬约束:粘性(两个入口延迟接近就不切,避免来回抖)、软过期后台重探(不阻塞请求)、失败开放(一个地址都探不通时保持原地址,绝不把「探活失败」变成「连不上服务器」)。传输层失败时自动换址并在新地址立刻重试一次;HTTP 4xx/5xx 不算地址不通。

设置页与详情页

  • 设置页重构为 hub 首屏 + 子页:一级页 11 行导航行带当前值预览,说明文字随功能进各自子页;破坏性操作全部补确认(退出三种登录、清图片 / 元数据 / TMDb 缓存、清日志);iPhone 栏目排序按钮热区补到 44×44(原先 2pt 间距误触率高),TMDb Key 输入改纵排避免被键盘顶住。
  • 详情页头部补上「去原站看看」:Bangumi 与 TMDB 的官方彩色图标,点开用系统浏览器。季与分集刻意不给链接——它们要的是剧集级 id,硬拼会指到别人的片子。

弹幕与播放

  • 弹幕字号改为百分比调整:从 4 档单选(小 / 标准 / 大 / 特大)改为与字幕一致的减小 / 重置 / 加大,根行显示百分比(22pt = 100%),步进 ±10%、范围 50%–200%;存储格式不变,旧档位值无需迁移。
  • 内核换装上游官方 v0.2.1:资源回收(关闭 / 切换媒体 / seek 时取消旧的网络读取,销毁播放器时等后台 worker 退出并释放连接与线程,stop() 释放 HTTP 缓存与队列占用但保留从头重播)、预读窗口修复(预取不再跨越条带边界继续读取)、恢复硬解不可用时的软件回退(WMV/WMA、8/10-bit AV1)并修正 P010 插值精度。

修复

  • 播放完返回详情页时,被盖住的媒体库页透过透明详情页漏出(内容间散落着库网格卡片)。
  • 呈现式页面(下载管理 / 资源搜索 / 管理服务器 / 开源许可证)返回键点了没反应;同族的宿主漏出与半透漏底两洞一并修掉。
  • 设置 → 退出 MoviePilot 每次必卡死(后台线程写 UserDefaults 造成的互等)。
  • iOS 切后台回来播放器直接报错、只能点重试。
  • MoviePilot 未登录时分区整页只有中间一块有氛围背景;Bangumi 未登录时顶栏是一条死灰横条。
  • MoviePilot 只是没登录,分区首页却报「未配置 MoviePilot」。
  • 测试宿主被「stderr → os_log → stderr」自激循环拖死(iOS 测试步骤此前在 CI 上从未绿过的根因)。
  • 设置页补上「退出 Bangumi」出口(此前只在 Bangumi 分区个人页顶栏)。

说明

  • 完整变更清单(含每条的踩坑记录与验证口径)见仓库 CHANGELOG.md 的 [0.2.1] 一节。
  • 发版过程中修掉一个 CI 缺陷:tag push 时 Release 门禁的 checkout 步骤会因 git fetch --tags 缺少 --force 而必然失败(v0.2.1 首跑即挂在第一步、一条用例都没跑),已修并改用 workflow_dispatch 重跑;下一次发版直接验证 tag push 路径。
  • 两条已知取舍(已写进代码注释与文档,不必重复讨论):分集剧照是两段式(先服务端图、TMDb 到位后替换一帧);服务端脏 ProviderIds(TMDb 404)会每次重试且不退回搜索——实测本机库 41 个带 Tmdb id 的条目全部有效,故未加退避。

OcPlayer v0.2.0 · 双端导航外壳重做与氛围背景贯通、弹幕匹配精准度、内核换装官方 v0.2.0

Choose a tag to compare

@github-actions github-actions released this 29 Sep 13:07

OcPlayer v0.2.0 · 双端导航外壳重做与氛围背景贯通、弹幕匹配精准度、内核换装官方 v0.2.0

下载

文件 平台 说明
OcPlayer-v0.2.0-macOS-arm64.dmg / .zip macOS(Apple Silicon) ad-hoc 签名,未经公证,首次打开可能有 Gatekeeper 提示
OcPlayer-v0.2.0-ios-unsigned.ipa iOS(iPhone / iPad) 未签名 IPA,需用 AltStore / Sideloadly / TrollStore 等工具重签安装
SHA256SUMS.txt / SHA256SUMS-ios.txt — 对应平台产物校验和

macOS 与 iOS 同用上游官方内核 v0.2.0(fork 上先行的改动已全部合入上游,C ABI 与上一版逐字节相同,App 侧零适配)。产物内已写入 build 号与提交短哈希(关于页 v0.2.0 (Build N · 短哈希))。

升级须知

  • Bangumi 登录前置条件变了:客户端不再持有 OAuth 应用密钥,登录改走 OcPlay 网关——设置里需要配「网关地址 + 带 bgm:oauth 权限的 API Key」(与弹幕共用同一份设置)。此前登录过 Bangumi 的用户需要按新方式重新登录。
  • 「海报氛围背景」开关已移除:氛围图改为常开,有 backdrop 图即铺氛围底,没图自动回退清晰横幅;老配置里残留的关断值不会影响新版本。
  • iOS 底部 Tab 精简:「媒体库」Tab 撤掉,媒体库入口统一走首页的「媒体库」栏;搜索改为独立的搜索 Tab(顶栏放大镜也可进)。

本次改动

界面与交互(双端导航外壳重做)

macOS 撤掉侧栏,分区入口收进窗口工具栏的玻璃图标组(版式对齐 macOS 26 Safari 工具栏),媒体库是独立一颗带箭头的按钮,点开弹出各库列表、库拉取失败可在面板里重试;iPad 分区切换回归 iPhone 同款系统 Tab;iPhone 新增搜索 Tab 与首页媒体库栏,顶部常驻搜索钮。换页统一为两段式转场(点击后当前页淡出 → 落地页淡入),pop 返回、分区切换与 push 对称;顶栏返回键常规布局改自绘玻璃胶囊。氛围背景贯通双端:首页轮播常驻底层、iOS 三个 Tab 补齐背景、跨 Tab 背景连续渐变,进详情页不再「先黑一下」(背景从首页那张延续进来),卡片统一半透明磨砂透出氛围图。

搜索

  • 首页全库搜索:首页顶部搜索框搜所有媒体库(电影 + 剧集条目名,到剧集为止),结果以海报墙就地替换 rails,支持翻页与失败重试。
  • 媒体库站内搜索:库海报墙页顶部搜索框,服务端 searchTerm 查询,与排序 / 观看状态筛选 / 分页缓存全链路复用。
  • 修掉一串搜索相关的形态问题:搜索 Tab 切走再切回输入框消失、iPhone 点 X 收起后被系统重新展开、库内搜索后切走再回来只剩搜索结果、macOS 搜索框随重构消失等。

弹幕匹配精准度

四件套修复「弹幕配错番」:①Jellyfin 裸数字文件名的规范名合成不再让模糊匹配锁到「第1话」;②新增集号 token 与特典命名空间,特典/OP-ED 不再被当成正片集数,特典目标也不拿 Jellyfin 序号发 episode=S<n>(与弹弹play 的 S 序号不同源);③类型硬门槛——剧场版与剧集是不同作品,类型不匹配直接出局(修掉中二病特典被同 IP 剧场版抢走的实报案例);④手动搜索失败时并发用 Bangumi 中文名换库内标题再搜一次、按 animeId 去重合并。另把弹幕网关的偶发 500 与 TLS/连接类错误纳入重试,「弹幕服务暂时不可用」大幅减少。

内核与播放

  • 内核换装上游官方 v0.2.0,fork 阶段收尾:杜比视界 RPU 映射 / HDR tone-mapping、持久流预取、预取窗口封顶全部已在官方 release 内,钉点切回官方并固化哈希(Scripts/erika-v0.2.0.sha256)。
  • 修「播放越久内存越涨、关掉也不回落」:内核 stderr 解码缓冲因 Data 切片共享存储而无限增长(一条播放会话残留 60 MB+、24 分钟涨 200–400 MB),修复后工作集 ~128 MB 拉平、零增长。
  • 换页入场闪跳、横向滚动行翻页箭头误显示等一票 UI 修复。

网络与账号

  • 自定义 User-Agent:设置 → 网络,全局逐请求生效——部分 Emby/Jellyfin 服开了播放器白名单,把 UA 填成白名单内的播放器即可放行拉流。
  • Bangumi 登录改走 OcPlay 网关(见升级须知),客户端不再持有 OAuth 密钥;旧 secret 已进过构建产物,建议在 bgm.tv 轮换。
  • 弹幕网关侧的偶发 500(CF 包裹的未捕获异常)与 TLS 握手抖动纳入客户端重试集。

说明

  • 完整变更清单(含每条的踩坑记录与验证口径)见仓库 CHANGELOG.md 的 [0.2.0] 一节。
  • 内核下载哈希固化入仓,与 release 自带 SHA256SUMS 逐字节核对一致。
  • 仍待跟进(内核侧,上游 Erika):开播仍有约 3.8 秒花在 HEAD 探测上(部分源站对 HEAD 恒回 403),可再省。
  • 遗留已知问题:切分区时顶栏按钮组的整体换入换出是 NSToolbar 层重建,SwiftUI 无过渡钩子;详细日志开启时的内核 trace 建议仅在排障时使用。

OcPlayer v0.1.9 · 内核换装 v0.1.9+dolby.streaming.fix.dev——预取窗口封顶

Choose a tag to compare

@github-actions github-actions released this 21 Sep 16:54

OcPlayer v0.1.9 · 内核换装 v0.1.9+dolby.streaming.fix.dev——预取窗口封顶

下载

文件 平台 说明
OcPlayer-v0.1.9-macOS-arm64.dmg / .zip macOS(Apple Silicon) ad-hoc 签名,未经公证,首次打开可能有 Gatekeeper 提示
OcPlayer-v0.1.9-ios-unsigned.ipa iOS(iPhone / iPad) 未签名 IPA,需用 AltStore / Sideloadly / TrollStore 等工具重签安装
SHA256SUMS.txt / SHA256SUMS-ios.txt — 对应平台产物校验和

macOS 与 iOS 同用 fork 的 v0.1.9+dolby.streaming.fix.dev(commit 2c43702)——该 fork release 附全平台资产,两端不再分叉。产物内已写入 build 号与提交短哈希(关于页 v0.1.9 (Build N · 短哈希))。

本次改动

持久流预取的窗口不再无界——这是 0.1.8 里记下的待跟进项。

0.1.8 把按需读取从「每 4 MiB 一次有界请求」换成持久流 worker(每个 worker 持有一条开放式 GET bytes=锚点-,背压交给 TCP),公网慢源上的「播不动 / 卡死」随之解决。但那条链路留了个尾巴:worker 只从 reader 的 paused 标志得知「窗口满了」,而 reader 在包队列满时就不再刷新这个标志——于是快源上背压信号失效,worker 会一路把整个资源预取完(927 MB 的片源实测缓存到 659 MB)。表现就是播放期间进程内存随预取窗口持续增长:1.6 GB 的片源实测涨到约 1.3 GB、峰值 RSS 1415 MB,而 App 传给内核的预读 / 回退各只有 32 MiB。macOS 上只是内存偏高,iOS / tvOS 上有 jetsam 风险。

新内核(fork commit 85a9738)让每个 worker 按自己的生产偏移对绝对边界自我节流,不再依赖 reader 的刷新节奏,前向窗口因此真正封顶。

C ABI 无变化:erika.h 与上一版逐字节相同,ErikaOpenOptions 布局未动,App 侧零适配。杜比视界 RPU 映射与持久流预取本体未动,0.1.8 的慢源 A/B 口径(开播 13.2 秒、78.3 秒播放零卡顿、预取 stripe 中位 31ms)仍然成立。

说明

  • 上一版(0.1.8)的全部改动都在:Emby 全链路加固(解码契约与 Jellyfin 分家、片头片尾从章节 marker 翻译、4.10「接下来看」兜底、上报会话与 401 兜底)、详情页「媒体信息」区块、跳过片头/片尾设置开关、issue #3 / #4 / #5 的修复。
  • 内核下载哈希固化入仓(Scripts/erika-v0.1.9+dolby.streaming.fix.dev.sha256,与 release 自带 SHA256SUMS 逐字节核对一致)。
  • 仍待跟进:开播仍有约 3.8 秒花在 HEAD 探测上(内核先 HEAD、失败再回退一字节 range),可再省。

OcPlayer v0.1.7 · 弱网播放修复(issue #1)、日志系统重整、设置页重组

Choose a tag to compare

@github-actions github-actions released this 16 Sep 05:37

OcPlayer v0.1.7 · 弱网播放修复(issue #1)、日志系统重整、设置页重组

下载

文件 平台 说明
OcPlayer-v0.1.7-macOS-arm64.dmg / .zip macOS(Apple Silicon) ad-hoc 签名,未经公证,首次打开可能有 Gatekeeper 提示
OcPlayer-v0.1.7-ios-unsigned.ipa iOS(iPhone / iPad) 未签名 IPA,需用 AltStore / Sideloadly / TrollStore 等工具重签安装
SHA256SUMS.txt / SHA256SUMS-ios.txt — 对应平台产物校验和

macOS 与 iOS 首次同用 fork 的 v0.1.9+dolby.buffering.dev(commit 122be55:dolby.1 杜比管线 + 上游 PR #137 HTTP 分块预读)——该 fork release 附全平台资产,两端不再分叉。产物内已写入 build 号与提交短哈希(关于页 v0.1.7 (Build N · 短哈希))。

播放(本次核心)

  • 播到一半就停(GitHub issue #1)根治:根因是内核把整个预读窗口作为一次 HTTP 请求拉取,而单请求有 15 秒响应上限——32 MiB 档等于要求 ≈18 Mbps 持续带宽,低于门槛两次超时后播放直接被判死,只能手点「重试」。新内核改为 4 MiB 分块拉取:单请求封顶、超时续传、预读失败降级同步读(不再判死)、保留 16 MiB 已播尾巴供回退命中、媒体源原始错误透传到 demux 错误。节流压测(3 Mbps 测试片 + 32 MiB 档):700 KB/s 下 2 倍速播放(需求 750 KB/s 已超过供给)全程只缓冲、干净播到片尾;250 KB/s(需求 3 倍于供给,旧内核 open 阶段即死)约 3 分钟拖完整片,0 播放错误;片尾回退 10 秒零网络请求(尾巴缓存命中)。
  • 「缓冲时每半分钟画面暗一下亮一下」(issue #2):HUD 判据拆成「该不该唤出」与「能不能收起」,缓冲只续期、不再强制弹全屏暗幕 + 转圈 + 冻结弹幕;缓冲转圈自带暗底,任何画面下都看得见。
  • 设置页「网络预读缓冲」文案随新内核回落:档位不再对应成比例的带宽门槛(约 2 Mbps 即可稳定拉取),文案改为「数值越大越能抗带宽抖动,弱网下无需刻意调小,回退播放有 16 MiB 缓存兜底」。
  • 缓冲态加迟滞:单帧饿数据不再闪动控件,HUD、弹幕冻结、缓冲行都走同一套 300ms 进入 / 500ms 最短可见判定;诊断真值不受影响。

日志与诊断(排障基础)

  • 设置页「详细日志」开关 + 「导出诊断包…」:开关联动内核 HTTP/播放/HDR trace(下次播放生效),导出单个 .txt(版本/build/commit → 全部记录 → 内核 trace),一键发排障。
  • 播放生命周期事件行:open.start/open.done(first_frame/buffer.start-buffer.end/stall/seek/error/、session.end 汇总,按会话过滤得一次启动的完整时间线。
  • 内核 stderr 接进诊断管线(HDR 结构化事件、Rust panic、ffmpeg 告警此前完全丢失),原终端输出保留 tee。
  • 日志按会话分文件:一次启动一个文件、保留 10 个 / 总量 ≤50MB / 30 天,当前文件永不删;修复跨进程共写撕碎记录(O_APPEND)、维护误删正在写文件、测试污染真实日志目录三处。
  • 默认档精简:一次操作的结果与状态迁移默认可见,守卫与中间态留 debug。
  • 新增 Docs/LOGGING.md 与 Docs/TROUBLESHOOTING.md:级别规范、事件字段口径、症状 → 看哪几行 → 常用命令。

设置

  • 设置页重排为六组(通用 → 播放 → 弹幕 → 服务器 → 集成 → 维护),瘦身长文案;服务器管理抽出「管理服务器」子页;「退出 Jellyfin / 退出 MoviePilot」消除歧义。
  • 播放入口迁出设置页:首页工具栏「打开」菜单 + macOS 文件菜单(⌘O 本地文件、⇧⌘O 直连链接),任何分区下都能触发。
  • Bangumi / MoviePilot 集成开关:可整体停用(隐藏入口、停后台活动),凭据与配置保留。
  • 播放内核选择失效自愈:存的指向不存在内核的偏好启动时自动回退。
  • macOS 菜单栏中文化(系统语言为中文时)。

MoviePilot

  • token 过期不再甩原始 JSON、不再挂着无效「重试」:403 + MP 信封被误判为普通 forbidden,页面显示已登录但「重试」永远失败。现在错误体解析兼容信封、401/403 带 JWT 措辞一律走静默重登自愈;订阅/搜索错误态换成「登录状态已失效 / 重新登录」直弹登录窗。
  • 资源搜索筛选/排序对齐网页端(站点/促销/编码/质量/分辨率/制作组 chips 下拉),结果懒加载(60 条一窗),从「被搜索引擎拖慢全表」到滚动即续。

弹幕

  • 偏移非零时弹幕整集消失(清屏死循环):seek 检测与重同步的时基混用,偏移 ≠0 时每拍误判成 seek 永久清屏;检测逻辑抽成单时基纯值类型,调偏移修对齐不再弄没弹幕。
  • AniSkip 社区标注第四路片头数据源(MediaSegments > AniSkip > 弹幕推导 > 章节启发式),MAL ID 解析永久缓存;弹幕网关瞬断自动重试(3 次 + 403 独立语义);弹幕匹配新增四级瀑布降级检索。

其它修复

  • Bangumi 集成开关读取吃掉默认值(全新安装自动标记静默关闭)→ bool(forKey:default:);Bangumi 搜索 filter.type 数组编码(400「请求参数有误」)。
  • 章节 / MediaSegments 链路时序竞态静默失效(Jellyfin / Emby 的章节列表与片头片尾识别首次真正可用)。
  • 液态玻璃文字/图标动态颜色:HUD 外玻璃元素改跟随玻璃明暗自动翻转,亮场面不再白字隐形;iOS 横滑 seek 预览条加实底背板。

维护

  • 内核来源、脚本与 CI 文档同步:新 release 附全平台资产,Scripts/erika-v0.1.9+dolby.buffering.dev.sha256 固定哈希入库。
  • 测试:AppTests 176 例、SwiftPM 各包 395 例(ErikaReadAheadBehaviorTests 断言适配分块内核:单请求 ≤4 MiB 封顶为回归守卫,支持 ERIKA_READAHEAD_TEST_MEDIA 指定本地大文件验证)。CI test 工作流已在 main 上全绿。

OcPlayer v0.1.6

Choose a tag to compare

@github-actions github-actions released this 11 Sep 10:50

OcPlayer v0.1.6 · 前端组件化重构、HUD修复、液态玻璃与内核支持杜比映射 v0.1.9

下载

文件 平台 说明
OcPlayer-v0.1.6-macOS-arm64.dmg / .zip macOS(Apple Silicon) ad-hoc 签名,未经公证,首次打开可能有 Gatekeeper 提示
OcPlayer-v0.1.6-ios-unsigned.ipa iOS(iPhone / iPad) 未签名 IPA,需用 AltStore / Sideloadly / TrollStore 等工具重签安装
SHA256SUMS.txt / SHA256SUMS-ios.txt — 对应平台产物校验和

macOS 端内核为 fork 的 v0.1.9+dolby.1(上游 v0.1.9 + libplacebo 风格杜比视界 RPU 映射),iOS 端为最近一次全平台 tag v0.1.7+dolby.3;两端与测试门禁同源。产物内已写入 build 号与提交短哈希(关于页 v0.1.6 (Build N · 短哈希))。

播放

  • HDR 片首次真出 EDR:此前 headroom 恒传 Auto + 0,HDR 内容一直被映射成 SDR(播放详情的「映射 SDR」标注只是让它显形)。现在创建引擎时按窗口所在屏的 EDR 能力喂给内核(SDR 屏行为不变,XDR 屏真出 EDR),并跟随换屏/显示配置变化重报。限制:播放中换屏的运行时切换要等内核 Metal 后端实现 set_output_headroom,当前只在创建时生效。
  • 内核升级到 v0.1.9+dolby.1:渲染阻塞恢复后的音画时钟重校准、倍速切换平滑过渡、iOS 前台/音频中断恢复、首条音轨解码失败自动回退后续音轨、弹幕跨规划窗口重现跳轨等上游 0.1.8/0.1.9 修复。
  • HUD 液态玻璃(Infuse 风格):右下角五个功能入口融合成玻璃胶囊,点开的按钮整体液态形变为「行 + 子菜单」面板;播放信息与播放统计合并为一个分区面板;HUD 自动隐藏时一并藏鼠标光标;展开面板高度随内容收缩、跳过钮让位到面板上方且不再打断展开动画。
  • macOS 26 全屏顶栏衔接层:系统全屏工具栏的硬底条带与氛围图之间加渐隐衔接,氛围图不再被拦腰截断。
  • 稳定性:弱网下 open 卡死主线程已修(后台 open + 让位契约 + 60s 看门狗,取消按钮即点即生效);关闭播放器不再闪现占位图;续播起播不再爆一大片过期弹幕;2s 阈值内的前向 seek 不再把窗口内弹幕一帧喷完;截图不再冻结界面(编码与写盘下主线程);弹幕装载的解码与排序移出主线程(三万条不再在起播窗口卡 100–400ms)。

界面

  • 整窗氛围背景:详情页海报/标题/元数据直接浮在模糊 backdrop 上,首页库内随机轮播;氛围图垫在整块 split view 后面,侧栏玻璃与顶部工具栏透出同一张连续背景(iPad 头部顶距抬到玻璃按钮与滚动模糊带之下)。
  • 媒体库每库排序与观看状态筛选:工具栏「排序与筛选」三组单选——字段(名称 / 最近添加 / 年份 / 评分 / 时长 / 随机,带图标与对勾)、顺序、观看状态(全部 / 没看过 / 看过);完全服务端生效,候选集按库类型收敛,按库独立记忆。
  • 设置 → 服务器可指定「启动时默认服务器」:「上次使用的服务器」保持旧行为;选定具体档案后启动静默恢复优先走它,token 失效仍回退其它可用档案。
  • 最低系统要求 macOS 26 / iOS 26(HUD 改用系统原生 glassEffect)。
  • 关于页显示 v版本 (Build N · 短哈希),启动诊断日志与产物命名同样带 build 与 commit,可追溯到提交。

MoviePilot

  • 资源搜索筛选排序对齐网页端:排序(字段 + 升降序)与七组筛选(站点 / 季 / 促销 / 编码 / 质量 / 分辨率 / 制作组)平铺一行,原生液态玻璃 chips 下拉(全选 / 清除、可多选、即时生效),已选以 chip 汇总可逐个移除;搜索结果懒加载,60 条一窗触底续载。
  • 订阅字段可清空:清空「自定义存储路径 / TMDB / Bangumi / 豆瓣 ID / 海报 / 简介」保存后不再回填旧值(成对键同进同出)。
  • 「保存并登录」失败不再毁掉已有会话:错误凭据只作尝试、失败回滚(含旧 token),点「取消」也能保住原会话;含空格的密码不再被静默 trim 导致登录永远失败。

弹幕

  • 匹配成功率提升:isMatched == false 的模糊候选按集数/季度/标题打分救回;四级降级检索(Hash → TMDB ID → 标题+集数 → 提纯标题);文件名解析支持中文数字、全角半角、剥离发布组与压制参数噪声(01.mkv 与单播目录也能推出番剧名)。
  • 网关瞬断自动重试:3 次指数退避(429 尊重 Retry-After),编排层遇网关级错误短路剩余降级层;403 独立文案;网关挂掉不再误报「未匹配到剧集」。
  • 匹配失败与时间轴问题的诊断日志开关(设置 → 弹幕 → 诊断日志)。

Bangumi

  • 播放结束自动标记后,详情页章节格子立即刷新为「已看」。
  • 瞬时网络抖动不再把条目清出「在看」、已看进度与评分不再归零(单条回读不再按 interest == nil 清空本地收藏)。
  • 修复带类型过滤的搜索返回「请求参数有误」400(filter.type 编码为正确数组形态)。

工程

  • 前端组件化重构(阶段 0-4):设计系统(动效/尺寸 token、骨架屏、卡片原语、横向滚动、液态玻璃、远程图管道)下沉为新包 AppDesignKit;卡片/胶囊/分页/空态收敛到共享原语;状态层改显式依赖注入、DetailView 数据面抽 DetailViewModel;HTTPClient/RetryPolicy 共享执行层落 DiagnosticsKit。App 层净减约 1000 行,纯重构、无行为变化。

Full Changelog: v0.1.5...v0.1.6

OcPlayer v0.1.5 · Emby 适配、iOS 安装包与自编译预读内核

Choose a tag to compare

@github-actions github-actions released this 30 Aug 10:22

OcPlayer v0.1.5 · Emby 适配、iOS 安装包与自编译预读内核

不换内核了!!继续用Erika!

下载

文件 平台 说明
OcPlayer-v0.1.5-macOS-arm64.dmg / .zip macOS(Apple Silicon) 与往版相同
OcPlayer-v0.1.5-ios-unsigned.ipa iOS(iPhone / iPad) 首次提供。未签名 IPA,需用 AltStore / Sideloadly / TrollStore 等工具重签安装
SHA256SUMS.txt / SHA256SUMS-ios.txt — 对应平台产物校验和

iOS 包已在 iPhone 与 iPad 真机验证通过。macOS 与 iOS 包构建自同一份自编译 Erika 内核(v0.1.7+readahead.1,下载哈希已固化入仓),并通过同一测试门禁。

新增 Emby 服务器适配

  • 登录流程探活时自动识别服务器类型(ProductName 含 Emby / 主版本 4.x)。Emby 走 /emby API 前缀与老式路由,账号密码登录、浏览、播放、图片、字幕、播放上报全链路可用;服务器卡片显示所属类型(Jellyfin / Emby)。
  • Emby 没有 Quick Connect(Jellyfin 独有),登录页在 Emby 服务器上只显示账号密码表单;Emby 老版本密码错误返回 400 时也归入「账号密码不对」提示。
  • ServerProfile 新增 kind 字段;旧版本落盘的档案无此字段时解码默认 Jellyfin,静默恢复不受影响。

Emby 真机联调中修复的兼容问题:

  • 标记已看失败:/UserPlayedItems/{id} 是 Jellyfin 新式路由,Emby 上 404。改走老式 /Users/{uid}/PlayedItems/{id},详情页「标记已看」恢复可用。
  • MediaSegments 404 日志噪音:该端点是 Jellyfin 插件提供的,Emby 没有,现在跳过并直接回退章节启发式。
  • 外挂字幕下载 404:多版本条目(同一影片挂多个 MediaSource)时路由第二段硬编码错误,现透传真实 MediaSource id。
  • 章节与条目详情解码失败:Emby 响应洗白规则误伤顶层 Type 字段导致 SDK 解码报错、章节列表拉取失败,改为按 MediaSources 子树精确处理,并补真实机场景回归测试。

多服务器记忆与快速切换

  • 登录页新增「已保存的服务器」区块,token 还在的一键重连。
  • 设置页「服务器」区块列出其余已保存的服务器,支持就地切换和删除(删除连 token 一起清,有确认弹窗)。
  • 登出不再等于遗忘:档案持续保留,来回切服务器不用重新输地址。
  • 启动恢复更聪明:当前服务器 token 失效时自动尝试其它有有效 token 的档案,而不是直接弹登录页。

iOS

  • 首次提供 iOS 安装包(未签名 IPA,见下载说明),iPhone 与 iPad 真机验证通过。
  • 播放画面手势:长按 2 倍速(HUD 独立「▶▶ 2.0x」徽章,不唤醒面板)、横滑 seek(独立进度条)、纵滑调节亮度/音量;手势收敛为单一状态机,双击暂停不再被吞,多指不再误触发,切后台/来电自动收尾。
  • 打开播放器自动转横屏;iPad 浏览态跟随重力旋转,不再锁竖屏;iPhone 首页横向卡片收紧、详情页紧凑重设计、海报上下渐变适配全端。
  • iOS 测试链路修复(测试 target 改为零产品依赖 + BUNDLE_LOADER、Archive 链接失败修复)。

播放内核(Erika)

  • 网络预读缓冲可调:设置 → 播放 新增「网络预读缓冲」(默认 2 MiB / 8 / 16 / 32 MiB)。公网高延迟服务器(远程 Emby 等)建议 16 MiB 以上,可显著减少播放中的反复缓冲。基于自编译 Erika 内核新增的 erika_presenter_open_with_options C API(fork 分支 feat/http-readahead-option,已提上游),逐请求生效,本地文件自动忽略。
  • 发版内核下载哈希固化入仓(Scripts/erika-v0.1.7+readahead.1.sha256),构建时可复验。
  • 修复内核拉取脚本 zip-slip 防护对绝对路径归档必然误报的问题(会让全新 CI 环境无法拉取内核)。

应用内更新

  • 关于区显示版本号,可手动检查 GitHub Release 更新;应用启动与进入设置页时静默检查,发现新版本自动弹窗,支持「忽略此版本」。

其他新功能与优化

  • Jellyfin Clear Logo:媒体库与详情页支持服务器提供的透明 logo 展示。
  • Bangumi:播放结束自动标记已看时先把条目推进为「在看」;番剧候选打分算法多维度优化并与剧集季信息联动。

播放器修正

  • 弹幕颜色为负数时先夹紧再转换,修复内核 trap 崩溃(P0)。
  • seek 不再越过片长;内核重复错误事件去重。
  • 保底跳过片尾记入会话,按钮不再原地循环。
  • 弹幕「时间偏移」按 overlay 数据显隐;暂停态下弹幕恢复逻辑不再被误触发。
  • 音量落盘 300ms 尾去抖并在停止收口补写,消除丢失窗口;2x 临时倍速不再持久化。

稳定性与性能

  • 播放停止后 malloc pressure relief 四拍调度(+2/+25/+60/+120s),进程占用回落更快。
  • 图片加载修复:悬停闪烁(认证头字典序抖动致缓存键漂移)与全量图片不加载回归(RemoteImage 复合键守卫)。
  • 详情页横幅渐变被裁剪的回归修复(图片层定高钳制)。
  • Bangumi 数据库换 DatabasePool(WAL 多连接并发);弹幕网关响应单遍解码、mapping 内存缓存;overlay 采样 Timer 频率自适应;Erika idle 帧率档。
  • 网络健壮性:429 读取 Retry-After、退避加抖动、鉴权 401 发通知引导重登、用户取消原样透传、MoviePilot 静默重登加看门狗与熔断。

工程与质量

  • 2026-08-29 全项目 review(161 条发现)处置完毕:P0–P3 全部收官,覆盖并发、网络、性能、构建与 UI 细节(报告入库 Reports/review-20260829.md)。
  • 发版流水线:tag 构建必过全量测试门禁;Erika 环境准备抽为 composite action;SwiftPM 构建加缓存;MARKETING_VERSION 收敛 App.xcconfig 单源。

补记:随 0.1.4 附带但当时说明未展开

以下功能已包含在 0.1.4 的安装包中,当时发布说明过于简略,在此补记:

  • Bangumi 全套:OAuth 登录、进度管理、个人主页、收藏列表、番剧日历、播放联动(看完整季自动推进条目状态)。
  • MoviePilot 全套:设置页登录、找片下载(搜索 → 选种 → 下载)、订阅管理。
  • 播放器章节列表与片头片尾/末 90 秒跳过;弹幕手动搜索选集与 HUD 弹幕菜单。

Full Changelog: v0.1.4...v0.1.5

OcPlayer v0.1.4

Choose a tag to compare

@github-actions github-actions released this 24 Aug 19:30

OcPlayer v0.1.3

Choose a tag to compare

@github-actions github-actions released this 20 Aug 10:42

OcPlayer v0.1.1

Choose a tag to compare

@github-actions github-actions released this 18 Aug 10:28

Full Changelog: v0.1.0...v0.1.1