播放器追帧
进入直播间时自动切换最高画质,并通过实时微调播放速度追上直播实时位置,减少观看延迟
LAPLACE Chatterbox 内置「自动画质」与「自动追帧」两项播放器辅助能力,可帮助观众在进入直播间时自动切换到最高画质,并通过实时微调播放速度让缓冲始终保持在指定的目标延迟附近,从而最大限度地缩短观看延迟
两项功能均基于事件驱动实现,未启用时几乎无任何运行开销;同时支持普通视频流与仅音频模式
追帧与画质切换的核心算法参考自 c-basalt 的 Bilibili 直播自动追帧
用户脚本(GPL-3.0),LAPLACE Chatterbox
在其基础上改为事件驱动实现,不再依赖定时轮询
自动画质
特性
- 在进入直播间、原生播放器初始化完成的瞬间调用一次
livePlayer.switchQuality(),将画质切换至当前房间可用的最高档位 - 通过监听
#live-player video的挂载事件触发,而非轮询,未开播或不存在的房间不会产生额外开销 - 仅在页面加载时执行一次,之后用户手动选择的清晰度(如切回 720P 省流量)会被完整保留
- 自动嗅探
qualityCandidates中可用的最大qn值,自动适配未来哔哩哔哩新增的更高画质档位(如 HBR 高码率qn=30000) - 启用仅音频模式时自动跳过,避免与仅音频的
stopPlayback守护机制相互冲突
使用方法
- 在弹幕助手面板的「设置」选项卡中,找到「播放器追帧」区域
- 勾选「进入直播间时自动切换到最高画质」
- 下次进入任意直播间时自动生效,无需手动操作
注意事项
- 切换至最高画质会增加带宽消耗,移动网络或流量受限场景请按需启用
- 切换发生在页面加载后的极短时间内,可能会观察到画质从默认档位瞬间跳变至最高档
- 仅在页面加载阶段执行一次,若开播中途切换房间或手动改回低画质,本次会话内不会再次自动切换
自动追帧
直播延迟主要由播放器缓冲区累积造成。自动追帧通过实时监测缓冲区长度,在缓冲过多时小幅提高播放速度(最高 1.3 倍),在缓冲过少时降低播放速度(最低 0.1 倍)避免卡顿,从而让缓冲长度稳定在用户设定的「目标延迟」附近
特性
- 事件驱动:监听播放器原生
progress/waiting/timeupdate/playing事件触发调整,无setInterval轮询,未启用或页面处于后台时几乎不消耗任何资源 - 后台不调速:检测到
document.hidden时暂停所有播放速度调整,切回前台后自动重新同步 - 加速 / 减速阶梯:参考 c-basalt 上游的实测数值
- 加速阶梯(缓冲长度超出目标的秒数 → 速度倍率):
[+2s, 1.3×]/[+1s, 1.2×]/[+0s, 1.1×] - 减速阶梯(缓冲长度绝对值 → 速度倍率):
[0.2s, 0.1×]/[0.3s, 0.3×]/[0.6s, 0.6×]
- 加速阶梯(缓冲长度超出目标的秒数 → 速度倍率):
- 支持仅音频:自动检测当前是否处于仅音频模式,对隐藏的
<audio>元素同样生效,逻辑完全一致 - 自动重新绑定:哔哩哔哩在画质切换、仅音频开关、流地址刷新等场景会替换
<video>/<audio>元素,本功能通过MutationObserver自动重新挂载监听 - 实时状态面板:启用后在设置面板中显示「当前延迟」「目标延迟」「当前播放速度」,并以颜色提示当前缓冲健康度(绿色 = 健康,黄色 = 正在追赶,红色 = 即将卡顿)
使用方法
- 在弹幕助手面板的「设置」选项卡中,找到「播放器追帧」区域
- 勾选「启用自动追帧」
- 在「目标延迟」输入框中设置希望维持的缓冲长度(秒),默认 1.7 秒
- 启用后下方会出现实时状态面板,便于实时观察追帧效果
选项说明
| 选项 | 说明 | 默认值 |
|---|---|---|
| 启用自动追帧 | 主开关,关闭后停止所有播放速度调整 | 关 |
| 目标延迟(秒) | 期望维持的缓冲长度,缓冲超过此值会加速、低于此值会减速;可输入范围 0.3 ~ 10 秒 | 1.7 |
目标延迟过低(如低于 1 秒)容易在网络波动时频繁卡顿,过高则失去追帧意义。建议保持默认值或在 1.5 ~ 2 秒区间微调
状态面板
启用自动追帧后,设置面板中会显示如下实时数据:
| 字段 | 含义 |
|---|---|
| 当前延迟 | 当前缓冲区中已加载但尚未播放的内容长度(秒) |
| 目标延迟 | 用户设定的目标缓冲长度(秒) |
| 差 | 当前延迟与目标延迟的差值,正值表示缓冲过多正在追赶,负值表示缓冲过少正在减速 |
| 当前播放速度 | 播放器当前的实际倍速,正常值为 1.00× |
颜色提示:
- 🟢 绿色:缓冲在目标值附近(差值约 ±0.5 秒),运行健康
- 🟡 黄色:缓冲明显高于目标(差值 > 1 秒),正在以更高倍速追赶
- 🔴 红色:缓冲低于 0.2 秒,即将卡顿;或播放速度低于 1.0× 正在减速
注意事项
- 自动追帧通过修改
playbackRate实现,可能导致音频音调出现极轻微变化,绝大多数场景下不易察觉 - 若直播间网络极不稳定,建议适当提高目标延迟以减少减速触发的频率