您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
change bilivideo cdn
// ==UserScript== // @name bili cdn change // @version 0.4.5 // @description change bilivideo cdn // @author kuai // @modified nog // @match https://www.bilibili.com/* // @grant none // @namespace https://greasyfork.org/users/69829 // ==/UserScript== (function () { "use strict"; let requestedDomain = { goodNode: new Set(), badNode: new Set(), switchedNode: new Set(), otherNode: new Set(), }; window.requestedDomain = requestedDomain; const goodCdn = [ // 'upos-sz-mirrorks3.bilivideo.com', // 'upos-sz-mirrorks3b.bilivideo.com', // 'upos-sz-mirrorks3c.bilivideo.com', // 'upos-sz-mirrorks32.bilivideo.com', // 'upos-sz-mirrorkodo.bilivideo.com', //cdn for jp // 'upos-sz-mirrorkodob.bilivideo.com', // 'upos-sz-mirrorcos.bilivideo.com', // 'upos-sz-mirrorcosb.bilivideo.com', // 'upos-sz-mirrorbos.bilivideo.com', // 'upos-sz-mirrorwcs.bilivideo.com', // 'upos-sz-mirrorwcsb.bilivideo.com', /** 不限CROS, 限制UA */ 'upos-sz-mirrorhw.bilivideo.com', // 'upos-sz-mirrorhwb.bilivideo.com', // 'upos-sz-upcdnbda2.bilivideo.com', // 'upos-sz-upcdnws.bilivideo.com', // 'upos-sz-upcdntx.bilivideo.com', // 'upos-sz-upcdnhw.bilivideo.com', // 'upos-tf-all-js.bilivideo.com', // 'cn-hk-eq-bcache-01.bilivideo.com', // 'upos-hz-mirrorakam.akamaized.net', ]; const setBuffer = async () => { if (window.dashPlayer) { if (window.dashPlayer.getStableBufferTime() !== 300) { window.dashPlayer.setStableBufferTime(300); } } }; const putRequestedDomain = async (domain, from, nNode) => { switch (from) { case "goodNode": break; case "badNode": requestedDomain.switchedNode.add(nNode); break; case "otherNode": break; } requestedDomain[from].add(domain); }; XMLHttpRequest.prototype.origin_open = XMLHttpRequest.prototype.open; XMLHttpRequest.prototype.open = function (method, url, async, user, password) { let nUrl = url; if (/^https:\/\/[a-z.-\d]*bilivideo.com/i.test(url)) { let node = url.match(/(?<=^https:\/\/)[a-z.-\d]*(?=.bilivideo.com)/i)[0]; if (goodCdn.includes(node)) { putRequestedDomain(node, "goodNode"); } else { let nNode; if (requestedDomain.goodNode.size) { const goodNodeList = Array.from(requestedDomain.goodNode); nNode = goodNodeList[0]; putRequestedDomain(nNode, "goodNode"); } else { nNode = goodCdn[Math.floor(Math.random() * goodCdn.length)]; putRequestedDomain(node, "badNode", nNode); } nUrl = url.replace(/^https:\/\/[a-z.-\d]*bilivideo.com/i, "https://" + nNode); } setBuffer(); } else { putRequestedDomain(url, "otherNode"); } return this.origin_open(method, nUrl, async === undefined ? true : async, user, password); }; })();