m3u8 视频在线提取 Web下载工具
项目详情请见压缩包内的 HTML 文件。
工具简介
本工具是一个基于 Web 的 m3u8 视频在线提取与下载工具,
支持直接在浏览器中解析 m3u8 链接、分片下载 ts 片段并合成为完整视频,
推荐使用桌面浏览器(如 Chrome)访问。
m3u8 视频格式简要说明
m3u8 视频通常会将完整视频切分成多个 .ts 片段,
由一个 .m3u8 文件记录这些片段的地址。
播放时先读取 m3u8 文件,再按顺序请求和播放 ts 片段。
该方式常用于直播或提高防盗难度,因此不能像普通视频一样直接下载整段文件。
常见问题包括:下载软件配置麻烦、试错成本高、下载速度不稳定、
软件内部逻辑不透明等,为解决这些痛点,本工具以“网页版”“可见源码”的方式提供简单直观的解决方案。
工具特点
无需安装,本地无需额外软件,打开网页即可使用。
支持强制整合已下载片段,无需等待全部片段下载完成即可先行观看。
操作粒度精确到每个 ts 片段,可重试下载失败片段。
提供解决跨域限制的注入方式,在视频页面控制台注入工具代码后即可使用。
主要功能说明
解析下载:输入 m3u8 链接,点击按钮即可开始下载视频。
跨域复制代码:资源存在跨域限制时,复制工具给出的代码,在目标视频页面控制台粘贴执行,将工具注入页面解决跨域问题。
重新下载错误片段:当部分 ts 片段下载失败时,一键重新下载这些片段。
强制下载现有片段:根据当前已完成的 ts 片段强制整合并导出视频,不影响正在进行的下载进程。
片段状态图标:每个图标对应一个 ts 片段的下载状态(灰色=待下载,绿色=成功,红色=失败),点击红色可重试对应片段。
使用流程概览
在目标视频页面打开开发者工具(右键检查 / F12)。
在 Network 面板中搜索 m3u8,刷新页面以捕获相关请求。
找到真实视频的 m3u8 文件(内容包含大量 ts 片段地址)。
复制该 m3u8 链接,粘贴到工具页面并点击解析下载。
观察片段图标状态,等待全部成功后自动触发整合视频下载;如有失败,可重试对应片段。
常见异常情况
无法下载,没有显示片段图标
多半是跨域限制导致。可以在工具中点击“跨域复制代码”,
然后到视频页面的控制台粘贴执行,页面底部会注入工具界面,再通过注入的工具进行解析下载。
下载后的视频无法播放
说明视频源经过额外加密处理,不同网站使用的加密方式并不相同,无法统一通用解密。
一般中小型站点不会启用复杂加密,大型平台(如主流长视频站)才会有此类安全策略。
实现思路简述
解析 m3u8:通过异步请求获取 m3u8 文本,手动解析内容(m3u8 不是 JSON)。
队列下载:使用并发队列按批次请求 ts 片段,响应类型设为二进制缓冲数据。
片段合并:通过 Blob 对象将多个 ts 缓冲数据整合成一个完整文件,并指定正确的 MIME 类型。
自动下载:使用 URL 对 Blob 生成临时链接,再用隐藏的 a 标签配合 download 属性触发浏览器下载。<br/>
<br/>
<br/>核心代码概览
整合片段并触发浏览器下载的大致逻辑如下:
// 下载整合后的 TS 文件
downloadFile(fileDataList, fileName, fileType) {
this.tips = 'ts 碎片整合中,请留意浏览器下载'
const fileBlob = new Blob(fileDataList, { type: 'video/MP2T' })
const a = document.createElement('a')
a.download = fileName + '.' + fileType
a.href = URL.createObjectURL(fileBlob)
a.style.display = 'none'
document.body.appendChild(a)
a.click()
a.remove()
}
除了这部分涉及 Blob 等新知识点外,其余大多属于常规 JavaScript 逻辑,
工具整体代码量不大,适合阅读学习。
源码与扩展能力
核心逻辑主要集中在单个 HTML 文件中,结构清晰,方便学习和二次修改。
支持 AES 常规解密与 MP4 转码功能,借助第三方工具文件实现。
修复并使用了某些开源转码库中关于视频时长计算的已知问题。
支持通过 URL 参数传入 m3u8 下载地址,实现第三方页面一键跳转解析。
油猴插件支持
提供了 Tampermonkey 脚本,可在视频网站中直接使用“跳转下载”或“注入下载”方式。
手动添加脚本的流程大致为:在油猴中新建脚本,粘贴脚本源码并保存,激活后即可在目标站点上使用。<br/>
<br/><br/><br/>
