Bilibili 旧播放页

恢复Bilibili旧版页面,为了那些念旧的人。

< Feedback op Bilibili 旧播放页

Recensie: Goed - het script werkt zoals het hoort

§
Geplaatst: 23-04-2020
Bijgewerkt: 23-04-2020

4k清晰度切换问题

下午2点B站上线了4k清晰度 用旧播放器试了试之后发现,解码播放4k完全正常,但是清晰度切换会出现问题 --如果打开视频时默认加载1080+ ,选择切换到4k时会提示“切换失败”。并且切换到其他清晰度之后,“4k”的选项会消失

--如果打开视频时默认加载4k,播放器加载的实际上是非大会员1080P画质下的视频。需要手动在页面内切换到其他清晰度 再切换回4k才能正常加载 (显示4k实际1080P)

--同时观看人数上千的4k视频,大概率4k选项会消失。同时观看人数较少的视频不会出现这个问题

怀疑原因跟网络请求有关,希望有通过脚本修复的可能 不过能用上旧播放器已经很满足了。这些新功能带来的问题,无论能不能解决掉,都很感谢作者!

§
Geplaatst: 23-04-2020

@wly5556 说道: 下午2点B站上线了4k清晰度 用旧播放器试了试之后发现,解码播放4k完全正常,但是清晰度切换会出现问题 --如果打开视频时默认加载1080+ ,选择切换到4k时会提示“切换失败”。并且切换到其他清晰度之后,“4k”的选项会消失

--如果打开视频时默认加载4k,播放器加载的实际上是非大会员1080P画质下的视频。需要手动在页面内切换到其他清晰度 再切换回4k才能正常加载 (显示4k实际1080P)

--同时观看人数上千的4k视频,大概率4k选项会消失。同时观看人数较少的视频不会出现这个问题

能用上旧播放器已经很满足了。这些新功能带来的问题,无论能不能解决掉,都很感谢作者!

为什么会这样了,明明B站整新花样是好事……

喜欢这样不断创新的Bilibili,却还是不希望旧播放器被抛弃

说话回来,能提列举下类似的av(BV)号供测试吗,消息闭塞如我并没有找到相关的信息?

§
Geplaatst: 23-04-2020
Bijgewerkt: 23-04-2020

@"Motoori Kashin" 说道:

@wly5556 说道: 下午2点B站上线了4k清晰度 用旧播放器试了试之后发现,解码播放4k完全正常,但是清晰度切换会出现问题 --如果打开视频时默认加载1080+ ,选择切换到4k时会提示“切换失败”。并且切换到其他清晰度之后,“4k”的选项会消失

--如果打开视频时默认加载4k,播放器加载的实际上是非大会员1080P画质下的视频。需要手动在页面内切换到其他清晰度 再切换回4k才能正常加载 (显示4k实际1080P)

--同时观看人数上千的4k视频,大概率4k选项会消失。同时观看人数较少的视频不会出现这个问题

能用上旧播放器已经很满足了。这些新功能带来的问题,无论能不能解决掉,都很感谢作者!

为什么会这样了,明明B站整新花样是好事……

喜欢这样不断创新的Bilibili,却还是不希望旧播放器被抛弃

说话回来,能提列举下类似的av(BV)号供测试吗,消息闭塞如我并没有找到相关的信息?

av412878419 (同时播放人数最多,但是貌似现在不会出现4k选项消失的问题了,前两个问题依然存在) av837857904 av795289523 av925374962 av925302005 av667832969 4k大概还在测试,只有几个up在同一时间放出了4k视频 (av710415477 一个up尝试投稿4k没有成功) 还是挺惊讶不加修改的旧播放器能直接上4k的

§
Geplaatst: 23-04-2020

@wly5556 说道:

@"Motoori Kashin" 说道:

@wly5556 说道: 下午2点B站上线了4k清晰度 用旧播放器试了试之后发现,解码播放4k完全正常,但是清晰度切换会出现问题 --如果打开视频时默认加载1080+ ,选择切换到4k时会提示“切换失败”。并且切换到其他清晰度之后,“4k”的选项会消失

--如果打开视频时默认加载4k,播放器加载的实际上是非大会员1080P画质下的视频。需要手动在页面内切换到其他清晰度 再切换回4k才能正常加载 (显示4k实际1080P)

--同时观看人数上千的4k视频,大概率4k选项会消失。同时观看人数较少的视频不会出现这个问题

能用上旧播放器已经很满足了。这些新功能带来的问题,无论能不能解决掉,都很感谢作者!

为什么会这样了,明明B站整新花样是好事……

喜欢这样不断创新的Bilibili,却还是不希望旧播放器被抛弃

说话回来,能提列举下类似的av(BV)号供测试吗,消息闭塞如我并没有找到相关的信息?

av412878419 (同时播放人数最多,但是貌似现在不会出现4k选项消失的问题了,前两个问题依然存在) av837857904 av795289523 av925374962 av925302005 av667832969 4k大概还在测试,只有几个up在同一时间放出了4k视频 (av710415477 一个up尝试投稿4k没有成功) 还是挺惊讶不加修改的旧播放器能直接上4k的

感谢!

能播放我倒是不意外,毕竟旧版播放器配合修车插件还能播放本地视频

我会测试一下问题所在,但不敢承诺可以解决,毕竟重写网页框架容易,添加功能于我而言还是太难了(首页还有几个问题至今无从下手)

§
Geplaatst: 24-04-2020
Bijgewerkt: 24-04-2020

@wly5556

当前已主动配置了playinfo数据,至少av页会正常出现4k选项,不过会不会切换失败未知(非大会员的我切换不到4K画质进行测试……)

Bangumi和稍后再看不会有4K选项,因为播放器在请求视频地址时服务器默认不会返回4k地址,新播放器是通过添加fourk这个参数服务器才返回了4k地址,旧播放器已失去维护肯定不会主动添加上fourk参数。

目前能想到的解决办法是通过xhr钩子修改播放器playurl请求并主动添加上fourk参数(这可能也是以后旧版接口失效的话可能的解决办法)

xhr钩子将代理也页面所有xhr链接,贸然引进会不会引发隐私和安全方面的问题?毕竟脚本还为处理失效视频信息开起了跨域权限……

除了xhr钩子,不知道是不是有别的办法添加参数。

不过我在想灰度测试完成后,B站应该会大力推广4K,那时应该不带fourk参数也会默认返回4k地址吧,但愿!

§
Geplaatst: 24-04-2020

@"Motoori Kashin" 说道: @wly5556

当前已主动配置了playinfo数据,至少av页会正常出现4k选项,不过会不会切换失败未知(非大会员的我切换不到4K画质进行测试……)

Bangumi和稍后再看不会有4K选项,因为播放器在请求视频地址时服务器默认不会返回4k地址,新播放器是通过添加fouk这个参数服务器才返回了4k地址,旧播放器已失去维护肯定不会主动添加上fouk参数。

目前能想到的解决办法是通过xhr钩子修改播放器playurl请求并主动添加上fouk参数(这可能也是以后旧版接口失效的话可能的解决办法)

xhr钩子将代理也页面所有xhr链接,贸然引进会不会引发隐私和安全方面的问题?毕竟脚本还为处理失效视频信息开起了跨域权限……

除了xhr钩子,不知道是不是有别的办法添加参数。

不过我在想灰度测试完成后,B站应该会大力推广4K,那时应该不带fouk参数也会默认返回4k地址吧,但愿!

感谢!

§
Geplaatst: 30-05-2020

3.0版本用上xhr钩子之后解决了大部分4k相关问题,赞

不过这个问题还存在

打开视频时默认加载清晰度为4k,播放器加载的实际上是非大会员1080P画质下的视频源,需要手动在页面内切换到其他清晰度,再切换回4k才能实际加载4k源

花了时间在video.min.js之中找到由G = (Object.defineProperty(j, "details", {开始的一段代码 (大概是用来判断会员观看权限的数据)

于是添加4k有关信息之后,播放器能够正常自动加载4k,不需要手动切换一次清晰度,基本修复了这个问题

相信有更好的解决办法,发上论坛来看看大家的意见 (这问题几乎不影响使用,现版本已经够用了。感谢作者一直以来的努力)

§
Geplaatst: 30-05-2020

@wly5556 说道:

3.0版本用上xhr钩子之后解决了大部分4k相关问题,赞

不过这个问题还存在

打开视频时默认加载清晰度为4k,播放器加载的实际上是非大会员1080P画质下的视频源,需要手动在页面内切换到其他清晰度,再切换回4k才能实际加载4k源

花了时间在video.min.js之中找到由G = (Object.defineProperty(j, "details", {开始的一段代码 (大概是用来判断会员观看权限的数据)

于是添加4k有关信息之后,播放器能够正常自动加载4k,不需要手动切换一次清晰度,基本修复了这个问题

相信有更好的解决办法,发上论坛来看看大家的意见 (这问题几乎不影响使用,现版本已经够用了。感谢作者一直以来的努力)

哇,感谢,阁下也是厉害,看别人的源码已经够难的,看这种压缩过的源码简直头皮发麻。修改video.min.js源码的确是个办法。不过我很好奇但无法测试番剧那边也有video.min.js,为什么几个人都反馈番剧那边测试没问题,不知道你那边测试是不是这样?

§
Geplaatst: 31-05-2020

@MotooriKashin 说道: 哇,感谢,阁下也是厉害,看别人的源码已经够难的,看这种压缩过的源码简直头皮发麻。修改video.min.js源码的确是个办法。不过我很好奇但无法测试番剧那边也有video.min.js,为什么几个人都反馈番剧那边测试没问题,不知道你那边测试是不是这样?

是的,番剧页面中没有这个问题

番剧页请求视频分段的脚本是bilibiliPlayer.min.js?lastModified=2019-10-31T07:38:36.004Z,普通视频页的是video.min.js,大概内部逻辑不同

video.min.js中有一段画质上限判断代码 原本4k的值不存在,就会被改成非会员下最高的画质1080P bilibiliPlayer.min.js?lastModified=2019-10-31T07:38:36.004Z还暂时没找到类似的操作

§
Geplaatst: 31-05-2020
Bijgewerkt: 31-05-2020

@wly5556 说道: 在bilibiliPlayer.min.js?lastModified=2019-10-31T07:38:36.004Z还暂时没找到类似的操作

感谢辛苦测试,这样的话,看起来只能修改video.min.js了,可不到万不得已我真的不想修改b站原生脚本 我注意到av页video.min.js也是会请求bilibiliPlayer.min.js?lastModified=2019-10-31T07:38:36.004Z,只是在请求playurl之后,那是不是对于多p的4k(应该有这样的视频吧),切p的话是可以正常加载4k画质呢? 另外我还有一个想法没法验证:把一个4k视频加入一个单独的收藏夹,并在收藏页面点击“播放全部”,这样会重定向到av页(可能需要打开设置里的medialist项),这种情况下是否能正常加载4k视画质呢? 4k画质我真的没办法测试,所以只能再次拜托了。

§
Geplaatst: 31-05-2020

切p的话是可以正常加载4k画质呢? 切p后能自动加载4k 把一个4k视频加入一个单独的收藏夹,并在收藏页面点击“播放全部”,这样会重定向到av页(可能需要打开设置里的medialist项),这种情况下是否能正常加载4k视画质呢? 这个情况下也是正常的

§
Geplaatst: 31-05-2020

@wly5556 说道:

切p的话是可以正常加载4k画质呢? 切p后能自动加载4k 把一个4k视频加入一个单独的收藏夹,并在收藏页面点击“播放全部”,这样会重定向到av页(可能需要打开设置里的medialist项),这种情况下是否能正常加载4k视画质呢? 这个情况下也是正常的

那我可能有办法……

§
Geplaatst: 06-06-2020

@MotooriKashin 说道: 那我可能有办法…… 感谢,v3.0.5完全解决了问题


另一个讨论串有提到 @yjceyy 说道: 3.0.4番剧正常 异常生物见闻录 但是 某些UP的 4K视频依然黑屏 只有声音 3.0.3 3.0.5番剧不正常 4K 视频 也一样

我是win8.1+69 内核百分浏览器 在我这里没有出现相同的问题... 刷新一遍播放器也不应该把画面弄没啊= =

§
Geplaatst: 06-06-2020

@wly5556 说道: 感谢,v3.0.5完全解决了问题 应该也没有解决,刷新播放器其实请求了第二次链接,但这个链接是flv的,而flv是不提供4k画质的,所以从其他画质切换到4k会失败,我这里测试是这个样子。 而又不该直接hook所有flv到dash,因为无法区分什么时候真的需要flv 想了一下还是提供一个设置选项,开启二次初始化播放器并hook flv到dash,默认不启用

§
Geplaatst: 06-06-2020
Bijgewerkt: 06-06-2020

@MotooriKashin 说道:

@wly5556 说道: 感谢,v3.0.5完全解决了问题 应该也没有解决,刷新播放器其实请求了第二次链接,但这个链接是flv的,而flv是不提供4k画质的,所以从其他画质切换到4k会失败,我这里测试是这个样子。 而又不该直接hook所有flv到dash,因为无法区分什么时候真的需要flv 想了一下还是提供一个设置选项,开启二次初始化播放器并hook flv到dash,默认不启用

原来是这样= =


发现脚本video.b1b7706abd590dd295794f540f7669a5d8d978b3.js中负责切p的调用简介有力,可以用来刷新播放器

this.setP(t + 1), window.GrayManager && window.GrayManager.reload(e), window.BiliCm && window.BiliCm.Core && window.BiliCm.Core.reset()

不知道这样算不算个办法...

§
Geplaatst: 07-06-2020

@wly5556 说道: 发现脚本video.b1b7706abd590dd295794f540f7669a5d8d978b3.js中负责切p的调用简介有力,可以用来刷新播放器

的确简洁有力,这样刷新播放器直接请求的就是dash链接,没有要hook flv的烦恼 这一串代码我是看不太懂了,尤其两个指令之间不用分号而是逗号是什么鬼,逗号编辑器会提示语法有问题,改成分号似乎也没什么不妥。 再次感谢你的辛苦研究。

另外你的发现让我想到了另一个未解决的问题,不知道有没有刷新评论区的简洁而有力的调用。要知道av页切p是不会刷新评论区的,番剧页是会的,而我借用av页实现的“播放全部收藏”的功能,切p时其他信息我可以手动更新,评论区实在太复杂。如果有一个调用传入几个参数就能直接刷新评论区就好了。但也可能并不存在吧。

§
Geplaatst: 07-06-2020
Bijgewerkt: 07-06-2020

@MotooriKashin 说道:

@wly5556 说道: 发现脚本video.b1b7706abd590dd295794f540f7669a5d8d978b3.js中负责切p的调用简介有力,可以用来刷新播放器

的确简洁有力,这样刷新播放器直接请求的就是dash链接,没有要hook flv的烦恼 这一串代码我是看不太懂了,尤其两个指令之间不用分号而是逗号是什么鬼,逗号编辑器会提示语法有问题,改成分号似乎也没什么不妥。 再次感谢你的辛苦研究。

另外你的发现让我想到了另一个未解决的问题,不知道有没有刷新评论区的简洁而有力的调用。要知道av页切p是不会刷新评论区的,番剧页是会的,而我借用av页实现的“播放全部收藏”的功能,切p时其他信息我可以手动更新,评论区实在太复杂。如果有一个调用传入几个参数就能直接刷新评论区就好了。但也可能并不存在吧。

试着找了找,同样是在video.b1b7706abd590dd295794f540f7669a5d8d978b3.js里,这部分用来初始化评论


            $(".comment").find("*").off(),
            $(".comment").html(""),
            $(".comment ~ .b-head .results").html("");
            var e, i = "";
            (e = window.location.href.match(/#fb,([0-9]+),([0-9]+),([0-9]+),(.+)$/)) ? i = e[3] : (e = window.location.href.match(/#reply([0-9]+)$/)) && (i = e[1]),
            new bbComment(".comment",this.aid,1,t,i)

其中bbComment的参数t是用户账号信息,可用unsafeWindow.UserStatus.userInfo代替

§
Geplaatst: 07-06-2020

@wly5556 说道:

@MotooriKashin 说道:

@wly5556 说道: 发现脚本video.b1b7706abd590dd295794f540f7669a5d8d978b3.js中负责切p的调用简介有力,可以用来刷新播放器

的确简洁有力,这样刷新播放器直接请求的就是dash链接,没有要hook flv的烦恼 这一串代码我是看不太懂了,尤其两个指令之间不用分号而是逗号是什么鬼,逗号编辑器会提示语法有问题,改成分号似乎也没什么不妥。 再次感谢你的辛苦研究。

另外你的发现让我想到了另一个未解决的问题,不知道有没有刷新评论区的简洁而有力的调用。要知道av页切p是不会刷新评论区的,番剧页是会的,而我借用av页实现的“播放全部收藏”的功能,切p时其他信息我可以手动更新,评论区实在太复杂。如果有一个调用传入几个参数就能直接刷新评论区就好了。但也可能并不存在吧。

试着找了找,同样是在video.b1b7706abd590dd295794f540f7669a5d8d978b3.js里,这部分用来初始化评论


            $(".comment").find("*").off(),
            $(".comment").html(""),
            $(".comment ~ .b-head .results").html("");
            var e, i = "";
            (e = window.location.href.match(/#fb,([0-9]+),([0-9]+),([0-9]+),(.+)$/)) ? i = e[3] : (e = window.location.href.match(/#reply([0-9]+)$/)) && (i = e[1]),
            new bbComment(".comment",this.aid,1,t,i)

其中bbComment的参数t是用户账号信息,在header.js里请求/x/web-interface/nav得到,不用做修改

哇!这也太强了!我一直以为在comment.min.js里!

§
Geplaatst: 07-06-2020
Bijgewerkt: 07-06-2020

其中bbComment的参数t是用户账号信息,在header.js里请求/x/web-interface/nav得到,不用做修改 window.UserStatus.userInfo可以直接用作参数t


触发评论审核机制了,不能及时回复... 也没多强啦,花时间翻调用栈能发现很多 video.b1b7706abd590dd295794f540f7669a5d8d978b3.js肯定有更多东西可以找出来 b站的开发没有把混淆拉满,真是好事

§
Geplaatst: 07-06-2020
Bijgewerkt: 07-06-2020

@wly5556 说道:

其中bbComment的参数t是用户账号信息,在header.js里请求/x/web-interface/nav得到,不用做修改 window.UserStatus.userInfo可以直接用作参数t


触发评论审核机制了,不能及时回复... 也没多强啦,花时间翻调用栈能发现很多 video.b1b7706abd590dd295794f540f7669a5d8d978b3.js肯定有更多东西可以找出来 b站的开发没有把混淆拉满,真是好事

感谢。调试什么的我真不会,bilibiliPlayer调用是直接在网页源代码里找到的=>范例

var player = new bilibiliPlayer({
        aid: GetUrlValue('aid'),
        cid: GetUrlValue('cid'),
        bvid: GetUrlValue('bvid'),
        show_bv: window.show_bv,
        danmaku: GetUrlValue('danmaku') !== null ? (GetUrlValue('danmaku') == 0 ? false : true) : true,
        autoplay: GetUrlValue('autoplay') ? true : false,
        as_wide: GetUrlValue('as_wide') ? 1 : false,
        player_type: GetUrlValue('player_type') || 0,
        pre_ad: GetUrlValue('pre_ad') || 0,
        lastplaytime: GetUrlValue('lastplaytime'),
        enable_ssl: GetUrlValue('enable_ssl') || 1,
        enable_ssl_resolve: GetUrlValue('enable_ssl_resolve') !== null ? (GetUrlValue('enable_ssl_resolve') == 0 ? false : true) : true,
        enable_ssl_stream: GetUrlValue('enable_ssl_stream') !== null ? (GetUrlValue('enable_ssl_stream') == 0 ? false : true) : true,
        extra_params: GetUrlValue('urlparam') ? decodeURIComponent(GetUrlValue('urlparam')) : null,
        seasonId: GetUrlValue('seasonId'),
        episodeId: GetUrlValue('episodeId'),
        season_type: GetUrlValue('season_type'),
        pb: GetUrlValue('pb'),
        last_ep_id: GetUrlValue('last_ep_id'),
        has_next: GetUrlValue('has_next'),
        b: GetUrlValue('b'),
        p: GetUrlValue('p') || 1,
        t: GetUrlValue('t'),
        d: GetUrlValue('d'),
        record: record
    });

阅读video.b1b7706abd590dd295794f540f7669a5d8d978b3.js那种函数名只有一个两个字母的实在头疼。也曾试过直接在js文件里添加debugger命令,step两下就不知道跑哪里去了。

Reactie plaatsen

Log in om antwoord te geven.