Bilibili直播自动追帧

自动追帧bilibili直播至设定的buffer length

Auteur
c_b
Installations quotidiennes
1
Installations (total)
3 552
Notes
15 2 2
Version
0.7.6
Créé
30/10/2022
Mis à jour
23/08/2024
Licence
GPLv3 License
S'applique à

Bilibili直播自动追帧


如果脚本突然失效,请首先检查脚本列表中的名称是否显示为灰色,以及浏览器扩展中是否开启开发者模式

https://greasyfork.org/zh-CN/scripts/453967

从0.4.2版本更新时建议删除脚本后重新安装

在启用“强制原画”且该选项有效(不为灰色)时,可能会在主播卡顿/重启推流后一直重复最后几秒。此时需取消该选项后切换一次画质或刷新

主要功能

对bilibili的直播进行追帧以实现低延迟的直播播放,从而提供近乎实时的弹幕互动、或是用于同传追帧等

脚本加载后,会在直播界面右上方粉丝团处生成配置项,可以根据网络情况设定追帧的目标缓冲时长

小样本测试下原画的HLS(fMp4)和二压的flv相比延迟仍较高,建议优先使用HTTP-FLV协议的推流。可以从这里安装脚本检查当前播放的直播流为原画还是二压(显示的码率为名义码率/上限码率,真实码率需根据网速估测): https://greasyfork.org/zh-CN/scripts/443043

次要功能

  • 0.7.4
    • 添加清空重置所有配置项的按钮
  • 0.6.18
  • 0.6.16
    • 为活动页面的直播间添加按钮,跳转至非活动外观的普通直播间
  • 0.6.12
    • 在高级设置中可以开关降低播放速度和设置降低播放速度的缓冲阈值
  • 0.6.6
    • 自定义API:可以自定义获取playurl所用的API endpoint:#1
  • 0.6.4
    • 添加收起和展开追帧设置的按钮
  • 0.6.3
    • 重置音画同步:让音视频重新定位来尝试重置音视频的不同步,并提供定时自动重置
  • 0.6.2
    • 设置链接:支持直接使用完整的直播流flv链接,如使用B站录播姬日志中的“直播流地址”。 streamlink example
  • 0.5.6
    • 自动刷新:(添加行为)在下播期间检测到弹幕一直无变化,且开启了“阻止轮播”时,自动刷新网页
  • 0.5.3
    • 自动原画:自动选择最高画质
    • 避免暂停:自动恢复暂停的直播流为播放状态,避免因暂停导致直播流重新加载
    • 强制原画/复制链接/设置链接:当前B站直播已经会对“原画”进行二压,开播约10秒-1分钟后获取的“原画”均为不高于6Mbps的二压推流,会额外产生2-3秒量级的延迟。刚开播时可以获取live_000000_0000.flv链接格式的真实原画推流,而之后的“原画”只能获取live_000000_0000_bluray.flv链接格式的二压推流
      新添加的功能可以缓存开播时获取的真实原画链接(有效期1小时,但不刷新可一直使用),并拦截浏览器的请求,避免浏览器使用二压推流。如果开播前没有开启浏览器直播间,则可以通过“设置链接”来添加有效的原画链接信息(示例其他示例
    • 阻止轮播:自动阻止直播间轮播,方便提前开启直播间页面待机,以获取原画推流降低延迟
  • 0.4.2
    • 强制avc+flv:强制采用HTTP-FLV协议,并使用H264(AVC)码流,从而避免HLS协议/H265(HEVC)转码带来的额外延迟
    • 自动刷新:(未充分测试)直播期间检测到直播间连接失败信息时、下播状态下主播开播后没有自动开始播放直播时(每3分钟检测一次,推测是和弹幕服务器连接断开导致),自动刷新网页
    • 缓冲时长极低时降低播放速度

选项配置说明

基础选项

  • 重置音画同步:重新从当前的位置开始播放直播来重置音视频的同步,以应对音视频的不同步。重置时会有一瞬的卡顿。勾选后自动每隔一段时间执行一次重置,重置间隔可以在高级选项中设置
  • 隐藏统计:隐藏播放器右键菜单中的“视频统计信息”悬浮窗,悬浮窗未开启时会自动取消勾选
  • 避免暂停:当检测到播放器暂停,且缓冲长度超过“追帧秒数”时,自动恢复播放器播放,以免误暂停过久导致视频流连接断开,播放器重新获取延迟更高的二压流
  • 自动刷新:直播状态下,检测到错误时自动刷新页面。或在下播状态下,弹幕服务器疑似断连时(检测到已开播但没有自动加载,或是弹幕栏一直没有新弹幕),自动刷新页面。刷新页面前文字会变为橙色。如果没有勾选“阻止轮播”,则不会在弹幕栏没有新弹幕时刷新
  • 强制flv+avc:尝试去除视频流中的HEVC/H265(“PRO”画质)和HLS流,让播放器优先使用FLV协议的AVC/H264流,以降低延迟
  • 强制原画:当获取的直播视频流为延迟更高的二压视频时,尝试替换为保存的原画流,以降低延迟。当前直播间没有保存原画流/原画流已过期时,选择框为灰色。主播网络卡顿/重开推流后可能出现一直重复最后几秒的情况,需取消该选项后切换一次画质或刷新,改用新推的二压流
  • 自动原画:进入直播间时自动切换右下角的“原画”画质。和手动切换效果相同
  • 阻止轮播:阻止直播间进行轮播
  • 追帧秒数:本地播放器追帧的目标缓冲长度,单位为秒。播放器缓冲的长度1:1等于播放器产生的延迟,但过小容易导致卡顿甚至丢失原画的连接。需根据自己的网络情况选择合适的值。可在高级选项中关闭追帧加速功能

高级选项

  • 清空配置:清空重置追帧脚本的所有配置(包括缓存的原画链接)并立刻刷新页面
  • 复制推流链接:复制当前直播间保存的原画流链接到剪贴板,可用于“设置连接”。
  • 设置连接:手动设置当前直播间保存的原画流链接,用于“强制原画”选项让播放器加载延迟更低的原画流。错误的配置可能导致无法正常观看直播!
  • 设置视频流API:设置获取视频流链接的API,详见#1。使用后可能无法观看各种限定直播!错误的配置可能导致无法正常观看直播!
  • 设置加速阈值:设置缓冲时长超过追帧秒数时,缓冲长度和追帧秒数的差值的各级阶梯阈值,以及各级阶梯要加快到的播放速度。错误的配置可能导致播放不正常!
  • 追帧加速:追帧加速的开关。取消勾选后将不会在缓冲时长超过追帧秒数时自动加速追帧
  • 设置减速阈值:设置缓冲时长极低时,降低播放速度的各级阶梯的缓冲时长阈值,以及各级阶梯要降低到的播放速度。错误的配置可能导致播放不正常!
  • 自动减速:取消勾选后将不会在缓冲时长降低至减速阈值后自动降低播放速度
  • 音画同步重置步进:重置音画同步时,重新开始位置相对现在的秒数,合适的值可以减轻重置时的卡顿感
  • (音画同步重置)间隔:勾选“重置音画同步”后,自动进行音画同步重置的间隔时长,单位为秒

需求和问题反馈

可以通过B站联系我,但修不修看我个人兴趣。建议直接自己动手更快

原理

简单的说,实时的视频流直播不可避免的会有网络波动的问题,因而画质稳定性延迟只能三选二。 对于直播平台这种面向多数人的内容的直播,一般会优先画质和稳定性,即保持良好画质的同时,尽可能保证播放的流畅,避免频繁的卡顿加载影响体验。

所以在实际播放直播的视频推流的时候,播放器并不是立刻播放从服务器收到的视频流,而是会在本地缓冲4-20秒的时长。这样即便有网络波动,只要波动在缓冲时长的范围内,对于用户而言就是无感的,从而可以保证大部分环境下的流畅的直播观看体验。但是其代价则是视频流必须经过数秒的缓冲才会播放,这就给直播的播放带来了等同于缓冲时长的延迟。而事实上网络稳定时,绝大部分的延迟都是在本地缓冲产生的。

追帧脚本则是通过HTML5播放器的HTMLMediaElement.playbackRate API来控制播放的速率,在缓冲过长时加速播放,提前播放视频流消耗本地缓冲,从而减少由于本地缓冲带来的延迟。换言之,就是放弃播放的稳定性,来换取播放的低延迟。事实上使用稳定的PC网络播放直播时,出现大幅波动的情况并不多,即便相对激进地设置1.0-1.5秒的延迟,也能大部分时间获得流畅的直播。并且由于追帧后的低延迟,发送的弹幕几乎可以同步地出现在画面的弹幕机上,直播的交互体验可以大幅地提升。

在bilibili直播中常见的同传,其基础也是各自采用的追帧工具。通过追帧,同传man可以实现远低于一般观众的本地延迟,相同的内容可以比一般观众早4-10秒看到。这个延迟的时间差构成了同传的基础,即只要同传man在这4-10秒内完成打字翻译,那么在其他观众看来,同传弹幕就是和主播的语音同时、甚至更早出现的。

对追帧在同传中应用的讨论可以参考我的这篇专栏:简述追帧的原理和追帧在直播同传的中的使用