Skip to content

feat: cdn prefs - #666

Open
s-kk wants to merge 1 commit into
xfangfang:devfrom
s-kk:yoga
Open

feat: cdn prefs#666
s-kk wants to merge 1 commit into
xfangfang:devfrom
s-kk:yoga

Conversation

@s-kk

@s-kk s-kk commented Jul 29, 2026

Copy link
Copy Markdown

视频 / 直播播放的 CDN 优化

Make Bilibili Great Than Ever Before (src/utils/get-cdn-url.tssrc/modules/enhance-live.ts) 中的 CDN 优化逻辑移植到 wiliwili。

B 站 playurl 响应中混杂着官方 CDN 镜像与 P2P/PCDN 节点。P2P 节点速度慢、限速, 还会占用用户上行带宽。

此前 wiliwili 直接原样使用服务端返回的 base_url:

  • player_base_activity.cpp:onVideoPlayUrl 直接把 v.base_url 传给 setUrl(),backup_url 仅作为 mpv 播放列表回退,不检查主机。
  • FLV/durl 路径完全忽略 durl[].backup_url
  • live_player_activity.cpp 只用第一个 url_info,留有 todo: 允许使用备用链接。

移植内容

URL 分类(CDNHelper::classify)

类型 匹配规则
MIRROR upos-<region>-<node> / upos-tf-* / proxy-tf-*,域名为 bilivideo.{com,net}akamaized.{com,net},路径含 /upgcxcode/
BCACHE 其他 /upgcxcode/ host (B 站自建 PoP,如 cn-sccd-cu-01-01.bilivideo.com)
P2P_UPGCXCODE P2P 主机上的 /upgcxcode/ URL, 签名在 path+query 中仍可复用,只有主机不可用
MCDN_TF 裸 IPv4 或 *.mcdn.bilivideo.{com,cn,net},路径为 /v<N>/resource
SZBDYD 已废弃的 szbdyd.com CDN

P2P 判定利用了脚本里的规则: 关键字列表(302ppio302kodo.mcdn.bilivideoszbdyd.com.nexusedgeio.com.ahdohpiechei.com, 以及证书签给 *.bilivideo.cn 的黑名单条目 upos-sz-mirror14b.bilivideo.com)、"首段子域名含 302"启发式、以及对带 os=mcdn 参数的官方镜像的降级。

排序阶梯 (CDNHelper::optimize)

  1. MIRROR
  2. BCACHE
  3. P2P_UPGCXCODE, 主机替换为从响应中收集到的官方主机(兜底 upos-sz-mirrorali.bilivideo.com); 所有 /upgcxcode/ 主机可互换,因为签名在 path+query 中
  4. SZBDYD, 改写为其 xy_usource 主机,否则做主机替换
  5. MCDN_TF, 包进 B 站官方代理: https://proxy-tf-all-ws.bilivideo.com/?url=<encoded>

所有改写后的 URL 强制 https / 443 端口。同档内随机排序以分散负载 (即原脚本中的 pickOne); 各档按优先级拼接, 低档保留为回退而非丢弃(用户脚本只替换单个 URL、依赖网页播放器重试,这里一次性构建完整的 mpv 回退列表)。无法识别的 URL 在两种开启模式下均保留在列表末尾。首个条目为主 URL, 其余为 mpv 播放列表回退。

主机池从整个 playurl 响应(全部视频、音频、杜比、FLAC 及 durl 条目)收集,因此即使某条流的 URL 全是 P2P,也能借用响应中其他位置出现的干净主机。

直播

来自 enhance-live.ts:剥离 *.smtcdns.net/<real-host>/ 反向代理包装,再将非 P2P 的 bilivideo/akamaized 主机排在前面。两步均在 rankLive() 内完成,设置为 off 时完全跳过。画质强制未移植, wiliwili 本就显式选择 qn

设置项

新增 SettingItem::CDN_OPTIMIZE, 位于 设置 → 网络 → CDN 优化:

取值 行为
off (默认) URL 原样使用,不改写不重排
mirror_only 只保留官方 mirror/bcache URL (及无法识别的), P2P 链接直接丢弃
full 完整阶梯, 包括对 P2P 链接的主机替换与代理包装

手改配置文件出现越界值时按 off 处理。

若某档过滤后没有可播放的 URL,则原样返回原始列表并记录警告,过滤再激进也不会导致无法播放。

@dragonflylee

Copy link
Copy Markdown
Contributor

目标分支应该为 dev 分支

@s-kk
s-kk changed the base branch from yoga to dev July 30, 2026 06:37
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants