视频下载器、下载器软件模块和分层设计
今年做了一个视频下载器,经过多版迭代,分层和模块划分越来越清晰。整理出经验,分享到这个伟大的平台。
做桌面应用好处是不怕变更传导出去,不合理就改,不怕别人找过来说“怎么结构变了,我也需要改”。
模块,分层设计草图
模块和分层详细说明
下载层
下载分批量下载和单视频下载,不同入口,不同操作,底层调用一样的模块。
m3u8 模块
m3u8文件解析为结构体,结构体序列化m3u8文件。
mpd 模块
mpd文件解析为结构体,结构体序列化mpd文件。
http range 模块
视频服务器端提供http 206服务
客户端实现切片下载,断点续传。
任务层
不论使用哪个模块下载, 都提交进度到任务层, 前端展示任务进度 和 终止任务。
收到终止任务指令,会contenx传导到下载模块 。 因此,在下载模块启动前先生成任务,获取contenx。
视频管理
播放、删除、重命名已下载视频。
下载完产的视频导出成mp4。
第一次用 webapp 实现桌面应用碰到的新情况
任务通知
在web应用中,一个路由会切入全新的页面, 不考虑上个页面做了什么。
在桌面应用中,上个页面提交任务,接下来不管切到哪个新页面, 任务完成后都要右上角提示 任务事件。
个人实现的软件
飞鸟视频下载器,目前m3u8视频完全支持, mpd视频部分支持。
中间版本曾经增加了IPTV检查和视频直播录制, 依赖项导致windows系统使用异常,从v3.x.x 版本移除这俩功能, 聚焦视频下载。
GitHub - youwen21/flybird-m3u8downloader: https://github.com/youwen21/flybird-downloader
最新版v3.3.2最windows平台做了大量优化, 建议windows用户下载最新版本。