主权级下载器:在 YouTube 的 n-sig 迷雾中开工
[!TIP] 受众:对自托管工具感兴趣、经常与各种“限制”博弈的开发者。 核心目标:构建一个完全受控的 YouTube 媒体采集系统,解决 n challenge 签名挑战。 问题-方案映射: 登录墙/Cookie $\rightarrow$ Manifest v3 浏览器插件同步 动态签名 (n-sig) $\rightarrow$ Docker 内置 External JS Solver (node) 实时观测 $\rightarrow$ Socket.io 流式转发 stdout 最近在折腾自己的“数字主权”基础设施,其中一个刚需就是 YouTube 下载。市面上的工具很多,但随着 YouTube 对 n-sig(一种通过混淆 JS 动态生成的签名)的限制加码,很多开源项目开始在大音轨下载上“翻车”。 作为一个写了 20 年代码的老兵,我最受不了的就是“工具不可控”。于是,我把这套老伙计重新打磨了一下,做了一个“主权级”的架构。 1. 架构:为什么非要搞这么复杂? 很多人觉得 yt-dlp 一行命令能解决的事,为什么要搞插件、Docker 和后端? 答案是:骨感现实。 Cookie 维护:手动导 cookies.txt 太脏。我写了一个 Manifest v3 插件,点一下直接同步到云端。 环境隔离:我的开发机是 Windows,但下载器必须部署在 Linux Docker 里,且需要精准控制 ffmpeg 和 yt-dlp 的版本。 这就是我们的“三足鼎立”: 插件 (Bridge):负责打通浏览器会话。 后端 (Engine):Node.js + Socket.io,负责进程管理和实时日志。 容器 (Infra):解决一切环境依赖。 2. 泥地打滚:解决 n-sig 的深层逻辑 前阵子,我的下载器突然报错:n challenge solving failed。这是 YouTube 升级了混淆逻辑,yt-dlp 默认的 Python 模拟器解不动了。 ...