猫抓如何用MPD解析下载DASH视频:完整指南
【免费下载链接】cat-catch猫抓 浏览器资源嗅探扩展 / cat-catch Browser Resource Sniffing Extension项目地址: https://gitcode.com/GitHub_Trending/ca/cat-catch
猫抓 cat-catch 是一款浏览器资源嗅探扩展,其 MPD 解析器可以把 DASH 描述文件(MPD)解析成质量列表与分段地址,再转成 M3U8 走现成的下载通道,解决 DASH 视频需手动解析 XML、拼接分段 URL、音画分离下载的问题。
痛点与背景
看 DASH 视频时,开发者工具网络面板里往往不是单个 mp4,而是一个 .mpd 文件。你得手动打开 XML,找到 SegmentTemplate,把$Number$、$Bandwidth$这些占位符自己替换,一段段拼出分段地址;音轨和视频轨又是两条流,各拼各的。
手工解析 XML 慢且容易拼错,站点还常校验 Referer,漏一个请求头就 403。目前没有一个工具把"解析 → 选清晰度 → 取分段 → 下载"串成一条龙,猫抓的 MPD 解析做的就是这件事。
项目能力全景
- 资源嗅探:弹窗自动识别页面里的 .mpd 请求并标注,不用自己去网络面板里翻
- MPD 一键解析:js/mpd.js 调用 mpd-parser 把 XML 转成结构化 JSON,列出每条视频流和音轨
- 清晰度下拉:每个档位直接显示码率、帧率、分辨率,对照着选
- 分段提取:选中质量后列出全部分段 URL,可一键复制
- M3U8 转换:把选中的 DASH 流转成 M3U8 播放列表,交给已有的 m3u8 下载器
- DRM 检测:识别 Widevine / PlayReady / FairPlay 加密,展示 pssh 信息并提前告知限制
- 自定义请求头:支持设置 Referer 等头部,应对带访问限制的资源
核心工作链路
整条链路按"输入 → 处理 → 输出"走:
输入:MPD 地址两条来源——弹窗自动嗅探,或在 mpd.html 页面手动填入;可同时设置 Referer 等请求头。
处理:拉取 XML 内容交给解析器,视频表示落入playlists,音轨落入mediaGroups.AUDIO。
mpdJson = mpdParser.parse(mpdContent, { manifestUri: _url }); // 来源:js/mpd.js输出:选定质量后点"提取切片"看分段列表;点"转换为M3U8"则按标准播放列表格式拼装,含 init 段(map)和每段的时长与地址:
m3u8Content += "#EXT-X-TARGETDURATION:" + items.targetDuration + "\n"; for (let key in items.segments) { m3u8Content += items.segments[key].resolvedUri + "\n"; } // 来源:js/mpd.js拼装好的内容通过标签页消息传给 m3u8.html,进入现成的下载流程。
实现亮点
MPD 转 M3U8:复用已有下载生态
设计意图:DASH 和 HLS 是两套流标准,从零写一个 DASH 下载器成本太高。实现方式:转换时把 DASH 的 init 段写进#EXT-X-MAP,每段时长写入#EXTINF,之后 hls.js 就能把它当普通 HLS 流处理。用户收益:不用学新工具,m3u8 页已有的进度条、下载范围、合并下载功能直接作用于 DASH 资源。
DRM 检测独立于主解析流程
设计意图:加密内容无法直接下载,不提前告知用户会白忙一场。实现方式:isDRM()单独遍历 XML 中的ContentProtection节点,按 UUID 映射出加密类型名。
if (schemeIdUri.includes("edef8ba9-79d6-4ace-a3c8-27dcd51d21ed")) { return "Widevine"; } else if (schemeIdUri.includes("9a04f079-9840-4286-ab92-e65be0885f95")) { return "Microsoft PlayReady"; } // 来源:js/mpd.js用户收益:检测到加密时页面直接显示类型和 pssh,一眼判断"下不了",也不影响无加密内容的正常解析。
解析页与下载页解耦
设计意图:mpd.html 只管解析展示,下载放在专门的 m3u8.html 页面,各司其职。实现方式:转换完成后 mpd.html 保存生成内容;m3u8.html 打开时用标签 id 取回内容,填入解析框并自动触发解析。用户收益:点完"转换"直接落到下载页,不用手工复制播放列表。
典型场景
场景一:下载 DASH 课程视频
课程站提供 360p 到 1080p 的 DASH 资源。
- 弹窗自动嗅探到 .mpd 请求并标注"需解析"
- 解析后下拉框显示各档码率与分辨率,选 1080p
- 转换 M3U8 后进入下载页,选"合并下载"得到单个 mp4
场景二:带 Referer 限制的站点
分段请求不带正确 Referer 就 403。
- 在解析页 Referer 栏填入站点域名
- 请求头会注入该标签页的所有 xhr,解析通过
- 转换后的 M3U8 下载沿用同一套头,分段下载不被拦
场景三:分析码率结构
流媒体工程师想看 CDN 的 DASH 布局。
- 质量下拉框直接展示各档带宽(kbps)、帧率、分辨率分布
- 提取切片后核对分段时长与命名规则
- 信息栏显示分段总数与总时长,便于估算文件大小
工程细节
- 解析器选型:依赖 lib/mpd-parser.min.js,把 SegmentTemplate / SegmentList / SegmentBase 三种分段方式统一成同一份分段列表,不用自己兼容
- 回退处理:跨标签页读取消息失败(chrome.runtime.lastError)时退回手动输入表单,解析流程不中断
- 浏览器兼容:Firefox 下跨域 blob 下载路径不同,代码经 content-script 取回内容再加载
- 多语言界面:页面文案走 i18n 机制,随扩展支持中文、日语、西班牙语等 10 种语言
避坑 / FAQ
解析成功但分段列表为空→ 多半填的是主 manifest(只含档位信息),换成子 MPD 的地址再解析。
分段下载 403→ 基本是 Referer 校验,在解析页填入站点域名后重新转换。
页面提示 Widevine / PlayReady→ 内容受 DRM 保护,无法直接下载,pssh 仅用于标识加密类型,别指望绕过。
音画下成两个文件→ DASH 分离的正常结果,下载完可用扩展的"发送到 ffmpeg"功能合成。
只想先看看效果→ 用下载范围只下前几段验证画质,确认后再整段下载。
结尾
猫抓把 MPD 解析、质量选择、分段提取、M3U8 转换串在一条链路上,DASH 下载从"读 XML 拼 URL"变成"选质量、点转换、等下载"。配合资源嗅探和请求头自定义,不带 DRM 的 DASH 资源基本都能直接处理;是加密内容,它也会提前把结果告诉你。
【免费下载链接】cat-catch猫抓 浏览器资源嗅探扩展 / cat-catch Browser Resource Sniffing Extension项目地址: https://gitcode.com/GitHub_Trending/ca/cat-catch
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考