一条MPD地址到完整视频:cat-catch的DASH解析下载实操指南
【免费下载链接】cat-catch猫抓 浏览器资源嗅探扩展 / cat-catch Browser Resource Sniffing Extension项目地址: https://gitcode.com/GitHub_Trending/ca/cat-catch
cat-catch(猫抓)是一个浏览器资源嗅探扩展,能把DASH/MPD流解析成可直接下载的MP4。打开一个播放DASH视频的页面,点一下工具栏的猫图标,弹窗里列出当前页的资源;选中一条MPD地址,质量列表、分段列表和下载按钮就都摆好了。
🆚 手动提取MPD vs 用cat-catch一键解析
没有扩展时,流程是:打开开发者工具,在Network面板里筛出.mpd请求,把地址复制出来;再下载这份XML,对着SegmentTemplate里的$Number$占位符手算分段URL;最后还得自己写脚本循环下载几十上百个切片。
用cat-catch时:嗅探列表里出现MPD资源,点它的解析按钮,新标签页里选一下质量,点"转为M3U8",下载页自动打开,剩下的是点"合并下载"。
⚙️ MPD解析走读:从XHR嗅探到切片下载
跟着一条请求的旅程走一遍。
嗅探:内容脚本扫描XHR响应
内容脚本catch-script/search.js挂到每个页面的XHR和fetch上,响应文本会被扫描媒体特征。命中MPD的规则有两条:URL以.mpd结尾,或响应里带urn:mpeg:dash:schema:mpd声明。
if (ext == 'mpd') { let url = URL.createObjectURL(new Blob([new TextEncoder("utf-8").encode(text)])); postData({ action: "catCatchAddMedia", url: url, href: location.href, ext: ext }); return; }作用:MPD文本未必有可公开访问的地址,所以把整份内容打成本地blob地址交给后台,保证来源在哪都能解析。
MPD相当于一份目录:它列出每个TS分段的地址和时长,本身不含视频内容。
解析:XML变成质量下拉框
点开弹窗里的MPD资源会打开mpd.html?url=…,js/mpd.js先fetch到MPD文本,再交给lib/mpd-parser.min.js(来自videojs/mpd-parser)的mpdParser.parse转成结构化JSON:视频轨放进playlists,每条带码率、帧率、分辨率;音轨按语言组放进mediaGroups.AUDIO。解析页把这两个下拉框渲染出来。
渲染前还有一步DRM检查:isDRM扫MPD里的ContentProtection节点,按schemeIdUri匹配出Widevine、PlayReady、FairPlay,命中就在页面上直接展示pssh并提示这是加密流。
下载:M3U8接棒
M3U8是cat-catch下载流水线的通用语言——线程、密钥解密、mp4重封装全都建在它上面。点"转为M3U8"时,选中质量的分段被拼成一份标准播放列表:
m3u8Content += '#EXT-X-MAP:URI="' + items.segments[0].map.resolvedUri + '"\n'; for (let key in items.segments) { m3u8Content += "#EXTINF:" + items.segments[key].duration + ",\n" m3u8Content += items.segments[key].resolvedUri + "\n"; } m3u8Content += "#EXT-X-ENDLIST";作用:先写初始化分段MAP,再逐条列出每个分段的时长和地址,把DASH目录变成m3u8解析器能读的播放列表。
随后打开m3u8.html?getMpdId=<当前标签ID>,js/m3u8.js识别到这个参数:
if (_getMpdId) { chrome.tabs.sendMessage(_getMpdId, "getM3u8", function (result) { $("#m3u8Text").val(result.m3u8Content); $("#parse").click(); $("#info").html(result.mediaInfo); }); }作用:向MPD解析标签发消息取回播放列表,填进输入框并自动触发解析,完成MPD到M3U8的交接。
之后hls.js载入源,页面显示分段列表、总时长和估算大小,默认32线程"合并下载"把切片拼成一个MP4。
🎬 一个场景从头走到尾:下载一条10分钟的DASH流
打开嗅探列表
打开视频页面,让视频播放一次以触发资源加载。点工具栏猫图标:弹窗列表里勾着4条MP4,从14.1MB到125.2MB;下方详情区显示标题、MIME、时长00:28、分辨率1280x720、直连URL,还有一段可播放的预览。
选质量并转为M3U8
点资源行上的解析按钮,MPD资源打开MPD解析页:视频下拉框里每条质量都标着名称、码率(kbps)、帧率和分辨率,音频下拉框按语言列出各条音轨。点一下"提取切片",文本框里逐行列出分段地址,并标注"共64个文件,总时长10:34"。
点"转为M3U8",m3u8解析器页自动打开:64个TS地址、总时长10:34、分辨率1280x720一目了然。勾选"mp4格式"、下载线程保持32,点"合并下载",进度条走完得到一个MP4文件。
其他适用场景各一句
带DRM的流解析到一半就停,页面只展示pssh不做解密;多音轨流在音频下拉框里逐条列出可选;只要分段地址不下载,"提取切片"按钮直接给你。界面随系统有西班牙语等10种语言版本,m3u8解析器布局完全一致:
🧰 进阶配置与踩坑记录
可能用到的两个配置
- MPD地址要带Referer:MPD解析页有一个Referer输入框,手填地址解析时它会被打包进请求头(
js/mpd.js里拼成requestHeaders参数)。不少站点会拒绝无来源的请求。 - 下载范围:下载页有两个"下载范围"输入框,默认1-64即全量。只要前2分钟就填1-12,分片数对着列表数就行。
三个常见坑
- 加密流别浪费时间:解析时检测到Widevine/PlayReady/FairPlay,页面展示pssh并告警,cat-catch不做DRM解密,这类资源直接放弃。
- 线程与重封装:下载线程默认32,弱网服务器调小;勾选"mp4格式"后切片会重封装为MP4而不是TS直接拼接。
- 内核版本:1.0.17之后要求Chromium内核93以上,完整功能需要104以上(见README兼容性说明),Firefox可用但部分功能被隐藏。
🚪 收尾
cat-catch的MPD解析本质是一次接力:内容脚本抓住MPD,mpd-parser把它变成JSON,再拼成M3U8复用整套m3u8下载流水线。 下一步:打开任意一个DASH演示页面,点弹窗里的MPD资源,点"转为M3U8",走完上面这条流程。
【免费下载链接】cat-catch猫抓 浏览器资源嗅探扩展 / cat-catch Browser Resource Sniffing Extension项目地址: https://gitcode.com/GitHub_Trending/ca/cat-catch
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考