云服务很方便, 直到我收藏的视频莫名其妙地被删掉了.
现在都用上了 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
1
kookpua Oct 9, 2020 via iPhone
b 站的客户端不是可以下载视频么
|
2
ipadpro4k Oct 9, 2020 via iPhone
拜膜大佬,写英文博客
|
4
iConnect Oct 9, 2020 via Android
|
5
weak Oct 9, 2020 via Android
IDM 解君愁
|
6
windseeker386 Oct 9, 2020 via iPhone
b 站 ump 版本下载神器,最高分辨率,自动转 mp4 格式,弹幕同步下载
|
8
monkeyWie Oct 9, 2020
这种实现方式做不到断点下载吧?
|
9
Mikewu Oct 9, 2020 via Android
b 站 api 获取视频源文件 cdn 地址,改下 headers 就能直接下载了
|
10
chuankoog OP |
12
kookpua Oct 9, 2020
|
13
TypeError Oct 9, 2020 via Android
我还是喜欢直接用 YouTube-dl 、youget 这些工具,功能多解析全
|