新增
-
高级弹幕。 采用定位与运动脚本的弹幕(模式 7)此前被整条丢弃,现按其自带的坐标、关键帧、透明度与旋转绘制。这类弹幕的位置由发送者写定,因此独立于滚动弹幕的轨道分配之外,也不受显示区域约束。代码弹幕与 BAS 弹幕仍不支持,其内容是可执行脚本。
-
弹幕的显示区域、同屏密度与帧率可调。 三项此前均为代码常量,无从更改。显示区域分 25% / 50% / 75% / 100% 四档,默认 75%;同屏密度分标准与不限两档,后者不再因轨道排满而丢弃弹幕;帧率分 30 fps、60 fps 与跟随屏幕。
-
动态流保留浏览位置。 进入动态流时直接呈现上次抓取的内容,上次读到之处标出分隔线,随后在后台核对更新并将新条目并入顶部。
变化
-
弹幕速度改为统一穿屏时长。 此前字宽翻倍仅加速约 14%,长弹幕在屏时间明显长于短弹幕。现所有滚动弹幕在相同时长内完成穿屏,长弹幕相应更快。
-
显示区域改为实际的布局与裁剪范围。 此前该比例只参与轨道数计算,画布仍覆盖整个画面。现滚动与顶部弹幕在该范围内排布并裁剪,底部弹幕仍锚定画面底缘——位于画面四分之三处的弹幕不再是底部弹幕。
-
打开视频后不再等待播放列表构建完成。 此前需先取回视频详情,再于空间投稿中定位当前视频,取流被这些请求阻塞。现立即以当前视频起播,完整队列在后台补全后按 bvid 原位替换,补全期间队列区显示加载状态。
-
30 fps 与 60 fps 档在非整数倍刷新率的屏幕上恢复到目标帧率。 此前的节拍以上一帧的实际输出时刻为起点,取整误差逐帧累加,144 Hz 屏上的 60 fps 实际约为 48 fps,90 Hz 约 45 fps,165 Hz 约 55 fps。
修复
-
UP 主空间的投稿列表可能整页缺失。 服务端返回空页时游标照常前进,而「还有更多」的判定不变,该页内容此后不再被请求。若第一页遇上,最新的 30 条投稿不再出现,且无任何错误提示。从播放页进入老视频的 UP 主空间时最易触发:为老视频建立播放列表会在一秒内对同一接口发起多次请求。
-
弹幕分段取回失败后不再重试。 段号在请求发起前登记、失败后不移除,该段此后永久为空;而「该段无人发送弹幕」与「该段未取回」在返回类型上无从区分。现两者分开,失败的分段可在限定次数内重取。
-
连播切换分集时残留上一条视频的内容。 播放页此前按 bvid 选取 ViewModel,而切集不进入返回栈,旧实例不被回收,其数据仍在推送。表现为切集瞬间可见上一条的画面、标题或评论,连续播放时内存亦持续增长。
性能
以 120 Hz 设备、不限密度、同屏 320 条弹幕实测:
- 帧耗时中位数由 14 ms 降至 9 ms,掉帧比例由 9.65% 降至 2.08%。
- 弹幕排布改为仅编排播放位置附近的时间窗口。9457 条弹幕的视频上,一次编排由 347 ms 降至 28 ms;仅画面尺寸变化时由 17 ms 降至 1 ms。
- 绘制帧不再测量文字:排版预先备好,描边与填充录入 display list,每帧只做位移与提交。
安装
universal 为通用包;arm64-v8a、armeabi-v7a、x86_64 为对应架构的精简包,体积略小。四者为同一版本的不同打包,架构不匹配时无法安装。
校验
APK 由 GitHub Actions 从本 tag 构建并签名。
- 校验和:
SHA256SUMS.txt - 构建来源:
gh attestation verify <文件> --repo NihilDigit/bilby
mapping.txt 用于还原崩溃堆栈。