httpCanary 中文文档 下载 App

视频自动下载插件:捕获 App 内视频流

插件原理

视频自动下载插件基于静态注入机制工作——它并不主动拦截视频数据,而是监控所有 HTTP 请求的 URL,匹配到视频格式后缀时提取下载链接保存下来。

支持的视频格式

格式文件后缀说明
MP4.mp4最常见的视频格式
HLS 直播流.m3u8苹果推出的流媒体格式,主流视频平台都支持
FLV.flvFlash Video,部分直播源仍在使用
TS 分片.tsHLS 格式的实际视频分片
WebM.webm开源视频格式

使用步骤

第一步:开启插件

设置 → 插件 → 找到「视频自动下载」→ 打开开关。

第二步:配置下载目录

默认下载到 HttpCanary/videos/ 目录,可以在设置中修改成你方便访问的位置。

第三步:开始抓包

开启 httpCanary 抓包服务(纸飞机变红色),确保插件处于运行状态。

第四步:在目标 App 中播放视频

打开你想要捕获视频的 App,正常播放视频即可——httpCanary 会在后台自动捕获。

第五步:查看下载

回到 httpCanary 主界面或打开文件管理器,在下载目录中找到捕获的视频文件。

m3u8 格式的特殊处理

m3u8 不是视频文件本身,而是一个播放列表——它是纯文本格式,记录了视频被切分成的很多个小分片(通常是 .ts 文件)的地址。

捕获 m3u8

当你在 App 里播放 m3u8 视频时,httpCanary 能捕获两类请求:

  1. m3u8 文件本身——播放列表,告诉播放器去哪里找视频分片
  2. .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 可能还不支持。