# M3U8 Downloader (Go) 这是一个基于 Go 语言编写的单文件 M3U8 视频下载器练习项目,主要实现了并发下载与本地的混流合成。 ## ✨ 主要功能 - **并发下载**:基于 Goroutine 协程实现 TS 分片的并发拉取。 - **重试机制**:内置简单的请求重试与失败等待机制。 - **主列表跳转**:简单的 `#EXT-X-STREAM-INF` 解析与跳转。 - **FFmpeg 合成**:自动调用本地 FFmpeg 客户端对完成的 TS 视频进行无损的 `.mp4` 混流与清理碎片。 ## 🚀 快速开始 ### 1. 准备环境 - 请确保你的电脑上安装了 **Golang** (建议版本 >= 1.20)。 - 你的电脑上需要拥有 [FFmpeg](https://ffmpeg.org/download.html)。请将下载好的 FFmpeg 二进制可执行文件(如 `ffmpeg.exe`)放置在本项目根目录下的 `ffmpeg/` 文件夹中。 - *目录结构应当为:* `m3u8/ffmpeg/ffmpeg.exe` ### 2. 获取并运行项目 ```bash # 1. 克隆本项目代码 git clone https://git.ncaca.cn/admin/Downloader.git cd Downloader # 2. 安装项目依赖(命令行进度条组件) go get github.com/schollz/progressbar/v3 # 3. 运行下载器 go run main.go ``` *启动后,根据控制台提示粘贴你需要下载的 M3U8 播放列表链接并回车即可。* ## 🛠️ 二次开发指南 如果你想基于此项目进行功能的扩展或深度定制,欢迎 Fork 或修改代码! **开发建议与关注点:** 1. **依赖安装**:在进行二次开发或编译之前,请务必确保你已经执行了 `go get github.com/schollz/progressbar/v3` 以拉取进度条相关的必备第三方包。如果提示缺失包,也可以直接运行 `go mod tidy`。 2. **下载核心逻辑 (`func downLoadOne`)**:由于部分视频网站可能拥有复杂的防盗链机制,你可以在此处为底层的 `http.Client` 请求加入更多的伪装头部,例如自定义的 `User-Agent`、`Referer` 甚至携带鉴权 `Cookie` 和动态 `Token`。 3. **分片正则爬取 (`func parseSubContent`)**:目前代码通过简单的字符串前后缀判断 (`HasSuffix`) 来定位 `.ts` 分片。遇到无后缀或链接被加密混淆的情况,可以考虑在此处引入强大的“正则表达式”来增强匹配能力。 4. **进阶:解密与断点保护**:对于带有 `#EXT-X-KEY` 标签的 AES-128 加密视频流,你可以自己为其增加解密模块;或者在文件创建时判断一下之前是否已经拉取过本序号的切片,来实现“断点续传”。 ## 📄 协议 [MIT License](LICENSE)