muzuiget / dualsub-support

Dualsub - Dual Subtitles for YouTube
https://www.dualsub.xyz/
281 stars 24 forks source link

Netflix字幕问题 #273

Closed xqdoo00o closed 3 years ago

xqdoo00o commented 3 years ago

服务器端只能ipv6解锁netflix,而字幕url中既包含v4域名也包含v6域名。 偶尔会出现第一个字幕url是v4域名的状况,这时就无法下载字幕了,console会出现报错。 建议选取timedtexttracks字幕时,不要默认选第一个字幕url,根据servers的第一个obj里的dns host地址类型选取v4或v6域名。 当然这只对ipv6解锁netflix的人有用。

muzuiget commented 3 years ago

服务器端只能ipv6解锁netflix

意思是你的代理只能用 IPv6 绕过 Netflix 的代理检测?

不过字幕地址的主机部分应该是个域名吧,在 DNS 这层应该会自动解决的。

xqdoo00o commented 3 years ago

事实上,netflix的ipv4开头域名没有AAAA记录,ipv6开头域名才有AAAA记录。 这里可以测试 dns,ipv6-c017-sin001-ix.1.oca.nflxvideo.net,ipv4-c046-sin001-ix.1.oca.nflxvideo.net 因此字幕下载走ipv4地址,但是ipv4并不解锁netflix,console报错,也没有字幕。

image

根据个人测试,上图url中大概40%概率第一个是ipv4开头域名。

muzuiget commented 3 years ago

现在用的是 Object.values(),然后取第 1 个值,因此顺序是不确定的。如果前面那个 key 的数字是越小越优先,那么可以简单对 key 排序取值,这样就不用判断那个地址了,毕竟我也没条件测试。

xqdoo00o commented 3 years ago

现在用的是 Object.values(),然后取第 1 个值,因此顺序是不确定的。如果前面那个 key 的数字是越小越优先,那么可以简单对 key 排序取值,这样就不用判断那个地址了,毕竟我也没条件测试。

也可以不判断域名,ttDownloadables同级obj里有一个cdnlist,里面标注了不同cdn地址对应的rank和id,取rank最小的cdn的id,对应downloadUrls里的value就是正确的url了

image

//

测试了下,cdnlist数组第一个元素永远rank最小,取第一个元素id就好,也不用排序再。应该算是最好的方案了。

muzuiget commented 3 years ago

确定是 rank 越小越优先?可以观察下原生字幕菜单会选择哪个?

看字幕 URL,有 hkg001sin001,似乎就是香港和新加坡的意思,以你的代理,确实是新加坡比香港好?

xqdoo00o commented 3 years ago

确定是 rank 越小越优先?可以观察下原生字幕菜单会选择哪个?

看字幕 URL,有 hkg001sin001,似乎就是香港和新加坡的意思,以你的代理,确实是新加坡比香港好?

确实,因为我就是新加坡的ipv6解锁的,改原生字幕 查看请求 也是走第一个cdn的地址

muzuiget commented 3 years ago

好的,谢谢你提供的信息,下个版本修复。

muzuiget commented 3 years ago

v1.61.0 已发布,试下有没有效果。

xqdoo00o commented 3 years ago

v1.61.0 已发布,试下有没有效果。

有报错,url是undefined. image

muzuiget commented 3 years ago

那个 id 不存在吗?发一下报错时那个字幕数据对象。

xqdoo00o commented 3 years ago

那个 id 不存在吗?发一下报错时那个字幕数据对象。

大概找到问题了,有时候 第一个cdn的id在downloadUrls里并不存在。这里是第三个cdnlist元素 image

、、 用find函数 或者 for循环 找一下第一个不为undedined的url好了

muzuiget commented 3 years ago

v1.61.1 已发布,再试下。

xqdoo00o commented 3 years ago

v1.61.1 已发布,再试下。

可以了,试了好多次 ,没报错,可以正常看👍