SmartEDU VideoDownloader 使用说明
组合说明:浏览器脚本 demo.js 负责捕获视频站点的参数与 M3U8;桌面程序 M3U8Downloader 负责下载、解密并可选用 ffmpeg 进行后处理输出 MP4
代码参考:
操作系统:Windows 10/11(x64)
ffmpeg:后处理(转封装/转码)需要;可在「后处理」开关开启后指定 ffmpeg.exe 路径
.NET:运行已发布的单文件不需要 .NET 运行时;如需自行构建,需安装 .NET SDK 8
安装 Tampermonkey 浏览器扩展
将 demo.js 安装为用户脚本(自动捕捉课程名与 M3U8,全屏授课窗口抓取不支持捕捉课程名)
已启用跨域网络能力(GM_xmlhttpRequest)并允许连接本地 127.0.0.1/localhost
脚本面板提供「复制最新Key」「复制最新M3U8」「发送到程序」按钮
启动桌面程序 M3U8Downloader(单文件发布或调试运行均可)
nonce:来自站点的请求参数
sign(16字符):来自站点的请求体/参数,长度必须为 16
密文(Base64):站点返回的 key 字段(Base64 格式),程序会用 sign 解密得到 16 字节 AES 密钥
M3U8链接:媒体播放列表地址
输出目录:所有下载与后处理输出均写入该目录
最终文件名:保存文件的基名(不含扩展名);脚本会捕捉课程名并自动填入,可手动修改
IV模式:
解析/默认:若播放列表提供 IV 则使用;否则按全零 IV
全零IV:使用 16 字节 0
序列IV:按分片序列号生成 IV
并发:下载分片并行度
后处理开关:开启后显示 FFMPEG路径 与后处理选项
转封装为MP4:视频/音频流直接复制,速度快
转码为MP4(1080p/30fps/H.264/10Mbps):重新编码输出
在目标视频页面进行播放,demo.js 会捕获参数与 M3U8
在脚本面板点击「发送到程序」,程序将自动填充 nonce、sign、密文、M3U8 与课程名(用于“最终文件名”)
在程序中设置「输出目录」
若需要 MP4,开启「后处理」并选择「转封装」或「转码」,并设置 ffmpeg.exe 路径
点击「开始下载」
过程中界面显示「正在下载,请耐心等待…」
完成后弹窗提示最终输出文件
若已进行后处理且成功生成 MP4,将尝试删除临时 TS 文件;成功/失败会写入日志窗口
发送到程序失败:
浏览器脚本已尝试端点:127.0.0.1:5000 与 18080 的 /send-data
程序优先启动 HTTP 监听(5000),失败时启动 TCP 备用(5000/18080/28080)
检查防火墙或杀毒软件是否拦截本地端口
确保 demo.js 中存在 @grant GM_xmlhttpRequest 与 @connect 127.0.0.1/localhost
sign 校验失败或长度非 16:程序会提示「sign 需要16字符」
M3U8 解析失败或无分片:程序会提示错误并停止
ffmpeg 路径无效:后处理会失败,最终保留 TS
TS 删除失败:程序日志会提示,并在弹窗中提醒手动删除(可能因文件锁或杀毒占用)
页面出现两个面板:脚本已加入单实例守卫与仅在顶层窗口创建 UI;若页面含 iframe,面板只显示一次
M3U8 链接缺少查询参数导致 401:脚本已在 fetch/XHR 网络层捕获完整 URL,并将 iframe 中捕获的事件统一转发到顶层面板显示
仍然 401:站点若使用请求头授权(非查询参数),需要在程序端增加请求头支持;可以提出需要的 Header 名称与示例值
课程名未捕捉到:可手动填写“最终文件名”;如站点使用自定义选择器,请告知以补充匹配规则
dotnet publish -c Release -r win-x64 -p:PublishSingleFile=true -p:SelfContained=true
发布产物位置:
M3U8Downloader/bin/Release/net8.0-windows/win-x64/publish/M3U8Downloader.exe
已配置忽略常见产物与编辑器文件,参考:.gitignore
建议将下载/后处理产物集中到同一个输出目录(例如 outputs/),并在 .gitignore 中忽略该目录,避免误提交大文件