资讯动态

视频号直播录制全链路:从按钮点击到 MP4 落盘

发布时间:2026/11/6 4:52:28 来源:尧图企业网站定制
视频号直播录制全链路从按钮点击到 MP4 落盘【免费下载链接】wx_channels_download微信视频号下载器项目地址: https://gitcode.com/gh_mirrors/wx/wx_channels_download直播录制和普通视频下载是两回事直播流没有确定长度也不能按字节断点续传。wx_channels_download 为直播录制设计了独立管道前端注入脚本在直播页挂出下载按钮后端 ffmpeg 子进程把无限流分段录成文件再转封装成 MP4。文章先分清 FILE 与 STREAM 的资源模型差异再讲两条录制触发路径。随后拆解 ffmpeg 子进程的生命周期管理并给出 HTTP 与 MCP 两个脚本化入口。直播流和普通视频到底差在哪下载引擎在 engine.go 中定义三种资源类型FILE定长文件、COLLECTION保留类型、STREAM直播流。FILE 走常规的分段下载循环STREAM 则交给独立的录制调度器两者从请求模型开始就分道扬镳维度FILE普通视频STREAM直播流资源长度确定可算总量与完成百分比未知随推流持续增长请求方式HTTP Range 分段 断点续传ffmpeg 进程级管道无 Range中断恢复记录 offset 续传按 10 分钟 MKV 分片续录已关片不重录并发占用占下载并发槽位不占并发槽长任务豁免直播任务在 adapter 层构建时资源被标记为Type: STREAM、协议为livestream流地址取自 joinLive 响应的liveSdkInfo.liveCdnUrl分片轮转周期固定 10 分钟。跑起来依赖检查与最小路径ffmpeg 是直播录制的硬依赖引擎在启动录制前会探测它。一条命令确认环境ffmpeg -version最小可用路径三步安装 ffmpegmacOS 用 HomebrewLinux 用发行版包管理器确认其在 PATH 中启动下载服务默认监听 2023 端口并接管系统代理用法见 docs/cli/server.md浏览器打开视频号直播页点击右上角「下载图标」按钮。两条录制路径直播页一键创建直播录制任务入口由 channels.live.js 注入脚本监听直播页.host__info .extra容器把下载按钮插入容器首个子节点之前无需人工干预。单击按钮触发录制核心逻辑就四行var [liveErr, p, liveData] WXU.check_live_existing({ silence: true }); if (liveErr || !liveData?.liveSdkInfo?.liveCdnUrl) return; // 无流则报错提示 var content { profile: p, live: liveData }; var r await dl$.create(content, { platform: wxchannels });校验liveSdkInfo.liveCdnUrl通过即创建任务。成功反馈是「直播下载任务已创建」toast任务随即进入下载队列统一管理失败则提示「检测不到直播流请将本工具更新到最新版」或「下载器未初始化」中途失败由task$.onFailed回调弹出「下载失败: 原因」。复制 ffmpeg 手动录制命令模板悬停按钮会弹出下拉菜单每个 CDN 转码档位对应一个菜单项标签由「档位名 码率 画质描述」拼接如高清 1500 720P。点击任意档位命令即被复制进剪贴板ffmpeg -i CDN 直播地址 -c copy -y live_毫秒时间戳.flv逐个看关键参数-c copy是流复制只换容器不转码速度最快且画质无损-y自动覆盖同名输出live_毫秒时间戳.flv用Date.now()命名避免与既有文件冲突FLV 容器与视频号直播常见的 HTTP-FLV 协议对齐。多档位并存时按带宽取舍低码率档适合弱网长录。这条命令的意义在于即使不经过应用内任务你也能拿到真实 CDN 地址用任何终端手动录制。录制引擎内部怎么跑的应用内任务的录制全部发生在 stream.go 的StreamDriver里。按 ffmpeg 进程的生命周期拆一共六个阶段探测依赖Prepare与RecordStream都先调exec.LookPath(ffmpeg)缺失直接返回ffmpeg is required for live recording启动子进程ffmpeg 以-f segment -segment_format matroska按 10 分钟写segment-XXXXXX.mkv分片同时往playback目录输出一份 4 秒粒度的 HLS 播放列表——这就是「边下载边播放」的来源HTTP 流会追加-reconnect系列参数并透传代理与自定义请求头进度上报-progress pipe:1让 ffmpeg 把进度写进 stdout引擎解析后扫描目录汇总各分片状态产出已下载字节、速度、时长容错重试源站返回 401/403/410 被识别为签名 URL 失效不再重试直接判负其他失败按 1s/2s/4s 指数退避重试至多 3 次重试时从已有分片编号继续已录部分不浪费优雅停止先向 stdin 写入q并关闭给 8 秒宽限期等待 ffmpeg 自行退出超时才 cancel 进程手动停止会用独立的 30 分钟上下文完成收尾保证已录内容不丢无损合并逐片用 ffprobe 校验坏片改名.corrupt隔离其余按ffconcat清单-c copy拼接成单个 MKV最后清理临时目录。合并完成只是落盘还不是最终产物。postprocess.go 中route_resource网关节点把resource_type STREAM的资源分流到stream_convertffprobe 探测编码后转封装为 MP4HEVC 仅重写为hvc1标签保证系统播放器兼容未知编码回退 H.264 重编码音频统一 AAC随后finalize_stream把 MP4 路径写回资源并更新任务状态。脚本化与 Agent 调用直播能力同时暴露为 HTTP 接口注册在 routes.go路由查询参数说明GET /api/channels/live/profileusername、oid、nid、id走前端 joinLive 接口取直播资料含liveCdnUrlGET /api/channels/live/replay/listusername、next_marker取直播回放列表结果缓存 5 分钟MCP 侧提供三个工具见 wxchannels_download_tools.godownload_wxchannels_live只需传account精确昵称或 username工具内部完成账号搜索、直播流定位、原生任务创建与自动启动缺liveCdnUrl时回退streamUrlget_wxchannels_live_replays取某账号的直播回放列表get_wxchannels_live_profile取直播资料详情。设计亮点在第一个工具一个参数走完全程。调用方不需要先取流地址、再拼 content、再创建任务「定位 创建 启动」被压缩成一次 MCP 调用。踩坑与边界情况流地址有有效期liveCdnUrl的签名只在直播进行期间有效直播结束后 ffmpeg 收到 401/403/410任务立即判负。想拿播后内容走回放列表接口。中断恢复不是续传直播流无法回退恢复靠「从当前分片继续」。引擎默认 10 分钟一切片中断后再录会接上编号已录部分最终仍拼进成片。输出格式分两条线应用内任务最终产物是 MP4过转封装手动复制命令产出 FLV 到当前工作目录要换位置或容器得自己改命令末尾。多档位取舍清晰度菜单对应不同 CDN 转码档码率越高文件越大、对上行要求越高弱网长录建议选低档。ffmpeg 是硬依赖录制启动前就探测缺了直接拒绝ffprobe 只用于分片校验缺失不阻塞录制但会降低坏片识别能力。实验性功能live.md 明确标注「实验性」。直播场景 DOM 与接口变化快按钮行为异常时先升级应用版本。从一次点击到最终产物全链路速览直播页点击下载按钮校验 liveCdnUrl 存在创建 STREAM 下载任务ffmpeg 分段录制落盘校验分片并无损拼接转封装 MP4 并更新任务继续深挖看这三个文件前端注入、流录制驱动、后处理流程。【免费下载链接】wx_channels_download微信视频号下载器项目地址: https://gitcode.com/gh_mirrors/wx/wx_channels_download创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑