SukkaW/Koolshare-Clash

Do you want to work on this issue?

You can request for a bounty in order to promote it!

关于 YouTube 不能播放的问题 #56

SukkaW posted onGitHub

#36

使用 KoolClash 后 YouTube 不能播放属于已知、且可以稳定复现的问题。这个问题由上游 Clash 导致、与 KoolClash 无关。关于「切换节点后中断已建立的 TCP 连接」的相关提案已经向 Clash 开发者提出。如果你需要解决这个问题,请要求 Clash 开发者实现连接管理器等特性,或由你亲自向 Clash 提交 Pull Request 实现相关特性。

TL; DR

更换节点后,IP 不会实时更新。

复现步骤

  • 重启 Clash
  • 在浏览器中启用 Dev Tools
  • 打开 YouTube,播放任一视频,在 Dev Tools 中 Network 选项卡查看瀑布图,可以看到所有发往 YouTube 视频 CDN 域名的 HTTP 请求全部正常、状态码为 200。
  • 在 Clash Dashboard 中切换 YouTube 使用的节点
  • 刷新 YouTube 页面、或切换别的视频,视频无法继续缓冲、或提示无法播放;所有发往 YouTube 视频 CDN 域名的 HTTP 请求状态码为 403。

问题分析

在更换节点后,Clash 不会终止任何现有的 TCP 连接,因此已经建立的 TCP 连接将会继续使用之前的节点。现代浏览器为了提升性能,都会复用并维持 TCP 连接,在刷新 www.youtube.com 时,与 www.youtube.com 建立的 TCP 连接一般不会重新建立,因此即使更换节点后,www.youtube.com 仍然在通过之前的节点;但是由于不同的视频、CDN 域名一般不同,因此会重新建立 TCP 连接,此时加载视频使用的是更换后的节点。由于请求 www.youtube.com 以及主站其它 API 和请求视频 CDN 的节点不同、IP 不同,触发了 YouTube 视频 CDN 的防盗链机制,阻止了视频的播放。这一防盗链机制可能由托管 Google 全球边缘节点的运营商部署、并非 Google / YouTube 的行为,因此在 YouTube 网页或客户端中可能不会出现防盗链相关提示。

解决方案

  • 更换节点前重启 Clash 以中断任何现有的 TCP 连接,重启 Clash 后更换节点。
  • 向 Clash 提出连接管理器相关特性。
  • 避免使用 url-testload-balance 等会引发节点更改的 type
  • 在服务端部署针对 YouTube 的 SNI 代理服务器,确保更换节点后实际请求 YouTube 的 IP 不改变

修复有望么?

posted by Alifather over 5 years ago

Fund this Issue

$0.00
Funded
Only logged in users can fund an issue

Pull requests