2026-03-06 08:24:13 +00:00
2026-03-06 16:15:37 +08:00
ALL
2026-03-06 08:52:55 +08:00
ALL
2026-03-06 08:52:55 +08:00
2026-03-06 15:54:32 +08:00
2026-03-06 08:24:13 +00:00

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://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-AgentReferer 甚至携带鉴权 Cookie 和动态 Token
  3. 分片正则爬取 (func parseSubContent):目前代码通过简单的字符串前后缀判断 (HasSuffix) 来定位 .ts 分片。遇到无后缀或链接被加密混淆的情况,可以考虑在此处引入强大的“正则表达式”来增强匹配能力。
  4. 进阶:解密与断点保护:对于带有 #EXT-X-KEY 标签的 AES-128 加密视频流,你可以自己为其增加解密模块;或者在文件创建时判断一下之前是否已经拉取过本序号的切片,来实现“断点续传”。

📄 协议

MIT License

Description
No description provided
Readme 265 MiB
Languages
Go 100%