视频自动下载插件:捕获 App 内视频流
插件原理
视频自动下载插件基于静态注入机制工作——它并不主动拦截视频数据,而是监控所有 HTTP 请求的 URL,匹配到视频格式后缀时提取下载链接保存下来。
支持的视频格式
| 格式 | 文件后缀 | 说明 |
|---|---|---|
| MP4 | .mp4 | 最常见的视频格式 |
| HLS 直播流 | .m3u8 | 苹果推出的流媒体格式,主流视频平台都支持 |
| FLV | .flv | Flash Video,部分直播源仍在使用 |
| TS 分片 | .ts | HLS 格式的实际视频分片 |
| WebM | .webm | 开源视频格式 |
使用步骤
第一步:开启插件
设置 → 插件 → 找到「视频自动下载」→ 打开开关。
第二步:配置下载目录
默认下载到 HttpCanary/videos/ 目录,可以在设置中修改成你方便访问的位置。
第三步:开始抓包
开启 httpCanary 抓包服务(纸飞机变红色),确保插件处于运行状态。
第四步:在目标 App 中播放视频
打开你想要捕获视频的 App,正常播放视频即可——httpCanary 会在后台自动捕获。
第五步:查看下载
回到 httpCanary 主界面或打开文件管理器,在下载目录中找到捕获的视频文件。
m3u8 格式的特殊处理
m3u8 不是视频文件本身,而是一个播放列表——它是纯文本格式,记录了视频被切分成的很多个小分片(通常是 .ts 文件)的地址。
捕获 m3u8
当你在 App 里播放 m3u8 视频时,httpCanary 能捕获两类请求:
- m3u8 文件本身——播放列表,告诉播放器去哪里找视频分片
- .ts 分片文件——真正的视频数据,通常是几秒一段
分片合并问题
问题:一个 10 分钟的 m3u8 视频可能被切成 200 多个 .ts 分片——播放器自动处理了分片和拼接,但插件下载下来的是一堆零散的小文件。
解决方法:需要用工具把分片合并成完整视频:
# Linux/macOS 用 cat
cat *.ts > full_video.ts
ffmpeg -i full_video.ts -c copy output.mp4
# Windows PowerShell
Get-Content *.ts | Out-File -Encoding Byte full_video.ts
或者直接用 ffmpeg 一键完成:
# 如果有 m3u8 文件,可以直接用它作为输入
ffmpeg -i "https://example.com/video.m3u8" -c copy output.mp4
防盗链视频
很多视频源使用防盗链机制——URL 中带有时效性的签名参数,过期后链接就失效了。
注意:httpCanary 捕获的下载链接是 原始 URL——如果这个 URL 带签名,你需要在签名过期前下载完所有分片。签名有效期通常几小时到几天不等。
部分视频源还加了 Referer 校验——下载时必须在请求头中带上正确的 Referer 才能拿到文件。如果直接用下载器下载失败,可能就是 Referer 没带上。
实战场景
场景一:下载 App 内的在线课程视频
很多在线课程 App 在播放时用 m3u8 格式提供视频流。用 httpCanary + 视频下载插件,可以捕获下载链接后用 ffmpeg 合并保存。
场景二:捕获直播回放
直播回放通常也用 m3u8。插件可以捕获回放的所有分片,下载后可以离线观看。
场景三:验证视频 CDN 质量
通过分析 m3u8 分片的下载时间和大小,可以粗略评估视频 CDN 的传输质量——这对音视频工程师是实用的工具。
常见问题
Q:为什么抓到的只有 m3u8,没有 ts 分片?
A:分片文件通常是在播放器内部逐个请求的,不在 httpCanary 的请求列表里显示成独立条目。试试在视频播放过程中暂停一下再继续,分片请求可能会集中出现。
Q:下载的视频打开只有几秒钟?
A:那只是一个 .ts 分片,不是完整视频。需要找到 m3u8 文件,用 ffmpeg 或其他工具把所有分片合并。
Q:某些视频 App 抓不到任何视频请求?
A:视频流可能走的是 HTTPS 加密 + SSL Pinning,httpCanary 无法解密。或者 App 使用了专有传输协议(比如 QUIC/HTTP3),httpCanary 可能还不支持。