NobyDa / Script

This project is based on the scripting capabilities of several excellent iOS proxy tools (e.g. Surge, Quantumult X)
GNU General Public License v3.0
8.05k stars 3.19k forks source link

关于bili换区脚本时常反复切换区域的问题 #385

Closed pipixia244 closed 2 years ago

pipixia244 commented 2 years ago

使用脚本后,如先观看一港澳台番剧,再退出界面点击另一个港澳台番剧,会出现如图1的界面,点击重新加载后可以正常播放。 mitm正确添加,正则和js内注释一致,203.107.1.1/24的reject规则也正确填写并应用。 查询日志(如图2)发现在规则本来就指向台湾节点的情况下,切换番剧让规则重新选择了direct,并再次重新选择到台湾节点。 推测此原因导致该问题出现(因为有时脚本没有切换到direct再切换到台湾节点的时候不会触发该问题) 请问这个问题可以被修复吗?感谢~ 824AEA81-3C9B-4514-BE9F-6DF020823AEE 2700CF72-66F7-4EF8-9A8C-667F49C891B1

NobyDa commented 2 years ago

这是正常的,具体解释起来比较复杂,涉及到切换逻辑以及决策逻辑:

  1. 目前的"切换"逻辑依赖bilibili客户端自身的"超时重试"的逻辑,一个港台番剧页面的请求经过脚本"决策"后认为需要"切换"策略,会在修改策略后直接返回页面超时给bilibili客户端,客户端遇到超时触发重试,重试的请求经过新切换的策略完成连接;但如果bilibili客户端认为"不需要"重试或重试太多次仍然连接失败,则会出现图中的内容加载失败(该问题已脱离脚本范畴故无法解决)

  2. 目前其中一个"决策"逻辑为退出番剧页面后会立刻切换回直连策略,以避免后续播放非番剧视频时使用港澳台策略;如需取消该行为,则需把第一条匹配URL正则 ^https:\/\/ap(p|i)\.bili(bili|api)\.(com|net)\/(pgc\/view\/v\d\/app\/season|x\/v\d\/search\/defaultwords)\?access_key 修改为 ^https:\/\/ap(p|i)\.bili(bili|api)\.(com|net)\/pgc\/view\/v\d\/app\/season\?access_key

pipixia244 commented 2 years ago

原来如此,我还观察到下面两个现象

  1. 如果我打开客户端后对番剧的规则指定一个香港节点,然后打开一个需要台湾结点才能看的番剧,也会从香港节点切换到direct,然后再切换到台湾节点,如图1(两次切换间隔不到3s,其中番剧用为香港节点)。此时我没有从任何番剧/视频退出,而且打开首个番剧前确认规则处于香港节点状态。也就是说在进入番剧的时候,脚本仍然切换了一次direct。但查看源码发现并没有切换两次,是否可能是“在打开番剧的时候,有两个请求都被抓取了,其中一个切换到了direct,后面的切换到了目标结点“的情况呢?这个有办法解决吗? 补充:也存在退出番剧界面也不会切换到direct的情况,如从我的收藏-追番-在看中点开番剧再返回,则不会触发脚本切换到direct
  2. 观看非番剧视频时,主要下载视频数据的域名为data.bilibili.com并没有在番剧规则内,并且手动指定香港节点后打开非番剧视频并不会切换到direct,再根据quanx自带的网速表显示速度全在direct,是否观看普通视频时,流量根本不会走番剧规则的结点呢?这样的话,为什么不可以直接如上述2中所说更改正则,取消该行为呢? 对脚本的理解还不够,如有理解不对的地方还请指正,谢谢! image
NobyDa commented 2 years ago
  1. 脚本无法直接得知用户是否"退出番剧页面",只能通过退出番剧页面后所发出的请求来间接得知,但这种方法在某些情况下一定会误判,因为该请求不一定只在"退出番剧页面"时会出现,例如从后台进入bilibili客户端也可能会触发请求,进而导致你所提到的问题;该问题可通过前面提到的修改匹配URL正则解决。修改后理论上只有在打开番剧页面才会触发脚本决策

  2. 并没有仔细分析过非番剧的数据流,且规则集内也有其他流媒体的域名。自动切回direct的功能记得是某个issues提的需求,觉得实现没什么难度顺手就加上了

  3. 那张日志图的时间点没什么参考意义,一个是切换台湾成功的时间,另一个是查询完豆瓣评分的时间;根据那张日志图和你的描述,理论上运行逻辑为:

    • surge手动切换至香港策略
    • 打开bilibil触发切回direct请求(未打开番剧页面)
    • 打开番剧(变装娃娃)
    • 脚本决策后使用后备策略(番剧404已被屏蔽)
    • 重试成功后的请求再次被QX劫持以查询豆瓣评分
    • 查询完成,脚本结束
pipixia244 commented 2 years ago

感谢回复!

Fannncy commented 1 year ago

让新春的风吹进你的屋子让新春的雪飞进你的屋子让我新春的祝愿                      飘进你的心坎新春贺喜