有数字版权保护的,不下
Widevine、FairPlay、PlayReady 这几样是版权方给视频加的保护措施。 遇到这类视频,VGrab 会认出来,在界面上明说「这个视频有版权保护,下不了」,然后停下。
这不是能力问题,是我们不做的事。解开版权保护属于规避保护措施,不是技术难题 —— 所以扩展里不会有这方面的任何代码,将来也不会加。
YouTube,不做
这件事我们真的去看了一遍,不是凭印象说的:在真实的播放页面上把播放时发出去的请求抓下来看, 结论是三道坎,性质不一样:
- 格式不同。它用的传法和普通网站不一样,画面和声音分两路传, 页面上一条 m3u8 都没有。这一条只是工程量,不涉及对抗。
- 访问控制。视频地址有有效期、绑着请求方的地址、带两道签名。 这些主要是防盗链和防滥用,顺带让下载变难。
- 专门针对下载的防护。地址里有一个限速参数,算不对服务器就慢慢喂; 算它的那段代码藏在会变的播放器脚本里,要拿到可用的地址就得去逆向那段代码。
第三条是我们停下的地方。这个项目一开始就写下了两条硬约束: 遇到人机验证就停下来报错、不去伪装成人类;不碰版权保护。 逆向人家专门为了防下载而设的东西,是同一类事。所以不做。
还有一层现实原因:应用商店的开发者政策本来就不允许扩展下载 YouTube 的内容。 同类扩展的商店页面上也都写着这一条。
撞上人机验证,也停
有些网站会弹出「正在进行安全验证」那种页面。VGrab 不会去伪造浏览器指纹、 不会去接打码服务、不会用任何绕过验证的办法。
正确的做法只有一条:由你自己在浏览器里正常打开那一页、正常过掉验证, 扩展读的就是你真实浏览出来的那一页。扩展这个形态天然就是这么工作的 —— 它不替你访问网站,只是把你已经打开的那一页里的东西整理出来。
那还剩下什么
剩下的是绝大多数:普通网站上的切片流(m3u8、DASH)、 一整个文件的 MP4 / WEBM / FLV、AES-128 加密的切片流、 画面和声音分两条轨传的、以及不交出地址的播放器和直播(用录制)。
换句话说,VGrab 做的是把你已经能看的东西存下来, 不是把你看不到的东西弄出来。这条线以后也不会挪。