V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
LnTrx
V2EX  ›  程序员

b 站网页端也会开启 PCDN?

  •  3
     
  •   LnTrx · 227 天前 · 10684 次点击
    这是一个创建于 227 天前的主题,其中的信息可能已经有所发展或是发生改变。
    最近浏览网页时经常发现风扇在呼呼转,用系统任务管理器发现是 Chrome 在占用,用 Chrome 任务管理器确定是一个已经暂停的 b 站视频页面在大量占用 CPU 。通过调试暂停和性能分析发现了两个显眼的 js:

    https://s1.hdslb.com/bfs/static/pcdn-loader/reward-pcdn-loader-0.1.3.min.js
    https://s1.hdslb.com/bfs/static/pcdn-seeder/reward-seeder-1.2.0.min.js

    从名称和内容来看似乎与 PCDN 有关。但由于本人在这方面不够专业,希望有人可以分析一下这些代码到底在干什么,为什么会占这么多 CPU 。

    大量占用 CPU 情况的出现似乎有一定概率性。我这边打开一些较多人在看的视频、暂停放在那里干别的事情,等一会儿( 5~10 分钟)听到风扇响起来多半就复现了。也想了解大家是否能复现。
    67 条回复    2024-08-06 00:50:34 +08:00
    yyzh
        1
    yyzh  
       227 天前 via Android
    会啊,特别是直播,人家没钱买正规 cdn 就只能这样干.
    LnTrx
        2
    LnTrx  
    OP
       227 天前
    @yyzh 我本以为早就有人讨论过了,但大多集中在作为客户端用了 PCDN 而不是网页版作为服务端开启 PCDN 且占 CPU ,根据文件名基本没搜到什么信息。
    kome
        3
    kome  
       227 天前
    在我禁止 B 站的 webrtc 之前, 本站的直播会占用至少 10M 的带宽去上传, 禁了 webrtc 就不上传了. 看视频也会解析到一些 PCDN, MCDN, 找了个 ADH 的策略把 B 站的 mcdn 等全拉黑了.
    fuzzsh
        4
    fuzzsh  
       227 天前
    抖阴也有跑 PCDN ,随手抓几个都在滥用用户设备

    upnp stun webrtc,只要能连通外面都会打洞
    abcdxe2v
        5
    abcdxe2v  
       227 天前
    我也有这个现象,暂停的视频标签页,却占用很多 cpu 。不过我用 devtool 的 performance 分析了好几次,都分析不出来原因(总是 System 最多)。
    czfy
        6
    czfy  
       227 天前   ❤️ 10
    既然有这个脚本在,我相信缘起就是发现了网页端也会 PCDN 所以才会做这个脚本来应对
    https://greasyfork.org/zh-CN/scripts/415714-make-bilibili-great-again

    另外 b 站自己公开承认 PCDN 《 B 站降本利器 PCDN 的运维实践》
    https://www.bilibili.com/read/cv18619927/
    geekvcn
        7
    geekvcn  
       227 天前
    装个 webrtc 控制插件,禁用 webrtc
    showgood163
        8
    showgood163  
       227 天前
    感谢提醒,随手打开一个 B 站视频,开控制台再刷新就能看到 LZ 说的两个 JS 。
    abcdxe2v
        9
    abcdxe2v  
       227 天前
    @abcdxe2v 研究了下 performance 使用方法,确实是
    https://s1.hdslb.com/bfs/static/pcdn-seeder/reward-seeder-1.2.0.min.js 里面一个 a 函数
    xixiv5
        10
    xixiv5  
       227 天前
    Chrome 在设置里直接把 WebRTC 相关的全部关掉就行了
    gzlock
        11
    gzlock  
       227 天前
    内网宽带也会被开启 pcdn 吗?
    anonymouswll
        12
    anonymouswll  
       227 天前   ❤️ 1
    油猴内:
    delete window.RTCPeerConnection
    delete window.mozRTCPeerConnection
    delete window.webkitRTCPeerConnection
    delete window.RTCDataChannel
    delete window.DataChannel
    可以禁止下。

    B 站网页版还有应该严重的问题。 在 Mac 上的 Safari 中,打开 https://www.bilibili.com 首页不动或者滚动到底后不动,Safari 会卡死。 至今没找到具体原因。希望有人能告知。
    hyperbin
        13
    hyperbin  
       227 天前 via Android
    假设有的话,说明通过网页就能在浏览器上启动一个 tcp-server ,连 node 都省了,服务器上装个浏览器就能提供服务了,显然不可能
    hyperbin
        14
    hyperbin  
       227 天前 via Android
    @hyperbin 好吧,忘了还有 WEB RTC
    rekulas
        15
    rekulas  
       227 天前   ❤️ 5
    就冲 b 站没广告还有很多干货这点,我倒不介意它这样做,也就占用我点冗余带宽和 cpu 而已,反正我自己也用不完
    如果人人都去限制,可能以后就没有没广告的 b 站了..
    wangtian2020
        16
    wangtian2020  
       227 天前
    安装插件 WebRTC Control
    jiangyang123
        17
    jiangyang123  
       227 天前
    @rekulas 问题关键是:运营商可能因为你上传流量超限而封停你宽带
    aino
        18
    aino  
       227 天前
    这个技术学习一下 好像挺有趣
    wolfydw
        19
    wolfydw  
       227 天前   ❤️ 4
    @rekulas 我特意上来回你一句:B 站即便是大会员,依然会有广告!!!!!!!
    zekeluii
        20
    zekeluii  
       227 天前
    B 站海外 app 和網站是沒有任何廣告的,不管是不是會員。
    incubus
        21
    incubus  
       227 天前
    之前用 b 站看 LOL 比赛的时候也发现了这点,会有 1M 多点的上传速度,当时搜的油猴插件屏蔽这个
    aogu555
        22
    aogu555  
       227 天前   ❤️ 1
    @rekulas b 站现在除了视频开头贴片广告外,其他地方广告哪里少了?
    janus77
        23
    janus77  
       227 天前   ❤️ 1
    直接把浏览器全局的 webrtc 禁了就可以了,基本上任何视频和直播网站都能解决
    uliah
        24
    uliah  
       227 天前
    @rekulas #15 非常抵触厂商的这些行为, 无论什么情况, 超额使用用户设备都应该征求用户同意,否则和肉鸡有什么区别。
    (B 站可以设置接受 PCDN, 收获额外的硬币).
    Shanky
        25
    Shanky  
       227 天前   ❤️ 1
    b 站现在看个视频都有恰饭广告,动态广告,首页广告....
    大会员没有去广告功能 一样得看
    afeiche
        26
    afeiche  
       227 天前
    这么说起来,前几天我的 edge 爆卡难道是 b 站引起的。。
    yleoer
        27
    yleoer  
       227 天前
    我之前就发现观看 B 站,斗鱼的直播会有 1M/s 的上传,B 站的通过油猴脚本屏蔽了,但斗鱼的屏蔽不了
    blackmirror
        28
    blackmirror  
       227 天前
    @rekulas 说得好像 B 站没广告一样,能干这事,其他破事肯定也能干
    nothingistrue
        29
    nothingistrue  
       226 天前
    https://github.com/MotooriKashin/Bilibili-Old 这个已经被干碎了(技术手段屏蔽,政治手段不好说):对照 youku 屏蔽广告,就不要再去想什么破解手段了,让 B 站像 youku 那样好好的成为历史吧。
    nothingistrue
        30
    nothingistrue  
       226 天前
    youku 好歹还是垄断之后才搞手段的,B 站也不知道哪来的底气。
    wildlynx
        31
    wildlynx  
       226 天前
    我记得 CCTV 的网页,也会 PCDN
    Mxinx
        32
    Mxinx  
       226 天前
    @rekulas 现在很多和 B 站签约的 UP 主都有视频内插播广告的需求吧, 别广告都是 UP 主接的 ,其实是 B 站接了之后分发给 UP 主的。广告费那么多 ,猜 B 站会不会眼红?
    rekulas
        33
    rekulas  
       226 天前
    楼上各位指正的对,b 站还是有广告的,不过至少目前而言,我觉得 b 站的广告还是非常少了(未开会员),比起 youtube 优酷这种满天飞的体验好太多
    abersheeran
        34
    abersheeran  
       226 天前 via Android
    同意楼上,没有视频开头的强制广告,我觉得闲置的带宽它用一用也无妨。不过我觉得还是要告知用户会比较好,最好能做成一个开关,像我们这样同意的才开启 PCDN 。慷他人之慨不可取。
    tunggt
        35
    tunggt  
       226 天前
    @rekulas b 站的话,建议去 google play 下载海外版。ios 在非国区也可以下载到。别用国内版就行
    realJamespond
        36
    realJamespond  
       226 天前
    mac b 站缓存特多 1 ,2 个 g ,yt 才 30m ,我现在都用 safari 上 b 站了
    MYDB
        37
    MYDB  
       226 天前 via iPhone
    禁用 webrtc 来禁止上传,自写 ad 元素规则,视频/直播播放器只保留观看、评论、弹幕,其他元素全部删除
    threadcoat
        38
    threadcoat  
       226 天前   ❤️ 1
    @rekulas b 站不是没有广告,b 站是每个视频都是广告
    rahuahua
        39
    rahuahua  
       226 天前
    @aogu555 长视频不加片头广告很良心了
    mxT52CRuqR6o5
        40
    mxT52CRuqR6o5  
       226 天前
    油管免费用户强制看广告可比 B 站扰人多了
    LiYanHong
        41
    LiYanHong  
       226 天前
    @rekulas #15 没广告?视频里突然就猝不及防,不像 youtube 里正片会利益相关提示
    MrKrabs
        42
    MrKrabs  
       226 天前
    批站盗版资源一堆,现在还要偷用户流量,那不是只有硬盘是自己的了?
    lyc8503
        43
    lyc8503  
       226 天前
    @rekulas B 站很多低质量软广

    偷跑 PCDN 对两头的用户都不友好,上传方被偷跑流量,下载方视频体验差(可能会莫名其妙卡)
    nicoljiang
        44
    nicoljiang  
       226 天前
    @rekulas 现在 b 站的广告跟 ytb 可以提前关闭的那种贴片广告相比已经不遑多让了。
    Fred0410
        45
    Fred0410  
       226 天前
    无所谓,本来上传就那么一点
    goodryb
        46
    goodryb  
       226 天前
    你甚至都不用自己看代码,让通义千问分析了下

    这段代码是 Bilibili ( B 站)使用的“奖励播种器”( Reward Seeder )客户端脚本的一个压缩版本,其主要功能与平台的点播视频分发技术有关,特别是通过 WebRTC ( Web Real-Time Communication )实现用户间的 P2P ( Peer-to-Peer )数据传输。


    https://tongyi.aliyun.com/qianwen/share?shareId=45c75ef0-efab-4a35-a75a-ec1d052f2163
    ratmond
        47
    ratmond  
       226 天前
    @anonymouswll 你这个脚本用这个网站 https://browserleaks.com/webrtc 测还是会泄露 IP ,我让 ChatGPT 写了一个:
    ```
    // ==UserScript==
    // @name Disable WebRTC
    // @namespace http://tampermonkey.net/
    // @version 1.0
    // @description Disable WebRTC to improve privacy
    // @author You
    // @match *://*/*
    // @grant none
    // @run-at document-start
    // ==/UserScript==

    (function() {
    'use strict';

    // Disable RTCPeerConnection to prevent WebRTC leaks
    window.RTCPeerConnection = function() {
    return null;
    };
    window.webkitRTCPeerConnection = function() {
    return null;
    };

    // Other WebRTC related components that could be disabled
    // Not all of these may be present or necessary to disable depending on the browser
    window.RTCSessionDescription = function() {
    return null;
    };
    window.RTCIceCandidate = function() {
    return null;
    };

    // Disable navigator.mediaDevices.getUserMedia to prevent camera and microphone access
    if (navigator.mediaDevices && navigator.mediaDevices.getUserMedia) {
    navigator.mediaDevices.getUserMedia = function() {
    return Promise.reject(new Error("UserMedia is disabled for privacy reasons"));
    };
    }
    })();
    ```
    GenericT
        48
    GenericT  
       226 天前   ❤️ 1
    有些人有反思起来了,youtube 有贴片广告就没有视频内广告了? lttstore.comcs.money 真没见过?
    ily433664
        49
    ily433664  
       226 天前
    @rekulas #15 把广告装作普通视频,连大会员有有广告,也就白嫖的觉得好了
    630071099
        50
    630071099  
       226 天前
    原来如此,装了个插件试试来关闭:WebRTC Control
    ztmzzz
        51
    ztmzzz  
       226 天前 via iPhone
    @rekulas 还没广告呢,把拦截插件关了,首页 6 个还是 8 个的推荐视频栏位,1 个就是广告。视频底下还有大横幅广告
    leaflxh
        52
    leaflxh  
       225 天前
    这就是国内的网络运营商环境,凑合着用吧
    PeneceaQwQ
        53
    PeneceaQwQ  
       225 天前
    @MYDB
    推荐个脚本,完全满足需求
    https://github.com/the1812/Bilibili-Evolved
    MYDB
        54
    MYDB  
       225 天前 via iPhone
    @PeneceaQwQ 回错人了?自写 ad 规则秒杀一切脚本
    DOLLOR
        55
    DOLLOR  
       225 天前
    我不明白呀,按道理 PCDN 应该吃流量,而不是吃 CPU 算力的,不应该造成 CPU 跑满风扇狂转的。
    这种现象更像是挖矿。
    VwEI
        56
    VwEI  
       225 天前
    @kome 能分享一下规则嘛
    kome
        57
    kome  
       224 天前
    @VwEI 我是直接用 ADH 阻止解析域名了, 对直播的上传有没有用就不清楚了, 我直接禁用了 webrtc. 自定义规则:
    ```
    ! 哔哩哔哩
    ||v1d.szbdyd.com
    ||mcdn.bilivideo.cn
    ```
    kome
        58
    kome  
       224 天前
    @VwEI bilibili 还有一个域名在我这 30 天解析了 50 万次, 被 CHN:anti-AD 规则拦截, 规则主页 anti-ad.net
    Levox
        59
    Levox  
       224 天前
    B 站有时候还疯狂吃内存,一个页面 5 、6 个 G ,卡的页面等待十几秒才能动。出现只能关闭再重开页面。
    VwEI
        60
    VwEI  
       219 天前
    @kome 是具体哪个呢,我之前把常用的全放行了- -
    S179276SP
        61
    S179276SP  
       213 天前 via Android
    话说我才发现韩国最大的直播网站 afreecate 如果不下载他的电脑客户端,只能看 480p 的画质,估计也是用了 pcdn
    palemoky
        62
    palemoky  
       143 天前
    刚刚解决困扰我很久的 B 站卡顿问题,解决方法很简单,只需要把以下两个域名拦截即可,完全不需要屏蔽 WebRTC
    1. http://data.bilibili.com (用户分析数据上报)
    2. http://hdslb.com ( PCDN ,只屏蔽这个也可以)

    P.S. 装上油猴脚本 Make BiliBili Great Again 体验更佳
    palemoky
        63
    palemoky  
       143 天前
    @palemoky 直接屏蔽 hdslb.com 会导致搜索和文章页面样式无法加载,可以在 Make BiliBili Great Again 中加入以下内容来解决:
    ```javascript
    !function () {
    const allowedDomain = 's1.hdslb.com';

    // 拦截 fetch 请求
    const oldFetch = unsafeWindow.fetch;
    unsafeWindow.fetch = function (url, ...args) {
    if (typeof url === 'string' && url.includes('.hdslb.com') && !url.includes(allowedDomain)) {
    return Promise.reject(new Response('拦截的请求', { status: 403 }));
    }
    return oldFetch.call(this, url, ...args);
    };
    }();
    ```
    wanzhuan85
        64
    wanzhuan85  
       140 天前
    @palemoky #63 没搞懂怎么弄,可以教教吗?用什么软件拦截这两个域名?
    palemoky
        65
    palemoky  
       134 天前   ❤️ 1
    @wanzhuan85 你 Chrome 有 TamperMonkey 插件吧?然后把链接中的这段代码粘进去应该就可以了。
    https://codefile.io/f/A5mn0LACWf

    相比原版,我修改了两处:
    1. 第 7 行 https://www.bilibili.com/* 改为 https://bilibili.com/*
    2. 增加了 315 行的函数
    wanzhuan85
        66
    wanzhuan85  
       129 天前
    @palemoky #65 非常感谢,这个代码修改得很好,之前我要配合拦截广告去拦截这两个域名,结果就是只能看到直播界面,其他右边弹幕那些都会被拦截掉,现在就非常的正常了,就很完美。
    Leao9203
        67
    Leao9203  
       100 天前
    @DOLLOR 并不是,如果 PCDN 只是对应一两个连接数,那确实没什么影响。但是连接数多了,CPU 占用率必上去啊...不然为什么针对纯 Nginx 、Apache 网站的攻击仍然会生效呢?
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5845 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 02:58 · PVG 10:58 · LAX 18:58 · JFK 21:58
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.