# 工作流程

是时候让你了解一下我的工作方式了。

# url 解析

最开始,我会解析你的 url 类型,依此送入 bangumi API 解析器 (opens new window)或者 acg_video API 解析器 (opens new window)

# 列表获取

两个解析器会从当前 url 中获取关键信息,并通过 B 站的相关 API 中获取整个播放列表,番剧自然就是该番该季的全部剧集,而投稿视频则是各 P 的信息。

# 视频链接获取

进一步地,通过 B 站相关 API 来获取各个视频的链接。

这里视频链接的获取当前是有多种格式可选的,B 站早期使用的是 Flash 播放器,自然使用的是 flv 格式的视频,B 站的 flv 视频大多是分段的,因此下载之后需要合并。

后来 B 站采用 HTML5 播放器的时候貌似也在使用 flv 格式 (opens new window),当然用的 API 应当也是 flv 的 API。

现在的 HTML5 播放器返回的是通过 dash 方式组织的 m4s 格式的文件 (opens new window),一个是音频文件,另一个自然就是视频文件咯。

除此之外,还可以请求出投稿视频的 mp4 格式文件,但一般清晰度并不会太高,而且清晰度也不能自己指定,限制还是蛮多的。

# 弹幕、字幕获取

当然,看 B 站视频的话弹幕是不可或缺的,因此我会帮你自动下载 xml 格式的弹幕。

有些视频存在字幕,因此也会一并下载。

# 视频下载

此时,由于每个视频的真实 url 我们都已经得到了,因此就可以直接下载咯~

为了提高下载速度,我会同时幻化出多个分身(子线程),另外我还会将每个视频切成小块,将每个小块分发给一个分身来下载。

当然,当一个视频块下载完成需要合并,这个过程会由下载最后那个块的分身来完成。

另外我还安排了三个分身用于视频片段的合并,如果一个视频所有片段都下载完成,就会通知她们进行合并。

什么?你问我我在干嘛?我会在旁边监督她们的啦,同时会告诉你她们的进度,嘻嘻~