BBLL icon indicating copy to clipboard operation
BBLL copied to clipboard

能关掉万恶的PCDN和MCDN吗?

Open b1456089826 opened this issue 1 year ago • 4 comments

B 站 CDN 分类

根据自己打开不同热度不同类型的视频结合网上搜集的信息,大致分为以下几种:

服务商 CDN
upos-sz-mirror****.bilivideo.com
看域名应该是服务商方案
腾讯:cos,cosb,coso1,coso2,bos
金山:ks3,ks3b,ks3c,ks32
七牛:kodo,kodob
华为:hw,hwb,uphw,js
阿卡迈(海外):akamai
自建 CDN (?)
cn-****-dx-v-**.bilivideo.com
可能是 B 站的自建服务器其中可以看到省份和城市首字母缩写
MCDN
xxxxx(ip地址).mcdn.bilivideo.com
xy99x999x99x99xy.mcdn.bilivideo.cn
查了一圈只在京东云发现了 [MCDN](https://docs.jdcloud.com/cn/mcdn/product-overview),可能是京东云无线宝相关?也可能是京东云+无线宝相互配合?
怀疑 MCDN 包含无线宝的原因是 IP 段为家宽段
PCDN
********.v1d.szbdyd.com
到这就完全看脸了,各个地区上行带宽不可控,你连接到的节点与你的距离不可控,极端环境下甚至无法顺利播放 1080+

目前发现app在播放视频时会连接MCDN,导致速度巨慢无比还可能会报错,问下大佬能关掉PCDN和MCDN,走服务商CDN吗?

b1456089826 avatar Aug 05 '23 12:08 b1456089826

好像不太行,看接口返回都固定的。我还得研究研究

xiaye13579 avatar Aug 09 '23 06:08 xiaye13579

就是因为CDN的原因 身在国外 BBLL无法打开任何视频 浏览器倒是没问题 看了下BBLL连接的是cn-hk-eq-01-07.bilivideo.com 浏览器脸的是upos-hz-mirrorakam.akamaized.net

esme518 avatar Jan 25 '24 20:01 esme518

好像不太行,看接口返回都固定的。我还得研究研究

接口会返回一个backup_url,一般都不是mcdn

CrapsHoly avatar Jun 30 '24 10:06 CrapsHoly

好像不太行,看接口返回都固定的。我还得研究研究

// 去 P2P CDN Object.defineProperty(unsafeWindow, 'PCDNLoader', { value: class { }, enumerable: false, writable: false }); Object.defineProperty(unsafeWindow, 'BPP2PSDK', { value: class { on() { } }, enumerable: false, writable: false }); Object.defineProperty(unsafeWindow, 'SeederSDK', { value: class { }, enumerable: false, writable: false }); if (location.href.startsWith('https://www.bilibili.com/video/') || location.href.startsWith('https://www.bilibili.com/bangumi/play/')) { let cdnDomain;

function replaceP2PUrl(url) {
    cdnDomain ||= document.head.innerHTML.match(/up[\w-]+\.bilivideo\.com/)?.[0];

    try {
        const urlObj = new URL(url);
        const hostName = urlObj.hostname;
        if (urlObj.hostname.endsWith(".mcdn.bilivideo.cn")) {
            urlObj.host = cdnDomain || 'upos-sz-mirrorcoso1.bilivideo.com';
            urlObj.port = 443;
            console.warn(`更换视频源: ${hostName} -> ${urlObj.host}`);
            return urlObj.toString();
        } else if (urlObj.hostname.endsWith(".szbdyd.com")) {
            urlObj.host = urlObj.searchParams.get('xy_usource');
            urlObj.port = 443;
            console.warn(`更换视频源: ${hostName} -> ${urlObj.host}`);
            return urlObj.toString();
        }
        return url;
    } catch (e) {
        return url;
    }
}

function replaceP2PUrlDeep(obj) {
    for (const key in obj) {
        if (typeof obj[key] === 'string') {
            obj[key] = replaceP2PUrl(obj[key]);
        } else if (typeof obj[key] === 'array' || typeof obj[key] === 'object') {
            replaceP2PUrlDeep(obj[key]);
        }
    }
}

replaceP2PUrlDeep(unsafeWindow.__playinfo__);

(function (open) {
    unsafeWindow.XMLHttpRequest.prototype.open = function () {
        try {
            arguments[1] = replaceP2PUrl(arguments[1]);
        } finally {
            return open.apply(this, arguments);
        }
    }
})(unsafeWindow.XMLHttpRequest.prototype.open);

}

VwEl avatar Jul 02 '24 15:07 VwEl