361 words
2 minutes
记录一次PiliPlus PR贡献
2026-09-10
PiliPlus
PiliPlus
问题原因
部分特定视频,如:BV1bW411P7k9 可以发现上述视频有1080P 60帧画质,但是实际无法播放。
对源码进行分析,发现播放器请求未强制指定 qn,会静默回退到 80。因此无法获取高画质1080P 60帧画质。
播放接口返回的 support_formats 只是服务端声明的画质列表,真正可播放的画质应以 dash.video 中的实际流为准。
部分视频会根据请求的 qn 分批返回视频流。例如 BV1bW411P7k9:
- 请求高画质时,
support_formats包含 116/80/64/32/16,但dash.video仅返回 116。 - 请求 80 时,
dash.video才返回 80/64/32/16。

修复内容
- 将
VideoHttp.videoUrl的qn改为必传参数,避免隐式回退。 - 首次请求显式请求高画质流。
- 使用
dash.video中的实际画质 ID 判断画质是否可用。 - 当高画质响应缺少低画质流时:
- 仅额外请求一次缺失画质;
- 合并并去重两个响应中的视频流。
- 播放和下载均只从实际存在的 DASH 流中选择画质。
- 对空视频流增加保护,避免后续
first等操作抛出异常。 - 使用
try/finally确保请求结束后恢复isQuerying状态。 - 修正播放器内及详情页画质菜单的可用状态判断。
总结
这或许是b站陈年代码所遗留的屎山,具体是什么原因导致的就无从得知了。
Link: PR #2828
记录一次PiliPlus PR贡献
https://arisaka.eth.limo/posts/piliplus/
Provenance
- ENS Contenthash
- Resolving…
- Article File TX
- Resolving…
- Content Digest
- Resolving…
- Source Version
- Resolving…
Comments