媒体嗅探与画质选择
浏览器扩展如何发现页面上的媒体,以及不同视频格式(HLS、DASH、混流)对下载行为的影响。
扩展如何发现页面上的媒体
浏览器扩展通过两条路径捕获页面上的可下载资源:
- 网络请求捕获 — 扩展监听浏览器发出的网络请求,根据 MIME 类型和文件扩展名识别媒体资源。播放视频或音频时产生的网络流量会被自动捕获,出现在扩展弹窗的「资源」面板中。
- MSE Probe — 对于使用 Media Source Extensions(MSE)播放的视频,扩展注入页面脚本,追踪
MediaSource、SourceBuffer和网络请求之间的关联,将网络 URL 归因到具体的<video>元素。
两条路径独立工作:网络捕获的结果进入扩展弹窗的资源列表,MSE 归因的结果驱动页面上的下载按钮。
页面下载按钮
鼠标悬停在正在播放的视频上方时,视频附近会出现一个「下载此媒体」按钮。点击后,扩展通过归因引擎定位该视频对应的网络资源,解析完成后发送到桌面端创建任务。
按钮选择活跃视频的逻辑:在所有可见的 <video> 元素中,正在播放的优先于暂停的,面积大的优先于面积小的。宽度小于 120px 或高度小于 80px 的视频元素会被忽略。
按钮可以拖拽到其他位置。点击右侧的 × 可关闭当前页面的按钮;刷新页面后恢复。扩展弹窗中的「媒体按钮」开关可全局禁用此按钮。
HLS、DASH 与混流视频
扩展对不同的视频封装格式有不同的处理方式:
| 封装格式 | 扩展识别方式 | 下载行为 |
|---|---|---|
HLS(.m3u8) | MIME 类型 application/vnd.apple.mpegurl 或 URL 中包含 .m3u8 | 作为流(stream)发送到桌面端,由桌面端解析分片并下载 |
DASH(.mpd) | MIME 类型 application/dash+xml 或 URL 中包含 .mpd | 同上,作为流发送 |
| DASH 分离轨道 | 视频和音频分别通过 SourceBuffer 送入播放器,各自为独立的网络请求 | 扩展等待视频轨和音频轨都被捕获后,作为合并(merge)任务发送到桌面端 |
| 混流 MP4 | 单个 SourceBuffer 包含视音频 | 作为单文件(single)下载 |
当同一个视频存在多条流(例如多个画质的 .m3u8),它们会作为独立的资源出现在扩展弹窗的资源列表中。此时需要在资源列表中手动选择想要的画质,而不是使用页面上的下载按钮。
DASH 分离轨道场景下,扩展必须同时捕获到视频轨和音频轨才能发送合并任务。如果只播放了几秒就点击下载按钮,可能因为音频轨尚未被捕获而显示「等待嗅探到当前视频资源」。继续播放一段时间后重试即可。
站点特殊处理
扩展对以下站点有专门的解析策略:
- YouTube — 不使用网络捕获。YouTube 的视频 URL 经过加密签名,直接下载无效。扩展会将页面 URL 交给桌面端的 yt-dlp 处理。
- 抖音 — 识别 URL 中的轨道标记(
/media-video-、/media-audio-)区分视频轨和音频轨,并通过 URL 中的__vid参数处理预加载场景。 - Instagram — 通过
efg参数中的vencode_tag区分视频轨和音频轨。 - X (Twitter) — 使用专用策略解析。
其他站点使用通用策略:优先选择 HLS/DASH 流,其次尝试 DASH 分离轨道合并,最后回退到单文件。
无法嗅探的站点
使用 DRM(数字版权管理)加密的视频无法被嗅探。国内主要视频平台(优酷、腾讯视频、爱奇艺)均使用 DRM 加密,扩展能捕获到网络请求但无法将其转换为可下载的资源。
如果扩展捕获到了资源但下载后无法播放,通常也是因为 DRM 加密——文件内容被加密,即使下载完整也无法解码。
在资源列表中选择画质
当页面上的视频有多种画质或码流时,这些变体会作为独立的资源出现在扩展弹窗 → 「资源」面板中。每条资源显示文件名、大小和 MIME 类型。
对于 DASH 分离轨道的视频,资源列表中会同时出现视频轨和音频轨的资源。选中一条视频轨和一条音频轨后,可以使用在线合并功能将它们作为合并任务发送到桌面端。
如果页面下载按钮显示「找到多个媒体资源,请在资源嗅探页选择」,说明归因引擎无法确定应该下载哪一条,需要在资源列表中手动选择。
接管浏览器下载的行为和草稿模式的工作方式,参见接管浏览器下载与草稿模式。