跳到正文

FluxDown 0.5.0 原生 GPUI 客户端正式发布——作者来信:为什么我把整个界面从头重写了一遍。去看看

FluxDown
下载 文档 定价 更新日志 赞助
下载协议 HLS / DASH

英文原文在此译文之后有更新,内容可能已过时。 帮我们更新 →

下载协议

HLS / DASH

流媒体视频下载——多码率画质选择、AES-128 解密与分段合并,支持 M3U8 与 MPD。

编辑此页

HLS(HTTP Live Streaming,.m3u8 播放列表)和 DASH(基于 HTTP 的动态自适应流,.mpd 清单)是大多数视频网站用来提供流媒体视频的两种格式:视频不是一个整体文件,而是被拆成播放列表/清单里列出的许多小分段,通常还有多档画质。FluxDown 的引擎会读取播放列表,下载每一个分段,并把它们重新拼接成一个可播放的完整文件——你不需要自己去一个个抓那几十上百个小分片。

识别流媒体

HLS/DASH 下载通常从 FluxDown 浏览器扩展发起——它会按标签页嗅探网络流量,在你浏览或播放视频时识别出 HLS/DASH 清单(包括 HLS 的 application/vnd.apple.mpegurl 内容类型),让你一键抓取。如果你手上已经有直接的 .m3u8 或 .mpd 地址,也可以手动粘贴到新建下载对话框里。

画质选择

当播放列表提供不止一档码率时——HLS 的主播放列表,或 DASH 的多个 Representation——FluxDown 会在开始下载前弹出画质选择对话框。每个选项都会列出带宽(例如”5.2 Mbps”)和分辨率,常见高度会显示为易读的标签(4K、2K、1080p、720p、480p、360p)。选一个后就会以该画质开始下载。

如果对话框无法弹出(比如应用窗口还没就绪),FluxDown 会自动选择带宽最高的选项,而不是卡住下载。

AES-128 解密(HLS)

不少 HLS 流会按 RFC 8216 用 AES-128-CBC 加密分段。FluxDown 会自动获取播放列表引用的解密密钥——密钥有缓存,共用同一把密钥的分段不会重复请求——并在下载的同时解密每一个分段。这个过程不需要你做任何配置,加密和未加密的播放列表在使用体验上没有区别。

出于隐私考虑,Cookie 只会转发给与播放列表同源的分段/密钥请求;即使播放列表里引用了不同源的 CDN 地址,也绝不会把 Cookie 发过去。

分段下载与合并

分段下载使用有限并发(默认最多同时 8 个,上限 16,可通过设置 → 下载 → 默认线程数调整——与 HTTP 下载共用同一个开关),下载到的分段边解密边处理,但最终会严格按播放列表顺序写入输出文件,因此成品文件与顺序下载的结果完全一致。下载失败的分段最多重试 3 次,指数退避(2 秒、再 4 秒),超过后整个任务才会失败。

DASH 支持

DASH 的支持程度比 HLS 更基础:FluxDown 解析 MPD 清单,下载你选中的 Representation 对应的分段。DASH 流通常把音频和视频拆成两条独立轨道;这种情况下,如果系统安装了 ffmpeg,FluxDown 会自动用它(纯流复制,不重新编码,速度很快)把两者合并成一个文件。如果系统没有 ffmpeg,音频和视频会保留为两个独立文件(例如 video.mp4 和 video.audio.m4a),需要你自己合并。

常见问题与限制

视频和音频下载成了两个独立文件。 这是因为系统没有安装 ffmpeg——FluxDown 需要它来把 DASH 拆分的音视频轨道合并成一个文件。安装 ffmpeg 后,之后的 DASH 下载会自动合并;已经下载好的文件,可以自己执行 ffmpeg -i video.mp4 -i video.audio.m4a -c copy output.mp4 手动合并。

列表里没有我预期的画质选项。 FluxDown 展示的就是主播放列表/清单里实际声明的选项。如果某个站点把更高画质限定给登录用户才能看到,请确认下载是通过浏览器扩展携带你登录会话的 Cookie 捕获的,而不是手动粘贴地址。

直播流。 HLS 直播(播放列表没有 EXT-X-ENDLIST)会作为录制任务处理:FluxDown 从播放列表当前列出的分片开始,按 EXT-X-TARGETDURATION(限制在 1–10 秒)轮询播放列表,只追加新分片;直播总大小未知,进度按已录字节显示。播放列表出现 EXT-X-ENDLIST、你暂停或取消任务、或播放列表连续 3 次拉取失败时录制结束,已录内容会照常整理成完成文件(有 ffmpeg 时转成 MP4,独立音轨会合并)——因此暂停或取消直播任务等同于「停止并保存」,不能从断点续录。录制期间若分片滚出播放列表(网络太慢),这些分片会被跳过,并在任务活动里记录警告。DASH 直播(type=dynamic)暂不支持。

这页文档有问题?

页面
操作
↑↓选择打开