流媒体下载教程:3步跑通N_m3u8DL-RE,解密并下载HLS/DASH视频
【免费下载链接】N_m3u8DL-RECross-Platform, modern and powerful stream downloader for MPD/M3U8/ISM. English/简体中文/繁體中文.项目地址: https://gitcode.com/GitHub_Trending/nm3/N_m3u8DL-RE
你肯定干过这种事:浏览器里视频放得好好的,右键一存,拿到手只能是一个无法播放的 .m3u8 文本,或者一段 403 报错。N_m3u8DL-RE 就是一个命令行流媒体下载工具,负责把 HLS(.m3u8)、DASH(.mpd)、MSS(.ism)这类「切成几百个小分片」的视频链接,解析、下载、解密并合并成一个完整文件。读完本文,你能独立完成:跑通第一次下载、处理加密视频、录制一场直播。
获取工具并跑通第一条测试流
先解释一句人话:下面用到的「m3u8/mpd」是流媒体播放列表,相当于一张目录页,真正画面数据被切成几百个小文件,工具的工作就是把这张目录读出来,逐个抓回再拼好。
- 克隆仓库(首次获取代码用):
git clone https://gitcode.com/GitHub_Trending/nm3/N_m3u8DL-RE cd N_m3u8DL-RE- 编译出可执行文件(需要已安装 .NET SDK):
dotnet build src/N_m3u8DL-RE.sln -c Release产物在src/N_m3u8DL-RE/bin/Release/net*/N_m3u8DL-RE(Windows 上带 .exe,下文命令统一写作./N_m3u8DL-RE,请替换成你实际的程序路径)。
- 用仓库自带的免费测试链接(未加密、无需登录)跑第一条命令:
./N_m3u8DL-RE "https://media.axprod.net/TestVectors/v7-Clear/Manifest_1080p.mpd"成功的标志:终端里出现多轨道选择界面,选完视频后进度条走到 100%,终端目录下的保存路径里出现一个可以双击播放的媒体文件,旁边还会多一个.json解析信息文件。
检查点:第一条命令跑通了吗?保存目录里能看到视频文件了吗?✅
看清一条链接是怎么变成完整视频文件的
用大白话说:工具先把你给的链接当成「目录页」读下来,通过文本开头的特征判断这是哪种协议——以#EXTM3U开头是 HLS,包含<MPD>标签是 DASH,包含<SmoothStreamingMedia>是 MSS。判断之后交给对应的解析器,把「有哪些轨、每轨有哪些分片、加密没加密」全部整理成一张任务表。然后下载管理器开多个线程同时抓分片,遇到加密就调用解密逻辑把密文还原成明文,最后按顺序合并(需要 ffmpeg 时用它把分离的音轨、字幕混回视频里)。你看到的一个文件,背后是「解析 → 并发抓取 → 解密 → 合并」四步流水线。
三个值得点名的模块,想深入源码时从它们入手:
- StreamExtractor(src/N_m3u8DL-RE.Parser/StreamExtractor.cs):拉取源文本并识别协议、分发给对应解析器的总入口。
- SimpleDownloadManager(src/N_m3u8DL-RE/DownloadManager/SimpleDownloadManager.cs):负责多线程调度,把几百个分片分给多个线程并发下载。
- AESUtil(src/N_m3u8DL-RE/Crypto/AESUtil.cs):处理 AES-128 加密分片的解密逻辑(HLS 最常见的加密方式)。
👉 检查点:对照上面三条,你能说出「识别协议」「并发下载」「解密」分别对应哪个模块吗?
处理三个真实场景
场景一:下载加密的点播视频(带 key)
视频平台常用 AES-128 加密分片,你需要把解密密钥一并交给工具。命令如下(你的链接换成真实 m3u8 地址,密钥格式为KID:KEY,全部换成你自己的值):
./N_m3u8DL-RE "你的链接.m3u8" \ --save-name "我的课程视频" \ --save-dir "./out" \ --key "你的KID:你的KEY" \ --thread-count 8 \ -M format=mp4参数注解:--save-dir指定输出目录,--thread-count控制并发线程数(网络一般给 8),-M format=mp4让程序最后用 ffmpeg 把视频和音轨混流成一个 mp4。跑完后./out里就是可直接播放的文件。
场景二:DASH 多轨道,挑画质加字幕
DASH 一个链接里通常混着多档清晰度、多条音轨和字幕。用正则表达式筛选即可:
./N_m3u8DL-RE "你的链接.mpd" \ -sv res="1920*1080":for=best \ -sa lang="en|zh":for=best \ -ss lang="zh-CN":for=best \ --sub-format SRT \ -M format=mp4参数注解:-sv/-sa/-ss分别筛选视频、音频、字幕,for=best表示从命中的轨里选最佳,--sub-format SRT指定字幕输出为 SRT 格式(默认值,写出来更直观)。
👉 检查点:这条命令跑完后,你能同时拿到 1080p 视频和中文字幕吗?
场景三:录制直播,存成文件
直播的播放列表会不断刷新,普通下载方式会立刻结束。加上直播参数让它持续跟随:
./N_m3u8DL-RE "你的直播链接.m3u8" \ --live-real-time-merge \ --live-record-limit "2:00:00"参数注解:--live-real-time-merge开启实时合并,边录边拼,中途断掉也不至于只剩一堆分片;--live-record-limit限制录制时长,这里录满 2 小时自动停止,不填则录到直播结束。
场景四(通用技巧):自己抓出链接、密钥和请求头
- 打开视频页,按 F12 打开开发者工具,切到网络(Network)面板,刷新页面重新播放。
- 找请求:过滤
m3u8或mpd,找到那条返回播放列表的请求,右键 Copy → Copy URL,这就是<input>参数。 - 抄请求头:点开该请求看 Headers,把
Cookie、User-Agent、Referer原样带进命令,很多「403」都缺这个:
-H "User-Agent: 你浏览器里的UA" \ -H "Cookie: 你的Cookie值" \ -H "Referer: 原页面地址"- 找密钥:下载下来看
.mpd或.m3u8文本本身。DASH 里搜<cenc:defaultKID>和<cenc:defaultCipherKeys>,前者是 KID,后者就是 KEY(注意usage=content的那条);HLS 里看#EXT-X-KEY行的METHOD、KEYMETHOD、KEYID、IV字段。如果密钥写在 DRM License 响应里而非清单里,工具无法直接拿到,属于高级情况,先在社区搜搜目标站点的讨论。
提醒:上面所有「你的xxx」占位符都必须替换成真实值,否则命令必然失败。
排查故障并向上进阶
对照这张表排查
| 症状 | 可能原因 | 解法 |
|---|---|---|
| 403 / 401 报错 | 缺少 Cookie、Referer、UA 等请求头 | 按场景四抄齐请求头再用-H逐条带上 |
| 提示「不支持的格式」 | 链接抓错了,拿到的是 html 页面或 js 地址 | 回 F12 确认响应文本以#EXTM3U或<MPD开头 |
| 下载成功但打不开/花屏 | 加密分片没解密,或 KID:KEY 写错 | 核对--key格式为KID:KEY无多余空格,确认取的是usage=content的密钥 |
| 合并阶段报 ffmpeg 相关错误 | 系统没装 ffmpeg 或不在 PATH | 安装 ffmpeg,或用--ffmpeg-binary-path指定全路径 |
| 速度只有几十 KB/s | 线程数太少或网站限速 | --thread-count 16试试;网站限速则换--custom-proxy走代理 |
👉 检查点:你的问题落在哪一行?对应的解法试过了吗?
能力阶梯:每天一个小任务
- 初档(今天就能做完):① 用本文测试链接完整跑一次下载并播放产物;② 用
--save-pattern "<SaveName>_<Resolution>"让文件名自动带上分辨率;③ 用--custom-range 05:00-10:00只截取第 5 到 10 分钟。 - 中档(本周目标):① 给一个加密站点抓齐请求头并完成一次解密下载;② 用
-sv/-sa同时下两档清晰度对比码率;③ 录 30 分钟直播并用--live-record-limit自动停止。 - 高档(进阶探索):① 顺着 StreamExtractor.cs 读懂协议分发逻辑,再看 HLSExtractor.cs 如何展开分片列表;② 给批量 URL 写一个循环脚本,配合
--thread-count错峰下载;③ 研究 RetryUtil.cs 的重试设计,理解--download-retry-count何时生效。
合规提醒与开放问题
最后多说一句:只下载你有权访问的内容——自己的课程备份、公有领域素材、已获授权的资料。抓取登录态 Cookie 属于使用你自己的凭证,不要用它绕过付费墙或侵犯他人版权。
那你手上现在有没有一个「想存但存不下来」的具体场景?是加密的课程、没有回放的直播,还是只有字幕轨道的多语言片源?留言描述一下,我们接着往下看它该怎么解。
【免费下载链接】N_m3u8DL-RECross-Platform, modern and powerful stream downloader for MPD/M3U8/ISM. English/简体中文/繁體中文.项目地址: https://gitcode.com/GitHub_Trending/nm3/N_m3u8DL-RE
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考