ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

MediaGo 下载 API 完整接入指南:任务创建、SSE 事件流与媒体检测实战

MediaGo 下载 API 完整接入指南:任务创建、SSE 事件流与媒体检测实战 音视频桌面应用后端【免费下载链接】mediago跨平台视频提取工具支持流媒体下载、视频下载、m3u8 下载及 B站视频下载提供 Windows 和 Mac 桌面客户端。Cross-platform video extraction tool: Supports streaming download, video download, m3u8 download, and Bilibili video download, with desktop clients for Windows and Mac.项目地址https://gitcode.com/caorushizi/mediago点击查看免费下载MediaGo 将下载引擎以 HTTP 服务的形式对外开放桌面客户端监听39719端口Docker 部署监听9900端口。本文围绕官方下载 API 文档系统讲解统一响应结构、认证方式、媒体检测Discovery接口、下载任务的创建/查询/控制流程以及 Server-Sent EventsSSE事件订阅并辅以仓库源码apps/core/internal/api验证实现细节。读完本文你可以用 curl、Python、Node.js 或 Postman 等任意 HTTP 工具直接对 MediaGo 完成发现媒体 → 创建任务 → 启动下载 → 实时感知完成的完整闭环甚至自己编写一个下载客户端。基本概念与 Base URLMediaGo 的下载引擎是一个常驻的 HTTP 服务任何会说 HTTP的工具curl / Python / Node.js / Postman 等都能直接调用它来创建、开始、停止下载任务并获取进度。MediaGo 自身的浏览器扩展与 AI Skill 也正是这个 API 的使用者。不同部署形态对应不同的 Base URL部署形态Base URL桌面版http://localhost:39719Dockerhttp://服务器地址:9900以实际-p端口映射为准所有端点都位于/api前缀之下。文档中的示例默认使用桌面版端口39719如果是 Docker 部署把端口替换为映射后的端口即可。从源码看桌面版端口有明确出处CLI 客户端在 apps/core/cmd/cli/main.go 中声明了const defaultBaseURL http://127.0.0.1:39719也就是说命令行工具与 HTTP API 共用同一地址。统一响应格式所有/api/*端点都返回统一的 JSON 包装结构{ success: true, code: 0, message: ok, data: { ... } }字段类型说明successbool业务处理是否成功codenumber业务错误码0表示成功messagestring人类可读的消息dataany实际响应负载结构随端点不同而变下文各示例的响应部分只展示data字段的内容。需要留意的是HTTP 状态码与code字段并不总是完全一致。例如在下载创建接口中当请求的 URL 已存在于下载列表中时handler 会返回 HTTP409 Conflictdownload.go而 Discovery 系列的错误则分别映射到400/404/409/429/503等状态码详见 discovery.go读取响应时应当同时关注两者。认证方式桌面版默认无需认证直接向localhost:39719发起请求即可。Docker 部署若开启了认证需要先从 MediaGo 的设置页面获取 API Key并在后续请求中携带Authorization: Bearer key请求头。从认证中间件实现auth.go可以确认更完整的规则当配置中不存在apiKey即尚未设置认证时所有请求直接放行一旦设置了apiKey除白名单路径如/healthy、/api/auth/*、静态资源等外所有请求都需携带有效 tokenToken 的提取优先级为X-API-Key请求头 Authorization: Bearer token请求头 ?token查询参数。之所以保留查询参数方式是因为浏览器的EventSource无法自定义请求头订阅 SSE 时只能通过 URL 查询参数传 token。媒体检测Discovery / 嗅探与解析媒体检测是异步任务。inspect直接解析 HLS 流browser则让 Electron 主进程创建一个隐藏、隔离的浏览器视图来收集媒体通信不会移动或替换用户正在查看的素材提取标签页。三种模式的行为差异如下auto直接面对.m3u8URL 时走inspect其他 HTTP(S) 页面走browser。inspect只接受直接的 M3U8 URL不需要 Electron。browser需要连接 Core 的桌面版。独立的 Docker / Core 部署下页面检测会返回discovery_executor_unavailable。模式选择的底层逻辑在 service.go 中请求经过 URL 合法性校验后若指定模式为inspect或模式为auto且 URL 路径以.m3u8结尾不区分大小写则进入 inspect 执行路径否则进入 browser 执行路径。Discovery 核心端点# 创建媒体检测任务异步 curl -X POST http://localhost:39719/api/discoveries \ -H Content-Type: application/json \ -d {url:https://example.com/watch/1,mode:browser,timeoutMs:20000,useSessionCookies:false} # 查询检测结果 curl http://localhost:39719/api/discoveries/discovery-id # 取消检测 curl -X POST http://localhost:39719/api/discoveries/discovery-id/cancel # 查看 executor 可用状态 curl http://localhost:39719/api/discovery-executor/status # 从检测结果创建下载任务 curl -X POST http://localhost:39719/api/discoveries/discovery-id/downloads \ -H Content-Type: application/json \ -d {sourceIds:[source-1],startDownload:true}关键约束与安全边界超时限制timeoutMs被限制在 3000–30000 ms 之间。源码 types.go 定义了MinTimeoutMS 3_000、MaxTimeoutMS 30_000、DefaultTimeoutMS 20_000且 service.go 会对超出范围的输入值做 clamp 修正即使你不传该字段也会自动使用 20 秒默认值。结果保留期内存中的检测结果约 10 分钟后失效DefaultRetention 10 * time.Minute过期任务会被清理因此应在结果有效期内完成下载交接。会话 CookieuseSessionCookies默认为false仅在需要登录态桌面会话时才应显式开启。Cookie、Authorization 等凭据不会出现在公开 API、CLI 和 MCP 的结果中且重启后失效。用途边界该 API 不是用于绕过 DRM 或站点访问控制的功能。检测结果的下载交接POST /api/discoveries/:id/downloads是检测 → 下载的交接点。从 discovery.go 可以看到请求体除sourceIds与startDownload外还支持folder、names、variantUrls见 dto/discovery.go当任务尚未完成既非completed也非failed时返回409 discovery_invalid_transition当sourceId不存在时返回404 discovery_source_not_found浏览器私有凭据只在内存中用于延迟启动与重试落库记录只保留安全的请求头子集PersistentDiscoveryHeaders单次最多处理 20 个来源maxDiscoveryDownloadSources请求体上限 64KB、URL 上限 8KB。CLI 中的等价操作桌面版自带的命令行工具封装了同样的流程main.gomediago discover https://example.com/watch/1 --mode browser --json mediago discover get discovery-id --json mediago discover cancel discovery-id mediago discover download discovery-id --source source-1CLI 与 API 行为一致discover默认--mode auto、--timeout 20s对应DefaultTimeoutMS并会在等待期间收到 CtrlC 时自动取消任务--no-wait可创建后立即返回。此外对应能力也以 MCP 工具形式暴露discover_media、get_media_discovery、cancel_media_discovery、download_discovered_media。/mcp端点使用 Bearer token 认证需要在设置中启用。快速入门三条命令打通完整下载流程下面三个 curl 命令可以一口气跑通创建任务 → 启动下载 → 完成通知的完整流程。第 1 步创建下载任务curl -X POST http://localhost:39719/api/downloads \ -H Content-Type: application/json \ -d { tasks: [ { type: m3u8, url: https://example.com/video.m3u8, name: 我的视频 } ], startDownload: true }参数说明type下载类型可选m3u8/bilibili/direct/youtube/mediagourl视频 URL必填缺失时 DTO 校验会直接拒绝见 dto/download.go 中的binding:requiredname任务名作为保存文件名使用startDownload是否在创建后立即开始下载。创建接口支持批量提交tasks是一个数组一次请求可同时创建多个任务startDownload对所有任务统一生效。响应示例[ { id: 123, name: 我的视频, type: m3u8, url: https://example.com/video.m3u8, status: waiting, createdDate: 2026-04-23T10:00:00Z } ]记下返回的id后续所有控制操作都依赖它。值得注意的实现细节当startDownload为true时handler 会从运行时配置读取local保存目录与deleteSegments配置并自动启动下载download.go。如果该 URL 已存在于下载列表会返回409 Conflict与URL 已存在提示而不是重复创建。第 2 步订阅下载事件SSEcurl -N http://localhost:39719/api/events这是一个长连接服务器推送的内容会原样持续输出event: download-start data: {id: 123} event: download-success data: {id: 123}浏览器 / Node.js 中的订阅写法const es new EventSource(http://localhost:39719/api/events); es.addEventListener(download-success, (e) { const { id } JSON.parse(e.data); console.log(任务完成:, id); });从实现看event.go该端点返回text/event-stream并设置了Cache-Control: no-cache、Connection: keep-alive、X-Accel-Buffering: no响应头客户端断连时服务端会通过请求上下文感知并清理订阅。特别说明该事件流不包含进度更新事件需要获取下载进度时应轮询GET /api/downloads/:id。第 3 步状态查询与手动控制# 列出所有下载任务分页 curl http://localhost:39719/api/downloads?current1pageSize20 # 获取单个任务 curl http://localhost:39719/api/downloads/123 # 启动已有任务 curl -X POST http://localhost:39719/api/downloads/123/start \ -H Content-Type: application/json \ -d {localPath: /Downloads/MediaGo, deleteSegments: true} # 停止任务 curl -X POST http://localhost:39719/api/downloads/123/stop # 获取任务日志 curl http://localhost:39719/api/downloads/123/logs其中start接口传入的localPath会同步写回运行时配置h.conf.Set(local, req.LocalPath)也就是说后续任务无需再重复指定保存路径。下载事件SSE 事件表GET /api/events是与下载相关的事件流事件定义如下事件名负载说明download-create{ids: number[], count: number}任务批量创建download-start{id: string}下载开始download-success{id: string}下载成功download-failed{id: string, error: string}下载失败download-stop{id: string}手动停止下载download-create的广播在创建成功后由 handler 主动触发download.go这样主窗口、悬浮对话框以及外部客户端等所有连接者都能即时刷新各自的状态而不依赖跨 WebContents 的 IPC。端点参考列表与查询GET /api/downloads— 分页列表查询参数currentnumber默认 1页码pageSizenumber默认 20每页大小filterstring可选按状态过滤downloading/success/failedlocalPathstring可选按保存路径过滤。响应{ total: 42, list: [/* DownloadTask[] */] }GET /api/downloads/active— 活动任务列表返回所有waiting/downloading状态的任务对应源码FindActiveTasks。GET /api/downloads/:id— 获取单个任务响应DownloadTask结构{ id: 123, name: 我的视频, type: m3u8, url: https://example.com/video.m3u8, folder: my-folder, headers: User-Agent: ..., isLive: false, status: success, file: /path/to/saved.mp4, createdDate: 2026-04-23T10:00:00Z, updatedDate: 2026-04-23T10:05:30Z }任务不存在时返回 404。GET /api/downloads/folders— 不重复的保存目录列表响应string[]GET /api/downloads/export— 导出下载列表纯文本格式每行一个 URL。GET /api/downloads/:id/logs— 获取下载日志响应{ id, log: string }创建 / 删除POST /api/downloads— 批量创建下载任务请求体{ tasks: [ { type: m3u8 | bilibili | direct | youtube | mediago, url: https://example.com/video.m3u8, name: 任务名, folder: 可选的子目录, headers: 可选的多行 HTTP 头 } ], startDownload: true }响应DownloadTask[]headers字段值得一提当startDownloadtrue时提交的多行请求头会拆分成运行时临时头仅本次启动与重试使用不落库与持久化安全头写入数据库记录两部分避免把敏感凭据写入持久存储见 download.go。DELETE /api/downloads/:id— 删除任务响应{}编辑 / 状态PUT /api/downloads/:id— 编辑任务请求体全部可选只传需要修改的字段{ name: 新名称, url: 新 URL, headers: 新请求头, folder: 新子目录 }handler 会对传入的字段做非空判断指针字段仅更新实际提供的属性URL 若与其他任务重复会返回409。PUT /api/downloads/:id/live— 切换直播标志请求体{ isLive: true }该标志用于把任务标记为直播流下载模式MediaGo 内置了直播恢复能力见 core/live_recovery.go。PUT /api/downloads/status— 批量更新状态请求体{ ids: number[], status: waiting | downloading | success | failed | stopped }开始 / 停止POST /api/downloads/:id/start— 开始下载请求体{ localPath: /Users/me/Downloads/MediaGo, deleteSegments: true }localPath保存位置绝对路径deleteSegmentsm3u8 下载完成后是否删除分片.ts文件。POST /api/downloads/:id/stop— 停止下载响应{}枚举值下载类型type值说明m3u8HLS 流内部使用 N_m3u8DL-REbilibiliBilibili 视频内部使用 BBDowndirect直接 HTTP 下载内部使用 aria2youtubeYouTube 及 yt-dlp 支持的 1000 站点mediagoMediaGo 内部类型CLI 的download命令同样支持这些类型--type参数可覆盖类型缺省时按 URL 自动推断。任务状态status值说明waiting已入队尚未开始downloading下载中success已完成failed失败stopped手动停止源码视角路由与执行链路路由注册所有/api路由在 apps/core/internal/api/server/router.go 中统一注册下载任务路由挂在/api/downloads下POST/GET 、GET /folders、GET /export、GET /active、PUT /status、GET|PUT|DELETE /:id、POST /:id/start|stop、PUT /:id/live、GET /:id/logs且仅在数据库可用downloadHandler ! nil时注册Discovery 系列路由包括POST /discoveries、GET /discoveries/:id、POST /discoveries/:id/cancel、POST /discoveries/:id/downloads、GET /discovery-executor/status此外还有GET /api/eventsSSE、GET /api/config、/api/tasks/*无数据库环境下的任务端点、/api/docker/*Docker 模式的下载接口等周边端点。服务端执行链POST /api/downloads的处理链为handler 解析并校验 DTO → 调用DownloadTaskService.AddDownloadTasks落库 → 若startDownload为真则读取配置中的local与deleteSegments并调用StartDownloadIfNeeded→ 通过 SSE Hub 广播download-create。任务的实际下载则由内部的下载引擎队列、运行器执行最终通过download-success/download-failed事件通知订阅者。Discovery 超时与保留期Discovery 任务的超时与保留期在 apps/core/internal/discovery 中实现DefaultTimeoutMS 20_000、MinTimeoutMS 3_000、MaxTimeoutMS 30_000、DefaultRetention 10 * time.Minute。任务的过期时间在创建时即计算ExpiresAt now timeout retention见 store.go并在服务层以定时器调度取消service.go。注意事项与最佳实践端口确认桌面版固定为39719Docker 部署以-p映射为准默认9900。调用前可用GET /healthy做健康检查该路径在认证白名单中。事件流不包含进度SSE 只推送状态变更类事件需要百分比进度时应轮询GET /api/downloads/:id。敏感信息处理认证启用的 Docker 实例务必通过 HTTPS 或可信内网访问useSessionCookies尽量保持默认false避免凭据泄漏。批量能力POST /api/downloads与POST /api/discoveries/:id/downloads均支持批量一次提交多个任务可减少连接开销。结果时效Discovery 结果保留约 10 分钟请及时完成检测 → 下载交接避免结果过期后返回 404。重复 URL 防护创建任务时若 URL 已存在会返回409 Conflict可在客户端预先查询列表或在捕获冲突后复用已有任务 ID。通过上述端点与事件机制你可以完全绕过图形界面用任何 HTTP 工具将 MediaGo 的下载能力集成到自己的脚本、服务或自动化工作流中。赞分享音视频桌面应用后端【免费下载链接】mediago跨平台视频提取工具支持流媒体下载、视频下载、m3u8 下载及 B站视频下载提供 Windows 和 Mac 桌面客户端。Cross-platform video extraction tool: Supports streaming download, video download, m3u8 download, and Bilibili video download, with desktop clients for Windows and Mac.项目地址https://gitcode.com/caorushizi/mediago点击查看免费下载相关推荐MediaGo 下载服务 HTTP API 实战指南任务管理、SSE 事件与媒体发现MediaGo 下载服务 HTTP API 实战指南任务管理、SSE 事件与媒体发现 MediaGo 将自身多任务下载引擎以 HTTP 服务的形式对外开放桌音视频桌面应用后端MediaGo 下载引擎 HTTP API 全解接口参考、SSE 事件订阅与媒体发现实战MediaGo 下载引擎 HTTP API 全解接口参考、SSE 事件订阅与媒体发现实战 MediaGo 把整个下载引擎任务管理、批量下载、媒体嗅探解析暴音视频桌面应用后端MediaGo Core 多任务下载系统实战指南Go/Gin 下载引擎的启动、API、Agent 媒体发现与 NPM 发布全流程MediaGo Core 多任务下载系统实战指南Go/Gin 下载引擎的启动、API、Agent 媒体发现与 NPM 发布全流程 MediaGo Core 是音视频桌面应用后端上一篇HiGHS线性优化求解器免费开源的高性能数学优化神器终极指南下一篇5分钟在PC上重温经典如何用Ship of Harkinian体验4K版塞尔达传说时之笛创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表