This commit is contained in:
YL
2026-03-06 15:54:32 +08:00
parent 0cb5a71908
commit f8704c6a10
5 changed files with 112 additions and 28 deletions

View File

@@ -0,0 +1,45 @@
# 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://github.com/yourusername/m3u8-downloader.git
cd m3u8-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)