Skip to content
This repository has been archived by the owner on Nov 3, 2023. It is now read-only.

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

Open
SukkaW opened this issue Sep 7, 2019 · 1 comment
Open

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

SukkaW opened this issue Sep 7, 2019 · 1 comment

Comments

@SukkaW
Copy link
Owner

SukkaW commented Sep 7, 2019

#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 不改变
@Dora21122020
Copy link

修复有望么?

Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants