视频嗅探

FlowPick 视频检测与下载技术指南,介绍网页视频、直接 MP4 文件、M3U8/HLS 和 MPD/DASH 清单的识别方式,以及媒体轨道、画质和加密流的处理。

FlowPick 通过监控浏览器网络请求自动检测页面上的视频内容,支持流媒体协议(HLS/DASH)和直接视频文件,并能自动解密 AES-128 加密的流。


检测原理

FlowPick 的视频检测基于 Chrome 扩展的 webRequest API,在浏览器网络层拦截请求:

  1. 网络拦截:扩展通过 webRequest.onBeforeRequest 监听所有网络请求,根据响应的 Content-Type 头识别视频和流媒体资源
  2. 清单解析:对于 HLS(.m3u8)和 DASH(.mpd),自动下载并解析清单文件,提取可用的流信息
  3. 画质分析:从 Master Playlist 中解析所有可用的分辨率和码率选项
  4. 加密检测:检查是否存在 EXT-X-KEY(HLS)或 ContentProtection(DASH)标签,判断是否需要解密
  5. 资源展示:检测到的视频按类型分类显示在弹出窗口中

检测时机:

  • 扩展安装后,需要刷新目标页面才能开始检测
  • 流媒体清单通常在视频开始播放时才加载,建议先播放 3-5 秒再打开扩展
  • 对于动态加载的视频(如滚动到特定位置才加载),需要触发加载后才能检测到
关于扩展的 webRequest API 权限和 Manifest V3 的限制,请参阅 已知限制 — Manifest V3 限制。关于检测不到媒体时的完整排查流程,请参阅 常见问题排查 — 媒体检测问题

支持的视频格式

流媒体协议

协议清单文件Content-Type说明
HLS.m3u8application/x-mpegurlApple HTTP Live Streaming,最常见的流媒体协议
HLS.m3u8application/vnd.apple.mpegurlHLS 的 Apple 专用 MIME 类型
DASH.mpdapplication/dash+xmlMPEG-DASH,常用于高质量内容

直接视频文件

Content-Type扩展名说明
video/mp4.mp4最通用的视频格式
video/x-m4v.mp4iTunes 视频格式
video/webm.webm开源 Web 视频格式
video/ogg.ogvOgg 容器视频
video/x-flv.flvFlash 视频(旧格式)
video/x-matroska.mkvMatroska 容器
video/quicktime.movApple QuickTime
video/x-msvideo.aviWindows AVI
video/3gpp.3gp移动设备视频
video/3gpp2.3g2CDMA 移动设备视频
video/mpeg.mpegMPEG 视频

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大屏观看、需要最佳画质
高清720p1.5-3 Mbps笔记本观看
标清480p0.8-1.5 Mbps小屏幕设备
流畅360p0.4-0.8 Mbps仅听声音、移动网络
关于画质选择的配置方式(自动/手动),请参阅 配置参考 — 画质选择策略

分片下载与合并

HLS 视频由大量 TS 分片组成(通常每个分片 2-10 秒)。FlowPick 的处理流程:

  1. 解析 Media Playlist,获取所有分片 URL
  2. 多线程并发下载分片(并发数可在设置中调整)
  3. 下载完成后,将分片合并为单个文件
  4. 如果选择 MP4 输出,使用 FFmpeg WASM 进行转封装
关于分片并发下载的 Worker Pool 实现和重试机制,请参阅 下载引擎架构。关于 TS 转 MP4 的转封装原理,请参阅 格式转换

加密流(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 有以下特点:

特性HLSDASH
分片格式通常为 TS通常为 FMP4(分段 MP4)
音视频通常合并在一起通常分离为独立轨道
清单格式M3U8(文本)MPD(XML)
加密AES-128AES-128 或 DRM
编解码器H.264 为主H.264、H.265、VP9、AV1

音视频分离处理

DASH 的一个关键特点是视频和音频通常分离为独立轨道。FlowPick 的处理流程:

  1. 解析 MPD 清单,识别视频轨道和音频轨道
  2. 分别下载视频分片和音频分片
  3. 下载初始化分片(init segment),包含编解码器配置信息
  4. 使用 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)
加密密钥错误刷新页面后重新获取密钥
如果以上方法无法解决问题,请查看 常见问题排查 获取更详细的诊断步骤。关于当前版本的技术限制和边界情况,请参阅 已知限制

相关文档