解除B站区域限制

通过替换获取视频地址接口的方式, 实现解除B站区域限制;

< Spätná väzba na 解除B站区域限制

Otázka/komentár

§
Pridaný: 16.05.2017

1080p一点就暂停了

看巨人2时,想看1080p,不过一点就暂停了,无法切换,咋回事

ipcjsAutor
§
Pridaný: 16.05.2017

我这里实测分辨率切换没问题。 不过,默认分辨率不就是1080p的吗?还需要再手动切换? 还有你的Chrome貌似还是50?最新都58版了,还是更新一下的好。

§
Pridaný: 16.05.2017
Upravený: 16.05.2017

流暢 640×360 高清 1080×608 超清 1280×720 (預設)

我不用腳本看巨人不會看到那個按鈕 但掛上後多了一個 1080P 的按鈕


他的 event 被 uglify 了但可以追到

if ("4" == $(this).attr("value")) {
    if (!q.K) return e.pause(),
    e.state.mode > g.ta && e.mode(g.ta),
    e.ye.load(function() { //下略

其中 q 紀錄的東西多跟身份有關,裏面有 uid 跟 name 我猜應該跟付費機制之類的有關

ipcjsAutor
§
Pridaný: 16.05.2017
Upravený: 16.05.2017

。。。看起来,确实有这问题。暂时只有把1080P设成默认分辨率可避免。

我打断点是打到这么一段:

change: function(b) { // 7893行
    var q = this;
    if (l || b == e.tb)
        return !1;
    if (4 == b) {
        var p = e.C.status();
        if (p.K)
            if (0 != p.ub && 1 == p.ec || d || c)
                f.c.addClass("disabled");
            else
                return e.pause(),
                e.state.mode > g.ta && e.mode(g.ta),
                "function" === typeof e.window.showVipPay && e.window.showVipPay(3),
                q.value(e.tb),
                !1;
        else
            return e.pause(),
            e.state.mode > g.ta && e.mode(g.ta),
            e.ye.load(function() {
                e.window.location.href = e.window.location.href
            }),
            q.value(e.tb),
            !1
    } else
        f.c.addClass("disabled");
    clearTimeout(f.Bf);
ipcjsAutor
§
Pridaný: 16.05.2017

这里面的e.C.status()是读取的https://interface.bilibili.com/player?id=cid:17417227&aid=10549653的返回值

ipcjsAutor
§
Pridaný: 16.05.2017

其中, p.ub对应返回结果的vip标签中的vipType字段 p.ec对应返回结果的vip标签中的vipStatus字段

这个接口没有传uid之类的字段,应该是根据cookie来判断用户的,感觉要代理的话,只能服务器上代理一下这个接口才行。 或者脚本里面直接修改接口的返回值?不过这接口返回xml。。。操作起来有点麻烦~~

先把1080P设为默认分辨率来避免吧,说不定,B站过几天又改接口昵

ipcjsAutor
§
Pridaný: 16.05.2017

后来又试了下,只有在代理服务器上登录的账号是大会员,默认分辨率才会是1080P

§
Pridaný: 16.05.2017
Upravený: 16.05.2017

我是 redirect + Biliplus Biliplus未登入,B站有登入,沒有大會員 我的預設就是最高的 720P (超清)

((乾脆偵測沒有大會員的把那個按鈕display:none;掉算了www


上面的程式碼是 1080P 按鈕上的 click 事件(4種解析度的 click 都是這個 function) 和你抓到的 function 看起來大同小異...

// bilibiliPlayer.min.js:396
function() {
  if (f.Wa.hasClass("disabled") ||
    $(this).hasClass("active")) return !1;
  if ("4" == $(this).attr("value")) {
    if (!q.K) return e.pause(),
        e.state.mode > g.ta && e.mode(g.ta),
        e.ye.load(function() {
      e.window.location.href = e.window.location.href
    }), f.Gd.value(e.tb), !1;
    if (!(0 != q.ub && 1 == q.ec || d || c))
        return e.pause(),
        e.state.mode > g.ta && e.mode(g.ta),
        "function" === typeof e.window.showVipPay && e.window.showVipPay(1), f.Gd.value(e.tb), !1
  }
  f.Gd.value($(this).attr("value"));
  f.Gd.change()
}

下面是那個關鍵的 q 的結構

console.log(e.C.status() === q) // => true

console.dir(q)
{
    "name": "******", // B站使用者名字
    "uid": "******", // uid
    "rf": "0.00",
    "K": true,
    "Fy": false,
    "zt": true,
    "vv": false,
    "Bt": "Copy",
    "Jy": {},
    "Xy": "",
    "Yy": "",
    "Mn": "0",
    "ev": "9f9ec29b",
    "Ub": [
        "//comment.bilibili.com",
        "//comment.bilibili.com/rc"
    ],
    "bottom": "1",
    "ue": 3,
    "ub": 0,
    "ec": 0,
    "Kb": 3,
    "Iv": 70,
    "h": {
        "Uo": [],
        "mode": [ 1, 1, 1, 0 ],
        "fontsize": [ 0, 0, 1, 1, 0, 0, 0 ],
        "color": 2,
        "Mf": 5,
        "input": [ 220, 5000 ]
    }
}
ipcjsAutor
§
Pridaný: 16.05.2017

你以前可以用这个1080P的选项么?

§
Pridaný: 17.05.2017

你以前可以用这个1080P的选项么?

以前沒注意 :sweat_smile:

ipcjsAutor
§
Pridaný: 17.05.2017

感觉B站把整个代码弄得更复杂了,是不是要防止别人给返回值做手脚呀?

§
Pridaný: 17.05.2017

不知是不是新版本的问题?还是B站问题?
现在改的连超清都没了(大会员)。。。。进去就只有流畅,且按下去并没有弹出可以改的清析度

§
Pridaný: 17.05.2017
不知是不是新版本的问题?还是B站问题?
现在改的连超清都没了(大会员)。。。。进去就只有流畅,且按下去并没有弹出可以改的清析度

昨天晚上8点时还没出现这情况, 今天打开我就懵了。。。

ipcjsAutor
§
Pridaný: 17.05.2017

等B站改完我再改吧?

§
Pridaný: 17.05.2017

目前版權番全部只剩流暢渣畫質
而且有些還無限肥腸抱歉...
B站在大改版?

ipcjsAutor
§
Pridaný: 17.05.2017

大概是的?,先等B站改完吧

§
Pridaný: 17.05.2017
目前版權番全部只剩流暢渣畫質
而且有些還無限肥腸抱歉...
B站在大改版?

嗯, 刚用VPN试了一下, 确实是B站在搞事情。。。破攻城狮不知在搞什么鬼( ´_ゝ`)
难度破站服务器给最近那毒锁了23333, 拿流畅的镜像服务器先顶上_(:3」∠)_

§
Pridaný: 17.05.2017

不过给锁上好像并不太可能, 再等等逸站的攻城狮糊弄

ipcjsAutor
§
Pridaný: 17.05.2017

@esterTion B站是不是给视频服务器也加上了区域限制?

§
Pridaný: 17.05.2017

@esterTion B站是不是给视频服务器也加上了区域限制?

五点半b站搞反外链,估计炸到自己人六点回滚了,然后顺带番剧playurl炸了

ipcjsAutor
§
Pridaný: 17.05.2017

@esterTion B站是不是给视频服务器也加上了区域限制?

五点半b站搞反外链,估计炸到自己人六点回滚了,然后顺带番剧playurl炸了

一颗赛艇?,B站的破程序员,终于毒到自己身上去了

§
Pridaný: 17.05.2017

看戏传送门?:如何评价B站番剧区大量视频变成流畅画质? - 知乎

散了散了,恢复了

§
Pridaný: 17.05.2017
Upravený: 17.05.2017

看戏传送门?:如何评价B站番剧区大量视频变成流畅画质? - 知乎

散了散了,恢复了

md刚说完还是炸了,气死我了

现在的接口状态

{
  "accept_format": "mp4",
  "accept_quality": [
    1
  ],
  "bp": 0,
  "code": 0,
  "durl": [
    {
      "length": 0,
      "order": 1,
      "size": 0,
      "url": "http://ws.acgvideo.com/a/1c/17479267-1.mp4?wsTime=1495037091&platform=ios&wsSecret2=9a6b910ffca92e9097edd9d0ad5a8af5&oi=3400792235&rate=540"
    }
  ],
  "format": "mp4",
  "from": "local",
  "has_paid": false,
  "result": "suee",
  "seek_param": "start",
  "seek_type": "second",
  "timelength": 0,
  "vip_status": 1,
  "vip_type": 1,
  "flvjsType": "flv"
}
ipcjsAutor
§
Pridaný: 17.05.2017

@esterTion 应该是缓存的原因吧,大多数已经恢复了。 才刚搬好瓜子板凳,就结束了,不开心("▔□▔)/

§
Pridaný: 17.05.2017

預設 720P 回復了 (沒有那個1080P按鈕了) :blush:

Pridať odpoveď

Aby ste mohli pridať odpoveď, prihláste sa.