视频嗅探
FlowPick 视频检测与下载技术指南,介绍网页视频、直接 MP4 文件、M3U8/HLS 和 MPD/DASH 清单的识别方式,以及媒体轨道、画质和加密流的处理。
FlowPick 通过监控浏览器网络请求自动检测页面上的视频内容,支持流媒体协议(HLS/DASH)和直接视频文件,并能自动解密 AES-128 加密的流。

检测原理
FlowPick 的视频检测基于 Chrome 扩展的 webRequest API,在浏览器网络层拦截请求:
- 网络拦截:扩展通过
webRequest.onBeforeRequest监听所有网络请求,根据响应的Content-Type头识别视频和流媒体资源 - 清单解析:对于 HLS(
.m3u8)和 DASH(.mpd),自动下载并解析清单文件,提取可用的流信息 - 画质分析:从 Master Playlist 中解析所有可用的分辨率和码率选项
- 加密检测:检查是否存在
EXT-X-KEY(HLS)或ContentProtection(DASH)标签,判断是否需要解密 - 资源展示:检测到的视频按类型分类显示在弹出窗口中
检测时机:
- 扩展安装后,需要刷新目标页面才能开始检测
- 流媒体清单通常在视频开始播放时才加载,建议先播放 3-5 秒再打开扩展
- 对于动态加载的视频(如滚动到特定位置才加载),需要触发加载后才能检测到
关于扩展的
webRequest API 权限和 Manifest V3 的限制,请参阅 已知限制 — Manifest V3 限制。关于检测不到媒体时的完整排查流程,请参阅 常见问题排查 — 媒体检测问题。支持的视频格式
流媒体协议
| 协议 | 清单文件 | Content-Type | 说明 |
|---|---|---|---|
| HLS | .m3u8 | application/x-mpegurl | Apple HTTP Live Streaming,最常见的流媒体协议 |
| HLS | .m3u8 | application/vnd.apple.mpegurl | HLS 的 Apple 专用 MIME 类型 |
| DASH | .mpd | application/dash+xml | MPEG-DASH,常用于高质量内容 |
直接视频文件
| Content-Type | 扩展名 | 说明 |
|---|---|---|
video/mp4 | .mp4 | 最通用的视频格式 |
video/x-m4v | .mp4 | iTunes 视频格式 |
video/webm | .webm | 开源 Web 视频格式 |
video/ogg | .ogv | Ogg 容器视频 |
video/x-flv | .flv | Flash 视频(旧格式) |
video/x-matroska | .mkv | Matroska 容器 |
video/quicktime | .mov | Apple QuickTime |
video/x-msvideo | .avi | Windows AVI |
video/3gpp | .3gp | 移动设备视频 |
video/3gpp2 | .3g2 | CDMA 移动设备视频 |
video/mpeg | .mpeg | MPEG 视频 |
HLS(M3U8)流
HLS(HTTP Live Streaming)是 Apple 开发的流媒体协议,也是目前网络上使用最广泛的视频传输方式。Bilibili、腾讯视频、优酷等主流平台均使用 HLS。

Master Playlist vs Media Playlist
HLS 清单分为两种层级:
| 类型 | 内容 | 示例 |
|---|---|---|
| Master Playlist | 列出所有可用的画质变体,每个变体指向一个 Media Playlist | 包含 360p、720p、1080p 等多个流的索引 |
| Media Playlist | 列出具体的 TS 分片 URL 列表 | 包含数百个 .ts 文件的地址 |
FlowPick 自动识别 Master Playlist,解析出所有画质选项供你选择。选择画质后,再下载对应的 Media Playlist 获取分片列表。
Master Playlist (index.m3u8)
│
├── 360p → 360p.m3u8 → segment-001.ts, segment-002.ts, ...
├── 720p → 720p.m3u8 → segment-001.ts, segment-002.ts, ...
└── 1080p → 1080p.m3u8 → segment-001.ts, segment-002.ts, ...
画质选择
从 Master Playlist 解析出的画质选项按码率从高到低排序:
| 画质 | 典型分辨率 | 典型码率 | 适用场景 |
|---|---|---|---|
| 原画/超清 | 1080p+ | 5-12 Mbps | 大屏观看、需要最佳画质 |
| 高清 | 720p | 1.5-3 Mbps | 笔记本观看 |
| 标清 | 480p | 0.8-1.5 Mbps | 小屏幕设备 |
| 流畅 | 360p | 0.4-0.8 Mbps | 仅听声音、移动网络 |
关于画质选择的配置方式(自动/手动),请参阅 配置参考 — 画质选择策略。
分片下载与合并
HLS 视频由大量 TS 分片组成(通常每个分片 2-10 秒)。FlowPick 的处理流程:
- 解析 Media Playlist,获取所有分片 URL
- 多线程并发下载分片(并发数可在设置中调整)
- 下载完成后,将分片合并为单个文件
- 如果选择 MP4 输出,使用 FFmpeg WASM 进行转封装
加密流(AES-128)
部分 HLS 流使用 AES-128 加密保护内容。FlowPick 支持自动解密:
- 检测
#EXT-X-KEY:METHOD=AES-128,URI="..."标签 - 自动下载解密密钥
- 使用 Web Crypto API 在浏览器端解密每个分片
- 解密后的分片正常合并,输出无加密的文件
FlowPick 仅支持 AES-128 加密。使用 Widevine、PlayReady 或 FairPlay 等 DRM 技术的流无法解密。如果检测到 DRM 保护,会显示相应的错误提示。关于 DRM 保护的详细技术说明,请参阅 已知限制 — DRM 保护内容。
DASH(MPD)流
DASH(Dynamic Adaptive Streaming over HTTP)是 MPEG 制定的国际标准流媒体协议,YouTube、Netflix 等平台广泛使用。

DASH 的特点
与 HLS 相比,DASH 有以下特点:
| 特性 | HLS | DASH |
|---|---|---|
| 分片格式 | 通常为 TS | 通常为 FMP4(分段 MP4) |
| 音视频 | 通常合并在一起 | 通常分离为独立轨道 |
| 清单格式 | M3U8(文本) | MPD(XML) |
| 加密 | AES-128 | AES-128 或 DRM |
| 编解码器 | H.264 为主 | H.264、H.265、VP9、AV1 |
音视频分离处理
DASH 的一个关键特点是视频和音频通常分离为独立轨道。FlowPick 的处理流程:
- 解析 MPD 清单,识别视频轨道和音频轨道
- 分别下载视频分片和音频分片
- 下载初始化分片(init segment),包含编解码器配置信息
- 使用 FFmpeg WASM 将视频和音频合并为单个 MP4 文件
MPD 清单
│
├── AdaptationSet: Video (H.264, 1080p)
│ ├── init segment (编解码器配置)
│ ├── segment-001.m4s
│ ├── segment-002.m4s
│ └── ...
│
└── AdaptationSet: Audio (AAC, 128kbps)
├── init segment (编解码器配置)
├── segment-001.m4s
├── segment-002.m4s
└── ...
↓
FFmpeg WASM 合并
↓
output.mp4
关于 DASH 流的 FMP4 重组和音视频合并的技术实现,请参阅 下载引擎架构 — DASH 处理。关于 FFmpeg WASM 的加载和性能,请参阅 格式转换 — FFmpeg WASM 引擎。
加密支持
与 HLS 相同,FlowPick 支持 DASH 流的 AES-128 分片级加密。DRM 保护(Widevine、PlayReady)的流无法处理。
直接视频文件
对于直接视频文件(MP4、WebM、MKV 等),检测和下载流程最简单:
- 即时检测:视频 URL 出现在网络请求中后立即被检测到
- 直接下载:无需分片合并或格式转换,浏览器直接下载原始文件
- 大小预览:如果服务器返回
Content-Length头,会显示文件大小
直接视频文件通常出现在以下场景:
- 网站直接嵌入的 MP4 视频
- 社交媒体上的短视频
- 图库网站的视频素材
- 直接链接的视频文件
关于直接视频文件的下载操作方式,请参阅 使用方法 — 下载单个资源。
扩展与在线工具的检测差异
| 能力 | 浏览器扩展 | 在线工具 |
|---|---|---|
| 自动检测 | 自动监控所有网络请求 | 需手动粘贴流媒体 URL |
| CORS 限制 | 不受限(扩展权限) | 受同源策略限制 |
| 加密流 | 支持 AES-128 解密 | 支持 AES-128 解密 |
| 检测范围 | 当前标签页所有请求 | 仅用户提供的 URL |
| 使用门槛 | 需安装扩展 | 无需安装 |
如果你在使用在线工具时遇到 CORS 错误,说明流媒体服务器未配置跨域头。此时建议安装浏览器扩展来绕过限制。关于扩展与在线工具的详细功能对比和选择建议,请参阅 在线工具 — 与扩展的对比。
故障排除
视频未检测到
| 原因 | 解决方案 |
|---|---|
| 页面在安装扩展前已加载 | 刷新页面后重新播放视频 |
| 视频尚未开始播放 | 播放视频 3-5 秒,确保清单文件已加载 |
| 视频使用动态加载 | 拖动进度条到不同位置,触发更多分片请求 |
| 网站使用了非标准协议 | 检查是否支持 HLS/DASH/直接视频文件 |
| 其他扩展冲突 | 暂时禁用广告拦截器或其他网络扩展后重试 |
加密流下载失败
| 原因 | 解决方案 |
|---|---|
| DRM 保护(Widevine 等) | 不支持,FlowPick 无法解密 DRM 内容 |
| 密钥服务器需要认证 | 部分付费内容的密钥需要 Cookie/Token,确保已登录 |
| 密钥 URL 无法访问 | 检查网络连接,密钥服务器可能被防火墙拦截 |
下载速度慢
| 原因 | 解决方案 |
|---|---|
| 并发线程数过低 | 在设置中提高并发线程数(建议 4-6) |
| CDN 限速 | 部分 CDN 限制单 IP 速度,无法绕过 |
| 网络带宽不足 | 选择较低画质减少文件大小 |
合并后视频无法播放
| 原因 | 解决方案 |
|---|---|
| 部分分片下载失败 | 重新下载,确保所有分片完整 |
| 输出格式不兼容 | 尝试切换输出格式(MP4 ↔ TS) |
| 加密密钥错误 | 刷新页面后重新获取密钥 |