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