在线工具
FlowPick 除了浏览器扩展外,还提供了两个独立的在线工具页面,无需安装任何软件即可下载流媒体。这些工具与扩展共享相同的下载引擎,但运行在网页环境中。
什么时候用在线工具
在线工具是扩展的补充方案,适合以下场景:
| 场景 | 推荐方式 | 原因 |
|---|---|---|
| 日常浏览中随时下载 | 浏览器扩展 | 自动检测,一键下载 |
| 已有流地址,只想快速下载 | 在线工具 | 无需安装,打开即用 |
| 无法安装扩展的环境(公司电脑、公共设备) | 在线工具 | 纯网页,无安装要求 |
| 需要批量下载多个已知 URL | 在线工具 + 批量下载 | 逐个粘贴,队列管理 |
| 遇到 CORS 限制 | 浏览器扩展 | 扩展权限可绕过同源策略 |
与扩展的区别
| 特性 | 浏览器扩展 | 在线工具 |
|---|---|---|
| 自动检测媒体 | 支持,页面加载时自动嗅探 | 不支持,需手动粘贴 URL |
| 安装要求 | 需要安装扩展 | 无需安装,打开网页即可 |
| 跨域限制 | 扩展权限可绕过部分限制 | 受浏览器同源策略约束 |
| 下载引擎 | 相同 | 相同 |
| 保存目录选择 | 支持 | 支持 |
| 适用场景 | 日常浏览中的随时下载 | 已有流 URL 的快速下载 |
useStreamMerge),下载速度、合并逻辑、加密解密能力完全一致。唯一的区别在于媒体检测方式。M3U8/HLS 流媒体下载器
访问路径:/m3u8-downloader

功能概述
M3U8 下载器专门处理 HLS(HTTP Live Streaming)流媒体协议。支持 Master Playlist 和 Media Playlist 两种清单格式。
关于 HLS 协议的详细原理(Master Playlist vs Media Playlist、分片结构、加密机制),请参阅 视频嗅探 — HLS 流。
使用流程
- 获取 M3U8 URL:从浏览器开发者工具(Network 面板)或第三方工具获取
.m3u8地址 - 粘贴 URL:将地址粘贴到输入框中,工具会自动解析清单
- 选择画质:如果是 Master Playlist,从画质列表中选择目标分辨率
- 配置参数:设置并发线程数、输出格式和文件名
- 开始下载:点击下载按钮,工具会自动下载所有分片并合并
支持的清单类型
Master Playlist(多码率清单)
包含多个不同画质的子流。解析后显示画质选择器:
1080p · 5.2 Mbps · avc1.640028
720p · 2.8 Mbps · avc1.64001f
480p · 1.2 Mbps · avc1.64001e
选择某个画质后,工具会下载对应的 Media Playlist 并获取分片列表。

Media Playlist(单码率清单)
直接包含 TS 分片列表,无需选择画质。解析后直接显示分片数量和预估大小。
加密支持
M3U8 下载器支持以下加密方式:
| 加密方式 | 支持状态 | 说明 |
|---|---|---|
| AES-128 CBC | 完整支持 | 自动获取密钥并解密分片 |
| SAMPLE-AES | 不支持 | 需要专用解码器 |
| Clear Key | 不支持 | DRM 保护内容 |
| Widevine / PlayReady | 不支持 | 商业 DRM,无法解密 |
对于 AES-128 加密流,工具会:
- 解析
#EXT-X-KEY标签获取密钥 URI - 下载密钥文件
- 使用 Web Crypto API(
crypto.subtle.decrypt)在浏览器中解密每个分片 - 将解密后的分片合并为最终文件
分片下载与合并
下载流程分为三个阶段:
阶段一:解析(0% ~ 5%)
- 下载并解析 M3U8 清单
- 提取分片 URI 列表
- 采样预估总大小
阶段二:下载(5% ~ 85%)
- 多线程并发下载分片
- 实时显示进度、速度和预计剩余时间
- 自动重试失败的分片(最多 3 次,指数退避)
阶段三:合并(85% ~ 100%)
- 将分片按顺序拼接
- 对于 TS 格式:直接二进制拼接(最快)
- 对于 MP4 输出:使用 FFmpeg WASM 进行容器转换
进度信息
下载过程中实时显示:
| 指标 | 说明 |
|---|---|
| 进度百分比 | 当前完成的分片数 / 总分片数 |
| 下载速度 | 基于滑动窗口的实时速度估算 |
| 预计剩余时间 | 根据当前速度和剩余分片数计算 |
| 已下载字节数 | 累计下载的数据量 |

MPD/DASH 流媒体下载器
访问路径:/dash-downloader

功能概述
DASH 下载器处理 MPEG-DASH 流媒体协议。与 HLS 不同,DASH 流的视频和音频通常是分离的,需要分别下载后合并。
关于 DASH 协议的详细原理(MPD 结构、音视频分离、FMP4 封装),请参阅 视频嗅探 — DASH 流。
使用流程
- 获取 MPD URL:从浏览器开发者工具获取
.mpd地址 - 粘贴 URL:将地址粘贴到输入框中
- 选择画质:从解析出的视频流列表中选择
- 配置参数:设置并发线程数和文件名
- 开始下载:工具自动下载视频和音频分片并合并
MPD 清单解析
DASH 下载器使用 mpd-parser 库解析 MPD 清单,提取以下信息:
- Period:时间段定义
- AdaptationSet:媒体类型分组(视频/音频)
- Representation:具体的画质/码率选项
- SegmentTemplate / SegmentList:分片 URL 模式
解析结果按码率降序排列,显示格式:
1080p · 5.2 Mbps · avc1.640028
720p · 2.8 Mbps · avc1.64001f
音视频分离处理
DASH 流的一个关键特征是视频和音频轨道分离。下载器处理流程:
- 解析 MPD,识别视频和音频 AdaptationSet
- 用户选择视频画质后,自动匹配最佳音频流(通常选最高码率)
- 并行下载视频分片和音频分片
- 使用 FFmpeg WASM 将视频和音频合并为单个 MP4 文件
合并命令等价于:
ffmpeg -f concat -i video_list.txt -f concat -i audio_list.txt \
-c:v copy -c:a copy -movflags +faststart output.mp4
FMP4 支持
对于使用 FMP4(Fragmented MP4)封装的 DASH 流,下载器支持:
- 识别
urn:mpeg:dash:ffmpeg:2013等 FMP4 标识 - 下载初始化分片(init segment)和媒体分片
- 使用 FFmpeg WASM 将 FMP4 分片重组为标准 MP4
加密支持
| 加密方式 | 支持状态 |
|---|---|
| AES-128 CTR | 部分支持 |
| Widevine | 不支持 |
| PlayReady | 不支持 |
| ClearKey | 不支持 |
通用功能
保存目录选择
两个在线工具都支持 File System Access API 的目录持久化功能:
- 点击"选择保存目录"按钮
- 在弹出的系统对话框中选择目标文件夹
- 授权后,所有后续下载直接写入该目录
- 目录名显示在界面上,可随时清除或更换

技术实现:
- 使用
window.showDirectoryPicker()获取目录句柄 - 通过
handle.requestPermission({ mode: 'readwrite' })请求持久化权限 - 目录名缓存在
localStorage中用于 UI 显示 - 权限状态通过
navigator.permissions.query()静默检查
写入策略优先级
下载引擎按以下优先级选择文件写入方式:
| 优先级 | 策略 | 内存占用 | 适用条件 |
|---|---|---|---|
| 1 | File System Access API | 极低(流式写入) | Chrome 86+、Edge 86+ |
| 2 | StreamSaver.js | 极低(流式写入) | 需要 Service Worker 支持 |
| 3 | Blob 下载 | 等于文件大小 | 兜底方案,有 1.5GB 上限 |
错误处理
下载过程中可能遇到的错误及处理方式:
| 错误类型 | 原因 | 处理方式 |
|---|---|---|
| HTTP 403 | 资源需要认证或 Referer 校验 | 提示用户检查 URL 是否有效 |
| HTTP 404 | 分片已过期或 URL 错误 | 提示用户重新获取流地址 |
| CORS 错误 | 跨域请求被服务器拒绝 | 建议使用浏览器扩展版本 |
| 网络错误 | 连接中断或超时 | 自动重试 3 次 |
| 加密不支持 | 遇到不支持的加密方式 | 明确提示无法处理 |
| DRM 保护 | 内容受 DRM 保护 | 提示用户该内容无法下载 |
下载完成后
下载完成后提供以下操作:
- 复制路径:将文件保存路径复制到剪贴板
- 下载另一个:重置状态,准备下一次下载
- 清除保存目录:移除目录授权
技术限制
在线工具与扩展版本相比存在以下限制:
- 跨域限制:浏览器同源策略可能阻止下载某些 CDN 上的分片。扩展版本通过
webRequest权限可以绕过部分限制 - Referer 校验:部分流媒体服务器要求特定的 Referer 头,在线工具无法自定义
- Service Worker 依赖:StreamSaver 写入策略需要 Service Worker 支持,且要求页面设置正确的 COEP/COOP 头
- SharedArrayBuffer:FFmpeg WASM 多线程模式需要
SharedArrayBuffer,这要求页面设置Cross-Origin-Isolated头
FlowPick 网站已配置了必要的安全头以支持这些功能:
Cross-Origin-Opener-Policy: same-origin
Cross-Origin-Embedder-Policy: require-corp
典型使用场景
场景一:快速下载已知流地址
获取 M3U8 URL → 打开 /m3u8-downloader → 粘贴 → 选择画质 → 下载
适合已经通过 F12 开发者工具获取到流地址的场景。参考 视频平台 — 手动获取 URL。
场景二:临时设备下载
公共电脑 → 打开 FlowPick 网站 → 粘贴流地址 → 下载到 U 盘
无需安装任何软件,适合公司电脑、学校机房、网吧等无法安装扩展的环境。
场景三:批量下载多个流
收集所有 M3U8 URL → 逐个在在线工具中下载 → 队列自动管理
适合需要下载多个课程视频或系列视频的场景。参考 在线课程下载。