从 youtube 和 B 站 下载视频的必要性
云服务很方便, 直到我收藏的视频莫名其妙地被删掉了.
现在都用上了 HTML5 video, 理论上只要能够下载 HTML5 video 就能从大多网站上下载视频了.
所以直接 wget video.src 不就万事大吉了?
实际上 B 站和 youtube 的 video 标签长这样:
<video src=”blob:https://www.youtube.com/xxx”></video>
blob 是什么
blob URL 是作用域仅在本页面的链接, 它是这样创建的:
var mediaSource = new MediaSource(); video.src = URL.createObjectURL(mediaSource); console.log(video.src) // blob:https://xxxxxxx
这里有更好的介绍 mdn: https://developer.mozilla.org/en-US/docs/Web/API/MediaSource
我们更关心如何下载它.
下载 HTML5 video
看起来劫持浏览器请求就能拿到视频数据, 但是实际执行起来, 判断识别组合, 都有难度.
前面代码展示了 blob URL 指向了 mediaSource object. 实际上就是 mediaSource 内包含了视频的数据, appendBuffer()
方法向 mediaSource 内 feed 数据, 我们是否可以劫持这个方法拿数据?
可行! 为此我还写了一篇博客和相应的包:
https://www.tiaoxingyubolang.com/zh/article/2020-10-09_mediasource
https://github.com/derekchuank/videox