云服务很方便, 直到我收藏的视频莫名其妙地被删掉了.
现在都用上了 HTML5 video, 理论上只要能够下载 HTML5 video 就能从大多网站上下载视频了.
所以直接 wget video.src 不就万事大吉了?
实际上 B 站和 youtube 的 video 标签长这样:
<video src="blob:https://www.youtube.com/xxx"></video>
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
我们更关心如何下载它.
看起来劫持浏览器请求就能拿到视频数据, 但是实际执行起来, 判断识别组合, 都有难度.
前面代码展示了 blob URL 指向了 mediaSource object. 实际上就是 mediaSource 内包含了视频的数据,
appendBuffer()
方法向 mediaSource 内 feed 数据, 我们是否可以劫持这个方法拿数据?
可行! 为此我还写了一篇博客和相应的包:
https://www.tiaoxingyubolang.com/zh/article/2020-10-09_mediasource
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.