人在海外b站网页版真的卡麻了。
claude 抓包一通分析, 大概行为如下, 视屏前几秒走b站走海外cdn节点, 然后切pcdn(这我玩个毛 跨洋p2p我怎么看,ps.一想到有用户被迫站跨洋p2p webrtc stun 传输我就乐)。
解决方案

// ==UserScript==
// @name B站海外CDN优化(alib锁定+PCDN击杀)
// @namespace local.bili.akam
// @version 2.0
// @description ①分片锁 upos-sz-mirroralib(实测深冷内容10-21Mbps,唯一稳定喂饱4K) ②每次加载强杀PCDN/P2P(播放器挂死真凶) ③可选强制H264
// @match *://*.bilibili.com/*
// @run-at document-start
// @grant none
// ==/UserScript==
(function () {
'use strict';
const PRIMARY = 'upos-sz-mirroralib.bilivideo.com';
const SECOND = 'upos-sz-mirrorhw.bilivideo.com';
const FORCE_AVC = localStorage.getItem('bili_force_avc') === '1';
// ① PCDN/P2P 击杀(每次加载强制执行,防服务端配置复活)
try {
const K='bilibili_player_dash_fawkes_config';
const cfg=JSON.parse(localStorage.getItem(K)||'{}');
cfg['common_policy.pcdn_enabled_browser_list']=btoa('[]');
cfg['dash_config.p2p_disable']=btoa('true');
cfg['reward_pcdn_loader_policy.web_loader_grey_test_percentage']=btoa('0');
localStorage.setItem(K,JSON.stringify(cfg));
} catch(e){}
// ② 可选强制 H.264
if (FORCE_AVC) {
const bad=/hev1|hvc1|av01/i;
if (window.MediaSource?.isTypeSupported){ const o=MediaSource.isTypeSupported.bind(MediaSource); MediaSource.isTypeSupported=t=>bad.test(t)?false:o(t); }
const cpt=HTMLMediaElement.prototype.canPlayType;
HTMLMediaElement.prototype.canPlayType=function(t){ return bad.test(t)?'':cpt.call(this,t); };
if (navigator.mediaCapabilities?.decodingInfo){ const od=navigator.mediaCapabilities.decodingInfo.bind(navigator.mediaCapabilities);
navigator.mediaCapabilities.decodingInfo=c=>(c?.video?.contentType&&bad.test(c.video.contentType))?Promise.resolve({supported:false,smooth:false,powerEfficient:false}):od(c); }
}
// ③ CDN 锁定:主=alib,备=hw→akamai→原始
const swapTo = (u,h) => { try{ const x=new URL(u); if(/^upos-/i.test(x.host)){ x.host=h; return x.href; } return u; }catch(e){ return u; } };
const fixStream = s => {
if(!s) return;
const base = s.baseUrl || s.base_url; if(!base) return;
const backups = s.backupUrl || s.backup_url || [];
const all=[base,...backups];
const primary = swapTo(base, PRIMARY);
const akamExisting = all.filter(u=>/akamaized\.net/i.test(u));
const rest = [...new Set([swapTo(base,SECOND), ...akamExisting, base])].filter(u=>u!==primary);
if(s.baseUrl!==undefined||s.backupUrl!==undefined){ s.baseUrl=primary; s.backupUrl=rest; }
if(s.base_url!==undefined||s.backup_url!==undefined){ s.base_url=primary; s.backup_url=rest; }
};
const patch = j => { try{
const d=j?.data||j?.result||j;
if(d?.dash){ (d.dash.video||[]).forEach(fixStream); (d.dash.audio||[]).forEach(fixStream);
d.dash.dolby?.audio?.forEach(fixStream); if(d.dash.flac?.audio) fixStream(d.dash.flac.audio); }
if(d?.durl) d.durl.forEach(x=>{ if(x.url)x.url=swapTo(x.url,PRIMARY); if(Array.isArray(x.backup_url))x.backup_url=x.backup_url.map(u=>swapTo(u,SECOND)); });
}catch(e){} return j; };
try { let _pi; Object.defineProperty(window,'__playinfo__',{configurable:true,get(){return _pi;},set(v){_pi=patch(v);}}); } catch(e){}
const _fetch=window.fetch;
const isPlayurl=u=>/\/(player\/(wbi\/)?playurl|pgc\/player\/web\/playurl)/.test(u||'');
window.fetch=async function(input,init){ const url=typeof input==='string'?input:(input?.url||''); const resp=await _fetch.call(this,input,init);
if(isPlayurl(url)){ try{ const j=patch(JSON.parse(await resp.clone().text())); return new Response(JSON.stringify(j),{status:resp.status,statusText:resp.statusText,headers:resp.headers}); }catch(e){ return resp; } } return resp; };
const _open=XMLHttpRequest.prototype.open,_send=XMLHttpRequest.prototype.send;
XMLHttpRequest.prototype.open=function(m,u,...r){ this.__u=u; return _open.call(this,m,u,...r); };
XMLHttpRequest.prototype.send=function(...a){ if(isPlayurl(this.__u)){ this.addEventListener('readystatechange',function(){ if(this.readyState===4&&this.status===200){ try{ const f=JSON.stringify(patch(JSON.parse(this.responseText))); Object.defineProperty(this,'responseText',{get:()=>f}); Object.defineProperty(this,'response',{get:()=>f}); }catch(e){} } }); } return _send.apply(this,a); };
console.log('[bili-cdn] v2.0 | 主镜像=alib | PCDN已杀 | 强制H264='+(FORCE_AVC?'ON':'OFF'));
})();