vf

video-funnel

让你在线看视频也能达到多线程下载的速度

Showing:

Popularity

Downloads/wk

0

GitHub Stars

96

Maintenance

Last Commit

2yrs ago

Contributors

4

Package

Dependencies

5

License

MIT

Categories

Readme

Video Funnel

PyPI version

让你在线看视频也能达到多线程下载的速度

马上使用:

  1. PyPI 安装:
$ pip(3) install --user video_funnel
# or
$ sudo pip(3) install video_funnel
  1. 启动 video_funnel 的服务器:
$ vf -u http://pcs.baidu.com/... &
* Listening at port 8080 ...

百度网盘的直链有很多油猴脚本可以获取,比如这个,注意加上 Cookie 参数。

  1. vlc 播放:
$ vlc http://localhost:8080

mpv 播放时会出现 Seek failed 的错误,原因未知(如果有路过的大神遇见过类似情况,请一定给我解释下~) #2

另外 @Zxilly 贡献了个 Web UI,启动 vf 时不加 -u 参数即可使用。

动机:

众所周知,百度网盘之类产品的视频在线播放非常模糊,下载吧又限速,于是我写了 aiodl 这个下载器,通过 EX-百度云盘 获取的直链来“多线程”下载。可是每次都要下载完才能看又十分不爽,直接用 mpv 之类的播放器播放直链又因为限速的原因根本没法看,遂有了本项目。

实现思路:

  1. 先将视频按照一定大小分块。块的大小根据视频的清晰度而异,可通过命令行参数 --block-size/-b 来指定,默认为 4MB 。
  2. 对于上一步中的一个块,再次分块——为区别改叫切片,启动多个协程来下载这些切片,以实现“多线程”提速的目的。块和切片大小一起决定了有多少个连接在同时下载。切片的大小通过 --piece-size/-p 来指定,默认为 1MB 。即默认有 4 个连接同时下载。
  3. 一个块中的切片全部下载完后,就可以将数据传给播放器了。当播放器播放这一块的时候,回到第 2 步下载下一块数据。为节省内存,设置了在内存中最多存在 2 个下载完而又没有传给播放器的块。
  4. 该如何把数据传给播放器呢?我最初的设想是通过标准输出,这样简单好写。但 stdio 是无法 seek 的,这就意味着你只能从视频的开头看起,无法快进 :P 现在的解决方案是用 HTTP 协议与播放器传输数据。需要快进的时候播放器发送 HTTP Range 请求,video_funnel 将请求中的范围经过分块、切片后“多线程”下载。

Rate & Review

Great Documentation0
Easy to Use0
Performant0
Highly Customizable0
Bleeding Edge0
Responsive Maintainers0
Poor Documentation0
Hard to Use0
Slow0
Buggy0
Abandoned0
Unwelcoming Community0
100
No reviews found
Be the first to rate

Alternatives

No alternatives found

Tutorials

No tutorials found
Add a tutorial